How to – Mailversand über PowerShell

Die PowerShell bietet umfangreiche Möglichkeiten, um Mails zu versenden. Sie können Mails mit oder ohne Authentifizierung und mit oder
ohne Anhang versenden. Selbst das Format können Sie frei bestimmen. Eine Möglichkeit ist, sich die Mail mit allen benötigten Informationen
zusamenzubauen. Ab PowerShell 2.0 gibt es aber auch das cmdLet Send-MailMessage. Ich werde auf beide Varianten eingehen.

Mailversand mit Script über Exchange

Dazu benötigen Sie ein neues Object eines SMTP-CLients, einer MailMessage und eines Attachements. Sie müssen den SMTP Server mit angeben
sowie einen Absender und einen Empfänger. Ein Betreff, eine Formatangabe oder auch ein Inhalt ist nicht zwingend erforderlich,
aber doch hilfreich :-). Am einfachsten fassen Sie die benötigten Informationen in einer Funktion zusammen, die Sie dann aus dem jeweiligen
Script heraus aufrufen:

function mailsend($Mail)
{
$smtpclient = New-Object system.net.mail.smtpclient
$mailmessage = New-Object system.net.mail.mailmessage
$file = “c:\_Marco\test.txt”
$attachment = New-Object system.net.mail.attachment($file)
$smtpclient.host = “smtp.domain.de”
$mailmessage.from = “absender@domain.de”
$mailmessage.to.add(“empfaenger@domain.de”)
$mailmessage.attachements.add($file)
$mailmessage.subject = “Betreff”
$mailmessage.isBodyHtml = $True
$mailmessage.Body = $Mail
$smtpclient.send($mailmessage)
}

$Mail = “Hier steht der Text der Mail”

mailsend $mail

Sie können als Empfänger auch mehrere Adressen eintragen. Dazu trennen Sie diese einfach mit einem Komma “empf1@domain.de,empf2@domain.de,empf3@domain.de”.
Auch CC und BCC ist möglich. Und natürlich mehrere Attachments.

Mailversand über Provider (Beispiel Strato)

Betrachten wir dazu das gleiche Script. Ich habe nun noch die Angabe der Credentials mit eingebaut. Es ist natürlich darauf zu achten, dass
die meisten Provider nur noch verschlüsselte Anmeldungen zulassen. Also müssen Sie SSL verwenden. Über das cmdLet get-credential werden Username
und Passwort eingelesen.

function mailsend($Mail)
{
$smtpclient = New-Object system.net.mail.smtpclient
$mailmessage = New-Object system.net.mail.mailmessage
$file = “c:\_Marco\test.txt”
$attachment = New-Object system.net.mail.attachment($file)
$smtpuser = get-credential
$smtpclient.host = “smtp.strato.de”
$smtpclient.credentials = $smtpuser
$smtpclient.enablessl = $True
$mailmessage.from = “absender@langlitz-it.de”
$mailmessage.to.add(“empfaenger@domain.de”)
$mailmessage.attachments.add($file)
$mailmessage.subject = “Betreff”
$mailmessage.isBodyHtml = $True
$mailmessage.Body = $Mail
$smtpclient.send($mailmessage)
}

$Mail = “Hier steht der Text der Mail”

mailsend $mail

Nach Aufruf des Scripts erfolgt dann die Eingabe der Credentials:

get-credential

 

Mail Versand über das cmdLet Send-MailMessage

Ab der PowerShell 2.0 gibt es dieses cmdLet. Hier werden ganz einfach die nötigen Informationen als Parameter übergeben.

Send-MailMessage -From “absender@domain” -To “empf1@domain” -Subject “Betreff der Mail” -Body “Inhalt der Mail” -SmtpServer “smtp.domain.de”

Hierbei gibt es natürlich auch all die Funktionen wie Anmeldung, Attachment, etc.

Hier das ganze noch mal ausführlicher:

$Cred = get-credential
Send-MailMessage -Attachments C:\_Marco\test.txt -From “Absender@domain.de” -Body “Inhalt” -Subject “Betreff” -SmtpServer “smtp.strato.de” -Credential $cred -To “Empfaenger@domain.de” -UseSsl

Viel Spass damit