Hier ein kleines Powershell Script, das die in einem Ordner unter Windows vorhandenen Dateien per E-Mail an eine vorgegebene E-Mail Adresse verschickt und anschließend in einen Unterordner verschiebt.
Damit kann man z.B. automatisiert PDF-Dateien (oder auch andere Dateien) an eine RECHNUNGSEINGANG@ oder ARCHIV@ Mailadresse versenden.
## E-Mails mit Anhang aufgrund von Dateien in einem Ordner versenden
# Aufgabenplanung powershell starten mit
# powershell -ExecutionPolicy Unrestricted -file "G:\Meine Ablage\Systeme\Powershell\Belegdrop-email.ps1"
# Parameter & Einstellungen
$email_server = “smtp.mailserver.de”
$email_receiver="rechnungseingang@domain.de” # if this is empty, e-mail is disabled
$email_sender="belegdrop@domain.de"
$email_user = "belegdrop@domain.de"
$pw = ConvertTo-SecureString -String p_passwort -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential $email_user, $pw # oder (Get-Credential)
# die einzelnen Dateien ermitteln
$email_subject="Rechnung: ”
$folder1_path="G:\Meine Ablage\Rechnungseingang-Drop"
$p_filedone ="G:\Meine Ablage\Rechnungseingang-Drop\send-done"
# Dateien aus dem Rechungsordner einlesen
$hf_files=(Get-ChildItem $folder1_path -File).Name
foreach ($item in $hf_files)
{
$hf_filename = $folder1_path + "\" + $item
$hf_subject = $email_subject + $item
write-host $item
$error.Clear()
# E-Mail mit Attachment verschicken
send-mailmessage -from $email_sender -to $email_receiver -subject $hf_subject -Body "Rechnung im Anhang" -Attachments $hf_filename -dno onSuccess,
onFailure -smtpServer $email_server -UseSsl -Port 587 -credential $cred
if ($error) {
write-host $item $error
}
else {
Move-Item $hf_filename -Destination $p_filedone
}
$error.clear()
}
# die einzelnen Dateien ermitteln
$email_subject="manuelle Ausgangsrechnung: ”
$folder1_path="G:\Meine Ablage\Rechnungsausgang-manuell-Drop"
$p_filedone ="G:\Meine Ablage\Rechnungsausgang-manuell-Drop\send-done"
# Dateien aus dem Rechungsordner einlesen
$hf_files=(Get-ChildItem $folder1_path -File).Name
foreach ($item in $hf_files)
{
$hf_filename = $folder1_path + "\" + $item
$hf_subject = $email_subject + $item
write-host $item
$error.Clear()
# E-Mail mit Attachment verschicken
send-mailmessage -from $email_sender -to $email_receiver -subject $hf_subject -Body "Rechnung im Anhang" -Attachments $hf_filename -dno onSuccess,
onFailure -smtpServer $email_server -UseSsl -Port 587 -credential $cred
if ($error) {
write-host $item $error
}
else {
Move-Item $hf_filename -Destination $p_filedone
}
$error.clear()
}
exit
Etwas kniffelig ist wohl, wie man die Powershell Aufgabe anschließend in der Windows Aufgabenplanung startet. Bei mir funktioniert es aktuell mit:
als Aufgabe/Aktion C:\Windows\SysWOW64\cmd.exe starten
mit Parameter: /c „G:\Meine Ablage\Systeme\Powershell\Belegdrop.bat“
In der Batchdatei steht dann:
c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Unrestricted -file "G:\Meine Ablage\Systeme\Powershell\Belegdrop-email-senden.ps1"
exit /b 0