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.
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.
Das habe ich natürlich gemacht und ist hier als Download.
Download der PowerShell Skripte
Die PowerShell Skripte sind mittlerweile auf GitHub gehostet.
Hinweis zu Programm- und PowerShell 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.
Schreibe einen Kommentar