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:
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