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

Printed on: April 25, 2024 at 03:04 o'clock

Mitglied: 131381
131381 Nov 08, 2016 updated at 17:59:34 (UTC)
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ß
Member: falscher-sperrstatus
falscher-sperrstatus Nov 08, 2016 at 18:06:17 (UTC)
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
Member: colinardo
colinardo Nov 09, 2016, updated at Jun 21, 2019 at 11:39:18 (UTC)
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