weber4134
Goto Top

Skript zum Auslesen und Automatischen Versenden von E-Mails

Guten Abend,

ich habe ein kleines Unternehmen und würde gerne die Rechnungsstellung auf Versand per E-Mail umstellen. Dazu werden die Rechnungen nun direkt an einen PDF Drucker versendet und in einem bestimmten Ordner abgespeichert. Diese PDF Dateien werde ich in Zukunft einzeln per E-Mail an die vorgesehenen Adresse verschicken.
Ich würde jedoch gerne wissen, ob es eine Möglichkeit oder ein Skript gibt, welches die jeweilige E-Mail Adresse aus der PDF liest und dann automatisch eine E-Mail an die im PDF vorhandene E-Mail Adresse verschickt und die jeweilige Datei im Anhang anfügt.

Vielen Dank schon mal im Voraus für eure Hilfe.

Gruß

Content-Key: 320330

Url: https://administrator.de/contentid/320330

Ausgedruckt am: 28.03.2024 um 22:03 Uhr

Mitglied: 131381
131381 08.11.2016 aktualisiert um 18:59:34 Uhr
Goto Top
Such hier im Forum mal nach pdftk.exe

Damit findest du was du suchst..

PDF Dateien aus Verzeichnis automatisch per Email versenden
PDF Datei auslesen und bei Stichwörtern ausdrucken

Gruß
Mitglied: falscher-sperrstatus
falscher-sperrstatus 08.11.2016 um 19:06:17 Uhr
Goto Top
Hallo weber,

ich würde dir vorschlagen dies in einem dafür gemachten CRM/ERP System durchzuführen. Dann ist das ad hoc mit erschlagen.

VG
Mitglied: colinardo
colinardo 09.11.2016, aktualisiert am 21.06.2019 um 13:39:18 Uhr
Goto Top
Hallo @weber4134 .
Ich würde dir m das selbe empfehlen wie @certifiedit.net schon schreibt. Das ist heutzutage bei jeder noch so billigen Business-Solution integriert.

Um trotzdem deine Frage noch mit etwas konkretem Code zu beantworten da vielleicht jemand anderes auch etwas ähnliches vorhat, JA das ist problemlos möglich.

Ich habe hier mal ein ganz einfaches Beispiel mit Powershell zusammen gestellt, das die PDF-Dateien eines Ordners ausliest, die erste gefundene Mail-Adresse extrahiert, und dann die Datei als Attachment per Mail verschickt. War das versenden erfolgreich wird die PDF-Datei in einen Ablage-Ordner verschoben.
Für das Beispiel wurde die Send-MailMessage Zeile an GMail angepasst (das lässt sich ja einfach an jeden Provider anpassen, und bitte die Zugangsdaten und Mail-Adressen anpassen!).
Logging wurde für das Beispiel außen vor gelassen, das kann jeder selber nach seinen Wünschen nachrüsten.

Anzupassen sind die Ordnerpfade für die PDFs und der Ablage-Ort, und der Pfad zur iTextsharp.dll die man hier herunterladen kann. Die DLL wird verwendet um den Text der PDF-Dateien zur Analyse zu extrahieren.

# ------------------------------------------------------
# Pfad in dem die PDFs liegen
$pdfquelle = "$PSScriptRoot\pdfs"  
# Pfad in den die PDFs nach dem Versenden gespeichert werden
$pdfablage = "$PSScriptRoot\ablage"  
#Pfad zur iTextsharp DLL
$PATH_ITEXTSHARP = "$PSScriptRoot\itextsharp.dll"  
# ------------------------------------------------------

# Mindestens PS 3.0
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}    

# Ablageverzeichnis erstellen falls nicht vorhanden
if (!(Test-Path $pdfablage)){md $pdfablage -Force | out-null}

# iTextSharp DLL laden
Add-Type -Path $PATH_ITEXTSHARP

# Funktion die den Text aus einem PDF extrahiert
function Get-PDFText([string]$path){
    try{
        $reader = new-object iTextSharp.text.pdf.PdfReader $path
        $txt = (1..($reader.NumberOfPages) | %{[iTextSharp.text.pdf.parser.PdfTextExtractor]::GetTextFromPage($reader,$_)}) -join ''  
        $reader.close()
        return $txt
    }catch{
        throw $_
        $reader.Close();$reader.Dispose()
    }
}

# Alle PDF-Dateien des Skript-Ordners verarbeiten und E-Mail-Adressen extrahieren
gci $pdfquelle -Filter *.pdf -File | %{
    # E-Mail extrahieren
    $mail = [regex]::matches((Get-PDFText $_.Fullname),'(?is)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b').Groups.Value | select -First 1  
    # Wenn eine Mailadresse gefunden wurde
    if ($mail.Count -gt 0){
        write-host "$(get-date -F G) - Versende '$($_.Fullname)' an '$mail' ..." -F Green  
        try{
            # Beispiel Versenden einer Mail über GMail
            Send-MailMessage -From "user@gmail.com" -to $mail -Subject "Rechnung" -Body 'Anbei Ihre Rechnung' -SmtpServer 'smtp.gmail.com' -Credential (New-Object PSCredential('user@gmail.com',(ConvertTo-SecureString 'GEHEIM' -AsPlainText -Force))) -UseSSL -Port 587 -Attachments $_.Fullname -EA Stop  
            move-item $_.Fullname -Destination $pdfablage -Force
        }catch{
            Write-Error $_.Exception.Message
        }
    }
}
Damit es für den ein oder anderen einfacher ist habe ich ein ZIP-File mit allen nötigen Dateien und zwei Demo-PDFs zusammengestellt das ihr hier herunterladen könnt.

ACHTUNG WICHTIG: Die PDF-Dateien enthalten Fake-E-Mail-Adressen, also bitte vorher dem Starten des Scripts durch andere PDFs austauschen oder zum Test die Send-Mailmessage Zeile auskommentieren.

Hoffe das hilft dem ein oder anderem der vor der selben Aufgabe steht.

Grüße Uwe

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate