Email aus Druckdaten ermitteln und automatisch mailen / PDF Drucker
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 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!
PDF Mailer Plugin von 7-PDF
Sie haben keine VBScript Kenntnisse und benötigen bei der Umsetzung eine Standardlösung die sie einfach in ihr Reporting aus WaWi, ERP oder CRM integrieren können? Durch die Einbindung des 7-PDF Mailer Plug-Ins in Ihren 7-PDF Printer erweitern Sie dessen Funktionalität erheblich. Dies ermöglicht die Integration externer Befehle (Steuercodes) zur präzisen Steuerung Ihrer Druckvorgänge. Nachdem das Plug-In erfolgreich mit einer Instanz Ihres 7-PDF Printers verbunden wurde, haben Sie die Möglichkeit, diese Steuercodes in Ihren Druckaufträgen zu nutzen. Diese Codes können direkt in den Drucktext oder in Druckformulare eingefügt werden, die aus Systemen wie ERP, CRM oder WaWi stammen. Mit nur wenigen einfachen Steuercodes können Sie beispielsweise Druckaufträge direkt per E-Mail versenden und dabei individuelle E-Mail-Nachrichten sowie weitere Anpassungen vornehmen. Eine ausführliche Übersicht aller verfügbaren Steuercodes, einschließlich @@to
, finden Sie in der nachfolgenden Dokumentation.
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.
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.
Downloads
Anhang | Größe |
---|---|
Codebeispiel herunterladen (pdfmailer.vbs.zip) | 1.90 KB |
Beispielrechnung herunterladen (Rechnungsbeispiel.doc.zip) | 20.10 KB |