PDF Mailer Script: Emailadresse des Rechnungsempfängers aus ihren Druckdaten ermitteln und automatisch per Mail versenden

Wir möchten ihnen mit unserem hier gezeigten Beispiel VBScript Macro „pdfmailer.vbs“ zeigen, wie man einen automatischen Rechnungsdruck aus beispielsweise einem ERP System direkt an Empfänger per eMail senden kann, und die dafür nötige E-Mailadresse des Rechnungsempfängers aus den Druckdaten gewonnen wird. Das VBScript unseres PDFMailers liesst also aus den Druckdaten die benötigte E-Mail des Rechnungsempfängers aus, und versendet das zuvor erzeugte Rechnungs-PDF vollautomatisch als eMail. Das hier gezeigte Beispiel soll ihnen dabei helfen, ihre Anforderungen selbst umsetzen zu können. Je nach Anforderung und Gegebenheiten muss das hier gezeigte Beispiel angepasst werden. Der Einstieg sollte aber damit gemacht sein. Für unser Beispiel wird in unserem Script ein üblicher Mailserver (SMTP) genutzt. Als Rechnung dient eine fiktive Beispielrechnung.

Beispielrechnung mit enthaltener eMail Adresse des Empfängers (in Rot)
Beispielrechnung mit enthaltener eMail Adresse des Empfängers (in Rot)

Beispielrechnung als DOC Datei als auch das PDFMailer VBScript können weiter unten kostenlos heruntergeladen werden. So kann man selbst einmal testen!

Dazu legt man zuerst das PDF Mailer VBScript Macro ins InstallRoot des PDF Druckers und dort in das Verzeichnis Macros ab, also zumeist unter C:\Programme\7-PDF\PDF Printer\Macros

Nun ist es wichtig die SMTP Zugangsdaten im Macro mit einem Editor wie Notepad++ auf seinen Mailserver hin anzupassen und die angepasste und modifizierte VBScript Datei danach zu speichern. Achtung, ggf. benötigen sie Adminrechte da sie sich unter C:\Programme befinden.

Dann öffnet man mit Microsoft Word unsere Beispielrechnung um einen Rechnungsdruck zu simulieren. Hier sollten sie nun noch die Empfänger – Emailadresse auf ihre Wünsche hin anpassen (rot eingefärbt).

Nun drucken sie die Beispielrechnung über 7-PDF Printer aus! Der Druckdialog erscheint, sie geben einen PDF Speicherpfad an und erzeugen das PDF. In diesem Moment wird auch gleich eine eMail an den Empfänger versendet. Und das vollautomatisch…

Das hier gezeigte Beispiel soll ihnen zeigen wie sie selbst mit 7-PDF Printer und ein paar wenigen Zeilen VBScript Code eine hohe Automatisierung ihrer Prozesse abbilden können. Der Weg in die Digitalisierung ist also nicht schwer!

Auf Druckertreiber achten

7-PDF Printer kann neben einer klassischen Installation als Desktopanwendung bzw. einer lokalen PDF Druckerinstallation (Standard) auch als zentraler PDF Netzwerkdrucker installiert werden. Der Installationsparameter ist hierfür /SHARE.

Nach einer Installation als PDF Netzwerkdrucker, könnte es für das Extrahieren von Druckdaten wie hier gezeigt nötig sein, den nach der Installation ausgewählten Druckertreiber auf 7-PDF Printer, wie im nachfolgenden Screenshot zu sehen ist, umzustellen. Zwecks höherer Kompatibilität wird ggf. ein Postscript Treiber des Betriebssystems genutzt. Im Falle des Extrahierens von Druckdaten benötigen wir aber direkten Zugriff darauf, und dies ist nur möglich wenn die PDF Netzwerkdrucker Instanz (im Screenshot "PDF-EXP-Prt") unter dem Druckertreiber "7-PDF Printer" betrieben wird. Man sollte also hier einen Blick drauf haben, das die Druckerinstanz auch den richtigen Druckertreiber verwendet.

Die Einstellung 'extracttext' setzt den Druckertreiber 7-PDF Printer voraus
Die Einstellung extracttext setzt den Druckertreiber 7-PDF Printer voraus.

Im unten aufgeführten Macro werden die Druckdaten mittels der Einstellung extracttext ausgelesen. Die betreffende Codezeile hier lautet:

Context("Config")("extracttext") = "yes"

Hinweis: Sie müssen ab Windows 10 vor einer Treiberumstellung die Druckerfreigabe temporär für die Zeit der Treiberumstellung deaktivieren, sonst erhalten sie eine Betriebssystem Fehlermeldung.

Kommen wir zum eigentlichen Code unseres Beispiels den wir wie oben beschrieben im Verzeichnis Macros in der VBS Datei pdfmailer.vbs abgespeichert haben.

	
    Rem -- global vars
    Dim parsed_email
		
    Rem -- This script will illustrate how to extract and process the text
    Rem -- of the printed output.
     
    Sub OnConfigLoaded()
		Rem -- MsgBox "OnConfigLoaded"
		
        Rem -- Modify the configuration to extract text from the printer
        Rem -- output.
        Context("Config")("extracttext") = "yes"
    End Sub
	 
    Sub OnPreprocessText()
		
		Rem -- MsgBox "ProcessText"
		
		Const ForReading = 1
		Dim fn, f, fso
		Dim l, a, c, z
		
        Rem -- Get the name of the text file from the context object
        fn = Context("TextFileName")
		
		parsed_email = "-"
	
        Rem -- Parse Text from PDF line by line and find the E-Mail: part!
        Set fso = CreateObject("Scripting.FilesystemObject")
        Set f = fso.OpenTextFile(fn, ForReading)
        While Not f.AtEndOfStream
			 Rem -- Read line-by-line from the text inside the pdf
            l = trim(f.ReadLine())

			Rem -- We're looking for the E-Mail:  ... line here.
			a = Mid(l,1,7)
			If a = "E-Mail:" Then
				c = Split(l)
				for each z in c
					If z <> "E-Mail:" Then
						Rem -- Split line by space!
						Rem -- Fill "parsed_email" with email.
						parsed_email = z
					End If		
				Next	
			End If
        Wend
        f.Close
		
		Rem -- Clean up
        Set fso = Nothing
		
    End Sub

	Sub OnMacrosApplied
		Rem -- MsgBox parsed_email

        Rem -- Make sure the configuration isn't reloaded because of an option set selection.
        Context("Config")("rememberlastoptionset") = "no"  

		Rem -- Don't like to open/show the generated pdf here after mail sending...
		Context("Config")("showpdf") = "no"
		
	End Sub
	
	Sub OnAfterPrint()
		
		Rem -- After the pdf is successfull generated, we send them via SMTP to
		Rem -- the recipient that we have parsed before...
		
		Rem -- Send mail.
                Context("Config")("email") = "yes"
		Context("Config")("emailclienttype") = "smtp"
				
		Rem -- send email to the mail address inside the pdf text!
		Context("Config")("emailfrom") = "FROM@YOURSERVER.COM"
		Context("Config")("emailto") = parsed_email
		Context("Config")("emailsubject") = "Your Invoice!"
		
		Rem -- we would like html as body text to format it.
		Context("Config")("emailbodytype") = "html"
		Context("Config")("emailbody") = "Attached you will find your invoice as PDF!<br><b>Regards from XYZ Company!</b>"
		
		Rem -- Send per SMTP Server
		Context("Config")("emailserver") = "SMTP.YOURSERVER.COM"
		
		Rem -- We use port 465 for SSL
		Context("Config")("emailport") = "465" 
		
		Rem -- Login Data for your SMTP Server
		Context("Config")("emailusessl") = "yes"
		Context("Config")("emailuser") = "YOUR_SMTP_USERNAME"
		Context("Config")("emailpassword") = "YOUR_SMTP_PASSWORD"
		
		MsgBox "The invoice should have been sent by mail, now!"
	
	End Sub

Beispiel Dateidownload

Sie können den Beispielcode (pdfmailer.vbs.zip) aber auch die Beispielrechnung (Rechnungsbeispiel.doc.zip) hier kostenlos herunterladen.

Top