Für online Retail-Shops stellt sich immer wieder die Frage wie man Rechnungen oder Lieferscheine bei einer Bestellung automatisiert ausdrucken kann.
In diesem Tutorial möchten wir anschliessend an die Mail to Print Funktion des Plugins CashCtrl Gateway for WooCommerce aufzeigen, wie dies mit einfachen Mitteln auch datenschutzkonform möglich ist.
Grundsätzlich muss man zwischen folgenden Optionen unterscheiden:
- Druckerhersteller eigene Funktionen (z.B. Google Cloud Print, HP ePrint oder Brother Email Print)
- Ein Drucker kann POP3 oder IMAP-Postfächer direkt abfragen
- Eigener Print Server der IMAP-Postfächer abfragt
In diesem Tutorial möchten wir auf letztere Option näher eingehen und PDF-Anhänge automatisch ausdrucken.
Voraussetzungen
Alle Optionen setzten einen netzwerkfähigen Drucker voraus. Dazu benötigen wir entweder ein Linux Server oder ganz einfach einen Raspberry PI. Die Hardwareanforderungen sind nebensächlich so lange nicht noch weitere Prozesse auf dem Server laufen. Es reicht also ein PI 3 oder 4 mit 1 oder 2GB Memory.
E-Mail Postfach erstellen
Erstellen Sie beim Hoster Ihrer Wahl ein E-Mail Postfach, auf welches Sie via IMAP zugreifen können.
Das Postfach sollte exklusiv für diesen Service und nicht für andere Zwecke genutzt werden.
Raspberry PI aufsetzen
Falls nicht schon vorhanden, sollten Sie in einem ersten Schritt einen Raspberry PI aufsetzten. Heise bietet dazu ein übersichtliches Tutorial an.
Installieren Sie die neuesten Updates.
sudo apt-get update -y && apt-get upgrade -y
Melden Sie sich mit dem pi-Benutzer per SSH bei Ihrem Raspberry PI an und erstellen Sie zunächst ein neues Projektverzeichnis im pi-Home-Verzeichnis. Achten Sie darauf das die nachfolgenden Schritte mit dem pi
-Benutzer und nicht als root
ausgeführt werden.
mkdir ~/FlowPro
cd ~/FlowPro
mkdir Mailprint
fetchmail, procmail & Co. installieren und konfigurieren
Installieren Sie fetchmail, procmail und uudeview um E-Mails vom vorher erstellten IMAP-Postfach abzuholen und die PDF-Anhänge zu extrahieren.
sudo apt-get install fetchmail procmail uudeview
Erstellen Sie im zuvor erstellten Projektverzeichnis eine Konfigurationsdatei für fetchmail.
cd ~/FlowPro/Mailprint
nano fetchmail.conf
Mit der nachfolgenden Konfiguration verwenden wir procmail als Mail Delivery Agent, um die eingehenden Mails weiter zu verarbeiten. sslcertck
kann optional aktiviert werden.
set no bouncemail
poll IMAP.IHRE-DOMAIN.CH
service 993
protocol imap
user "IHR-BENUTZERNAME"
password "IHR-PASSWORT"
ssl
#sslcertck
sslproto TLS23
no keep
mda "/usr/bin/procmail -m './procmail.conf'"
Da die Datei Benutzername und Passwort beinhaltet, ändern Sie die Dateiberechtigungen so, dass nur Sie diese öffnen und sehen können.
chmod 700 fetchmail.conf
Nun erstellen wir eine Konfigurationsdatei für procmail…
nano procmail.conf
…welche die Mails, die einen Anhang enthalten, im Ordner ./maildata
speichert.
MAIL_DIR=./maildata
VERBOSE=off
LOGFILE=./logs/printmail.log
:0
*^content-Type:
$MAIL_DIR/
CUPS installieren und konfigurieren
Die Apple open Source Software CUPS (Common Unix Printing System) ermöglicht es jedem Computer, als Druckserver zu fungieren. Folgen Sie dieser Anleitung um CUPS zu installieren.
Sobald die Installation abgeschlossen ist, können Sie die Druckerwarteschlange über https://[ip-adresse--raspberry-pi]:631
verwalten. Stellen sie sicher das der korrekte Drucker als Standarddrucker definiert ist.
fetchmail und CUPS verbinden
Um E-Mails mit fetchmail abzufragen und im Fall einer PDF-Datei (*.pdf)
auf dem CUPS-Standarddrucker auszudrucken, müssen wir ein Shell-Skript erstellen welches die korrekte Berechtigung zum Ausführung hat.
cd ~/FlowPro/Mailprint
touch ./printmail.sh
chmod +x ./printmail.sh
nano ./printmail.sh
Fügen Sie folgenden Code in das printmail.sh
Skript ein.
#!/bin/bash
# Parameters
BASEDIR=$(dirname $0)
CURDIR=$(pwd)
MAILDIR=./maildata
LOGFILE=./logs/printmail.log
ATTACH_DIR=./attachments
# change directory
echo "Switching directory to : $BASEDIR"
cd $BASEDIR
# create log file if it does not exist
touch $LOGFILE
date '+%Y-%m-%d %H:%M:%S' >> $LOGFILE
# fetch mail
echo "Checking for new mail..."
fetchmail -f ./fetchmail.conf -L $LOGFILE
# process new mails
shopt -s nullglob
for i in $MAILDIR/new/*
do
echo "Processing : $i" | tee -a $LOGFILE
uudeview $i -i -p $ATTACH_DIR/
# process file attachments with space
cd $ATTACH_DIR
for e in ./*
do
mv "$e" "${e// /_}"
done
for f in *.PDF
do
mv $f ${f%.*}.pdf
done
cd $BASEDIR
# end of patch
echo "Printing PDFs" | tee -a $LOGFILE
for x in $ATTACH_DIR/*.pdf
do
echo "Printing : $x" | tee -a $LOGFILE
lp -o fitplot=true -o page-bottom=-25 -o page-top=10 -o page-left=-15 -o page-right=-5 $x
echo "Deleting file : $x" | tee -a $LOGFILE
rm $x | tee -a $LOGFILE
done
echo "Clean up and remove any other attachments"
for y in $ATTACH_DIR/*
do
rm $y
done
# delete mail
echo "Deleting mail : $i" | tee -a $LOGFILE
rm $i | tee -a $LOGFILE
done
shopt -u nullglob
echo "Job finished." | tee -a $LOGFILE
cd $CURDIR
CUPS ist bekannt das die Ausrichtung für Ausdrucke von PDF-Dokumenten auf einem A4 Blatt nicht zu 100% korrekt stimmt.
Mit der Zeile lp -o fitplot=true -o page-bottom=-25 -o page-top=10 -o page-left=-15 -o page-right=-5 $x
aus dem Skript oben sollte dies so gut es geht, korrigiert sein. Sollten Sie die Ausrichtung weiter anpassen müssen, hilft folgender Thread weiter.
Testen und Ausführung planen
Um das gesamte Skript zu testen, führen Sie es einfach aus (Achtung: der komplette Pfad muss mitgegeben werden)
/home/pi/FlowPro/Mailprint/printmail.sh
Rechnungen und Lieferscheine sollten direkt nach Eingang der Bestellung ausgedruckt werden. Dazu empfiehlt es sich das Skript alle 5 Minuten laufen zu lassen (Achtung prüfen Sie allfällige Nutzungsbestimmungen Ihres Hosters). Meist reicht es auch wenn das Skript nur zu Bürozeiten ausgeführt wird (im Beispiel: Montag bis Freitag, 07:00 bis 18:59).
Im Crontab-Generator kann ein individueller Zeitplan zusammengestellt werden.
crontab -e -u pi
*/5 7-18 * * 1-5 /home/pi/FlowPro/Mailprint/printmail.sh
Durch die Weiterleitung einer Mail an die zuerst erstellte E-Mail-Adresse können nun Rechnungen und Lieferscheine welche durch das Plugin CashCtrl Gateway for WooCommerce erstellt wurden, automatisch ausgedruckt werden.
Jede E-Mail mit PDF-Anhang wird nun direkt ausgedruckt. Aus diesem Grund empfiehlt es sich diese E-Mails Adresse geheim zu halten und nicht für weitere Dienste zu nutzen. Einige Hoster bieten auch die Möglichkeit von individuellen Black-, White-Lists an, mit welchen grundsätzlich alle Absender gesperrt und nur erlaubte Absender freigegeben werden können.
Alternativen
Wer sich nicht mit Linux und Shell-Kommandos herumschlagen möchte oder einen bereits verfügbaren lokalen Windows PC oder Server nutzen kann, kann auch die kommerzielle Software Automatic Email Manager einsetzten. Mit der 30 tägigen Testversion kann die CashCtrtl Gateway Option kostenlos ausprobiert werden und CashCtrl Rechnungen oder Lieferscheine für Onlinebestellungen automatisch ausgedruckt werden.