Automatischer E-Mail Versand beim Ausdruck

Dieses Beispiel basiert auf einer Konfiguration von Herrn Tomaschko von der Firma ces aus Passau (https://www.ces-passau.de/).

Es ging darum Druckjobs als E-Mail zu versenden oder alternativ auszudrucken, gesteuert durch Ausgaben im Dokument.

Als E-Mail Programm wird das Tool SwithMail verwendet. Es ermöglicht Zugangsdaten in einer Konfigurationsdatei zu speichern und diese per GUI zu editieren.

Folgende Schritte sind nötig um das Beispiel zu testen

  • Installieren Sie PrintMulti wie im Handbuch beschrieben und einen PrintMulti-Drucker mit Namen „PrintMulti EMail“
  • Laden Sie folgendes Archiv ExampleMail.zip runter, kopieren es ins „PrintMulti\Examples“ Programmverzeichnis und entpacken es. Die Dateien sollten dann in einem Unterverzeichnis „PrintMulti\Examples\ExampleMail“ landen. Das Tool „SwithMail“ in der aktuellen Version befindet sich in einem weiteren Unterverzeichnis.
  • In dem „ExampleMail“ Ordner finden Sie eine Datei „UseExampleMailConfiguration.reg“. Führen Sie diese aus. Sie steuert, dass Ausdrucke auf den Drucker „PrintMulti EMail“ die Konfigurationsdatei „ExampleMail.ini“ in dem Verzeichnis nutzen.
  • Für physikalischen Ausdruck wird der Drucker „TestPrinter“ verwendet. Den müssen Sie ggf. anpassen.
  • Starten Sie das Programm „SwithMail“; wählen „Configure Settings with GUI“ und öffnen die „SwithMailSettings.xml“ im „ExampleMail“ Ordner.
    Sie müssen auf jeden Fall Mailserver, Username und Passwort anpassen. Von dort können Sie auch gleich die Konfiguration testen.
  • Öffnen Sie die „DummyAddresses.xlsx“ und konfigurieren die EMail Spalte in allen Reihen an denen „SendMail=1“ definiert ist mit einer gültige Zieladdresse ein. Hier steht aktuell „mail@pleasefill.de“. Bei einer ungültigen Addresse sollte in der SwithMail Logdatei dann ein entsprechender Eintrag zu finden sein (z.B. bei gotthard.dobmeier@ultramail.none).
    Alle Daten sind generisch erzeugte Zufallsdaten.
  • Jetzt öffnen Sie die „TestMail.docx“ und stimmen der Verknüpfung mit dem Excel Dokument zu oder verbinden es ggf.
  • Der Serienbrief Ausdruck würde leider einen einzelnen Druckjob mit allen Dokumenten erzeugen. Im Beispiel SPLViewer: Serienbrief beim Drucken in einzelne Druckjobs aufteilen steht beschrieben, wie Sie das umgehen können.
    Hier ganz kurz: „PrintMulti EMail“ Drucker anhalten; Serienbrief auf „PrintMulti EMail“ drucken; SPLViewer ggf. runterladen und als Administrator starten; Beim Drucken eine Druckjobaufteilung von 1 wählen (unten links) und erneut auf dem „PrintMulti EMail“ ausgeben. Den Originaljob mit den 7 Seiten löschen und den Drucker fortsetzen.
    Vorher sollte man in Word vielleicht ein einzelnes Dokument zum Testen drucken.

Hier noch ein paar Eindrücke und Erläuterungen

Unten ein Ausschnitt aus der Excel Datei „DummyAddresses.xlsx“

DummyAddresses.xlsx

Die roten Felden sollten korrekte E-Mail Addressen enthalten. Die 4 Zeile enthält absichtlich eine falsche E-Mail um die SwithMail Logdatei zu untersuchen.

Der vierte Datensatz im verbundenen Seriendruckdokument TestMail.docx würde dann so aussehen:

Die blauen Textstellen sind mit der Formatvorlage „Hidden“ formatiert. Wenn Sie die Farbe dort auf „weiß“ setzen und den Font verkleinern, sind die Stellen nicht mehr sichtbar. Das wurde im Dokument „TestMailHidden.docx“ so gemacht.

Dann sieht die Druckvorschau z.B. so aus:


Die Hauptteile der Konfigurationsdatei


[SendMail]

Active=1
Execute=yes
; if not executed as user, log files are owned by system account
ExecuteAsUser=yes
ExecuteTimeout=INF

; dependent on the language a body text file is chosen using SwithMail parameter replacement options
ExecuteCmd=@“%PM_INSTALLPATH%\Examples\ExampleMail\SwithMail\SwithMail.exe“ /s /x @“%PM_INSTALLPATH%\Examples\ExampleMail\SwithMailSettings.xml“ /p1 @“%@FirstName%“ /to %@Receiver% /bodytxt @“%PM_INSTALLPATH%\Examples\ExampleMail\Body_%@Lang%.txt“ /subject @“%@Subject%“ /attachment @“%@PDFFile%“ /Log @“%@MailLogFile%“

[CreatePDFAndMail]
Printer=Microsoft Print To PDF

; Extract data from the document
!@Receiver=$(1;rawpage;“<2>(.*)<2>“;1;regex)
!@Id=$(1;rawpage;“<3>(.*)<3>“;1;regex)
!@Lang=$(1;rawpage;“<4>(.*)<4>“;1;regex)
!@FirstName=$(1;rawpage;“<5>(.*)<5>“;1;regex)
!@Subject=$(1;rawpage;“<6>(.*)<6>“;1;regex)
!@attachmentname=$(1;rawpage;“<7>(.*)<7>“;1;regex)
!@PDFFile=%allusersProfile%\PrintMulti\#(%Y_%m_%d)T\%@attachmentname%_%@id%.pdf
!@MailLogFile=%allusersProfile%\PrintMulti\#(%Y_%m_%d)T\LogMail.txt

Save2File=%@PDFFile%
ExecuteSectionMail=SendMail;%@SendMail%

[PrintDocument]
Printer=TestPrinter

; Virtual Printer – need PrintMulti as Print Processor
[PrintMulti EMail]
Active=1

!@SendMail=$(1;rawpage;“<1>(.*)<1>“;1;regex;1;==)
!@Print=$(%@SendMail%;1;!=)

; action is not called if calucalted to false
ActionCreatePDF=Print;CreatePDFAndMail;%@SendMail%
ActionPostversand=Print;PrintDocument;%@Print%


  • Variable, die mit „!“ beginnen werden als Umgebungsvariable gesetzt und behalten Ihre Gültigkeit in allen Unterabschnitten. Der Zugriff erfolgt, wie bei allen Umgebungsvariablen durch Einschließen in „%“ Ausdrücke. Das „@“ ist Teil des Names.
    Bei Verwendung von @“…“ bleiben die Anführungszeichen erhalten und Escape Sequenzen werden nicht ersetzt (Siehe Kapitel 6.1 im Handbuch).
  • Der reguläre Ausdruck z.B. bei „@SendMail“ gibt den Text zwischen „<1>.. <1>“ zurück und vergleicht diesen mit „1“. Das Ergebnis ist ein boolscher Wert der als „1“ oder „0“ gespeichert wird. „@Print“ wird dann also NOT „@SendMail“ und nur eine der beiden Aktionen wird ausgeführt.
  • In der Aktion „CreatePDFAndMail“ wird auf der Job auf den Microsoft PDF Printer ausgegeben und in @PDFFile gespeichert. Der Name der PDF Datei setzt sich aus einem festen Pfad, einem Datumsverzeichnis und Teilen aus dem Dokument zusammen. Nach dem Speichern der PDF wird noch der Abschnitt „SendMail“ ausgeführt. Alle Umgebungsvariablen behalten ihren Wert.
  • In dem Abschnitt wird dann SwithMail aufgerufen mit einer langen Kommandozeile. Interessant sind hier:
    – Übergabe eines Parameters (/p1) den SwithMail dann im BodyText ersetzt.
    – Der Bodytext wird anhand der Sprache gewählt
    – Der Name der Logdatei wird hier übergeben. Das hat in der SwithMail Konfiguration nicht geklappt – warum auch immer.
Die SwithMail Logdatei enthält dann z.B.
10.04.2022 12:00:42 - Success - SendTo: "xxx" - CC: "" - BCC: "" - Subject: "Newsletter 1/2022 " - Attachments: "Information_2022_04_2.pdf"
10.04.2022 12:00:45 - Failure - SendTo: "gotthard.dobmeier@ultramail.none" - CC: "" - BCC: "" - Subject: "Newsletter 1/2022 " - Attachments: "Information_2022_04_4.pdf" - Postfach nicht verfügbar. Die Serverantwort war: Requested action not taken: mailbox unavailable
10.04.2022 12:00:49 - Success - SendTo: "xxx" - CC: "" - BCC: "" - Subject: "Newsletter 1/2022 " - Attachments: "Information_2022_04_7.pdf"

Als nächsten kann mehr jetzt den Seriendruckbrief auf den „PrintMulti EMail“ drucken. Halten Sie dafür den Drucker an und drucken alle Dokumente aus. Anschließend öffnen Sie den SPLViewer als Administrator. Sie sollten dann einen Druckjob mit 7 Seiten sehen. Die 4. von 7 Seiten sieht z.B. so aus, falls der Text nicht „hidden“ ist.

Anschließend drucken Sie das Dokument vom SPLViewer erneut auf den „PrintMulti EMail“ aus und wählen dafür einen neuen Job nach jeder Seite (das funktioniert scheinbar nicht in der Jobansicht; Sie müssen das Dokument öffnen)

Den Orginaljob mit 7 Seiten können Sie jetzt löschen und den „PrintMulti EMail“ Drucker fortsetzen.

Das Ergebnis beim Mailempfänger könnte dann so aussehen:

Bei mir ist der „Testdrucker“ ein lokaler Dateidrucker bei dem die Jobs erhalten bleiben (ebenso wie beim „PrintMulti EMail“).

Das sieht dann im SPLViewer z.B. so aus. Man sieht gut die gedruckten Dokumente. Die restlichen wurden per E-Mail verschickt.

Dieses Beispiel verwendet das leistungsfähige Tool: SwithMail