PowerShell – 07 – E-Mail versenden mit/ohne Dateianhang, Authentifizierung

Save page

Es gibt die verschiedensten Wege um E-Mails über PowerShell zu versenden. Eine Variante ist, man baut sich die E-Mail samt benötigten Informationen selbst zusammen oder man nutzt die cmdlet Send-MailMessage. Die cmdlet gibt es seit PowerShell 2.0. Die Vorteile liegen auf der Hand, alle benötigten Informationen, wie SMTP-Server, E-Mail-Adresse, ect. werden über Parameter angefügt und so kann nichts vergessen werden. Doch auch die selbst erstellte Variante hat ihre Vorteile.

Ich möchte mehrere Scripte vorstellen, zuerst die selbst erstellen und anschließend gehe ich auf die cmdlet Send-MailMessage kurz ein. Das erste Script ist für einen Exchange Server gedacht. Hier muss der Name des Exchange bekannt sein und der auszuführende User muss entsprechend berechtigt sein.

Was wird benötigt?

Um erfolgreich eine Mail zu versenden muss ein neues Objekt eines SMTP-Client erzeugt werden, dann wird der Host (in diesem Falle der Exchange Server) benötigt. Zudem muss es einen Absender sowie einen Adressanten geben. Der Betreff (engl. Subject) der E-Mail ist nicht zwingen erforderlich, ebenso wie die Information ob es eine HTML-Mail ist. Der Body, also der eigentliche Inhalt der E-Mail sollte allerdings vorhanden sein. Ich habe alle nötigen Eigenschaften in eine Funktion namens sendmail($body) geschrieben und unterhalb den Inhalt der Mail in der Variable $body gespeichert. Anschließend wird die Funktion einfach aufgerufen und der Inhalt übergeben.

Bei $mailmessage.To.add() müssen die Klammern auch bei nur einem Adressanten gesetzte werden, da es sich hierbei um ein Array handelt. Demzufolge können natürlich mehrere Empfänger hinzugefügt werden. Ebenso ist es möglich auch BBC einzurichten. Also Empfänger die nicht in der E-Mail genannt bzw. angezeigt werden.

Das Script nun noch einmal mit einem Anhang. Dafür wird der Pfad der anzuhängenden Datei benötigt, zudem muss eine Objekt-Instanz erzeugt werden und diese an die E-Mail angehangen werden.

Es können auch über gängige Provider wie GMX, Web.de und andere einfach E-Mails verschickt werden. Dies ist ebenfalls mit und ohne Anhang möglich. Hierbei werden weniger Informationen benötigt als bei dem Script für den Exchange. Es muss wieder eine SMTP-Objekt instanziiert werden, hier wird auch gleich der SMTP-Client des Providers angeben. In meinem Fall ist das mail.gmx.net. Eine List der SMTP, POP3 oder IMAPs der verschieden Provider findet man einfach im Internet oder auf der entsprechenden Seiten des Providers. Es kann auch anstatt des DNS-Namen die IP-Adresse des SMTP-Clients angegeben werden. Die kann mittels CMD-Befehl ping mail.gmx.net ermittelt werden. So ist die IP-Adresse für GMX IPv4  213.165.64.21. Allerdings wird für dieses Verfahren die Authentifizierung benötigt. Dies geschieht je nach Provider mit einem Anmeldenamen oder der E-Mail-Adresse. Das Password wird natürlich auch benötigt. Um erfolgreich die Mail zu versenden müssen folgende Kriterien in folgender Reihenfolge angeben werden: ,,,. Es  können hier auch $Variablen eingesetzt werden, die vorher definiert wurden.

Das Script jetzt nochmal mit Anhang und in einer ähnlichen  Schreibweise, angelehnt an das Exchange-Script. Hier wird bei $smtp.send() nur noch die $Variable $MailMessage angehangen. Diese Variante ist zwar länger, sieht aber deutlich übersichtlicher aus.

Es gibt auch die Möglichkeit, dass das Passwort sowie der Benutzername nicht hinterlegt sein müssen. Dies wird mittels der cmdlet get-credential realisiert. Diese Fragt dann Benutzernamen und Passwort ab und sieht wie folgt aus.

get-credential

Hier wieder die kurze Variante des Scriptes allerdings mit Authentifizierung.

Anschließend komme ich noch auf die ab PowerShell 2.0 verfügbare Funktion Send-MailMessge ein. Es werden wieder alle benötigten Informationen als Parameter übergeben. Dies können auch wieder Variablen sein.

Wer gerne noch mehr Informationen zur cmdlet möchte, kann sich den Artikel von Wolfgang Sommergut zum Thema Send-MailMessage auf WindwosPro anschauen.Er hat einen sehr guten uns ausführlichen Artikel dazu verfasst. Auf Colorconsole.de sind alle Eigenschafen aufgelistet.

rewe

 

2 Gedanken zu „PowerShell – 07 – E-Mail versenden mit/ohne Dateianhang, Authentifizierung

  1. Pingback: Powershell Script in einem Schedule Task ausführen | Blog: Stefan Rehwald

  2. Pingback: PowerShell – Masterindex | Blog: Stefan Rehwald

Kommentar verfassen