Dateien aus einem Verzeichnis per Mail verschicken mit der Power Shell

A screenshot of a social media post

Heute gibt es mal wieder einen kleinen Artikel nach dem Motto „Wenn das nicht funktioniert, dann mach ich das halt mit der Power Shell“. Öfters gibt es die Anforderung einzelne Dateien in einem Verzeichnis nach der Erstellung per Mail zu verschicken. Ich habe so einen Fall und dachte mir, ich lasse euch Teilhaben.

Warum braucht ich das?

Was ist passiert? Ich habe mir einen neuen Scanner gekauft, da beim Multifunktionsdrucker der Dokumenteneinzug nicht mehr wollte. Nach 6 Jahren und fehlenden Duplexscan dachte ich mir, dass eine Reparatur nicht Zielführend ist. Also habe ich mir einen Epson WorkForce DS-1660W gekauft. Die Gründe für mich waren:

  • WLAN (Kein USB Kabel und von mehreren Geräten nutzbar)
  • Duplexscan
  • OCR
  • Einzug mit bis zu 50 Blatt

Auch Stand dabei das Mailversand unterstützt wird. Leider nicht vom Gerät, sondern nur aus der Software. Für die Epson Netzwerkerweiterung die das auch direkt kann, wollte ich nicht noch 499€ extra ausgeben. Gut, ein kleines Manko.

Leider stellte sich heraus, dass nur Microsoft Office in 32-bit unterstützt wird. Für mich keine Option. Also musste eine andere Lösung her.

Screenshot: Epson Document Capture Pro
Screenshot: Epson Document Capture Pro

Das Programm zu Scannen unterstützt Aufträge, diese können verschiedene Ziel Ordner und Scanprofile haben. Also lege ich mir für die Verschiedenen Mail-Ziele verschiedene Ordner an.

Für was braucht mal einen Mailversand nach dem Scan?

Ich nutze das unter anderem für die Reisekostenabrechnung. Durch die Mail spare ich mir das Hochladen der Belege und brauche die nur auszuwählen.

Ein anderes Anwendungsbeispiel wäre auch eine Anwendung die eine Datei erstellt, und die weitergeleitet werden muss.

Das Power Shell Skript

Nach der Erklärung des „Warum“ und „Wieso“, kommen wir nun zu dem „Wie“.

Zu nächst müssen wir erstmal die Dateien selektieren

$sources = Get-ChildItem $sourcepath -Filter $filetype -Depth 0

Als nächstes kann ganz einfach die Mails verschickt werden und die Datei verschoben werden

ForEach ( $source in $sources)
{
$file = $source.FullName
$SubjectM = $Subject + $source.Name
Send-MailMessage -To $To -From $From -Subject $SubjectM -SmtpServer $SmtpServer -Attachments $file -UseSsl
Move-Item -Path $file -Destination $archivepath
}

Was jetzt aber Fehlt, ist die Möglichkeit der SMTP Authentifizierung. Kein Mailserver akzeptiert Mail zum Relay ohne Authentifizierung, von internen die mit IP-Whitelisten arbeiten mal abgesehen.

Also müssen wir die Credentials noch integrieren, doch zuerst die nötigen Vorbereitungen:

$password = ConvertTo-SecureString $smtppw -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($smtpuser, $password)

Als nächstes müssen Sie den Send-MailMessage Befehl noch anpassen

Send-MailMessage -To $To -From $From -Subject $SubjectM -SmtpServer $SmtpServer -Attachments $file -Credential $cred -UseSsl

Natürlich kann man diese Code-Schnipsel noch ordentlich in ein Skript einbinden.

Screenshot: ISE mit sent-files.ps1
Screenshot: ISE mit sent-files.ps1

Das habe ich natürlich gemacht und ist hier als Download.

Hinweis zu Programm und Power Shell Code

Der hier enthaltene Code dient als Beispiel. Ich übernehme keine Garantie, Gewährleistung oder Support für den Code oder Bestandteile. Verwendung des Codes erfolgt auf eigene Gefahr.
Ich empfehle immer sich die Skripte vor der Verwendung genau anzuschauen, was sie wirklich tun.

Ausführen des Skripts als geplante Aufgabe

Am besten das Skript als geplante Aufgabe einrichten. Wichtig ist, dass der Benutzer als den Sie das Skript ausführen Rechte auf die Verzeichnisse hat. Machen Sie sich auch Gedanken über die Ausführungshäufigkeit und Zeiträume. Muss das Skript alle 10 Minuten laufen, auch nachts um 3 Uhr?

Zu Anlegen können Sie die GUI oder den Befehl Schtasks nutzen.

Hinweis: Dieser Artikel enthält Amazon-Werbelinks, ich erhalte ein Vergütung für darüber gekaufte Artikel. An den Preisen ändert sich für Sie nichts.

Autor: Fabian Niesen

Fabian Niesen ist seit Jahren beruflich als IT-Consultant unterwegs. Hier schreibt er privat und unabhängig von seinem Arbeitgeber. Unter anderem ist er Zertifiziert als MCSA Windows Server 2008 / 2012, MCSA Office 365, MCSA Windows 10, MCSE Messaging, MCT und Novell Certified Linux Administrator. Seit 2016 ist er auch MCT Regional Lead für Deutschland. Seine Hobby’s sind Social Media, Bloggen, Mittelaltermärkte, Historische Lieder und der Hausbau. Zu finden ist er auch auf folgenden Plattformen: -

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.