PDF Dateien aus IMAP laden und drucken
Vorweg, ich spreche kein PERL. Das Script in diesem Artikel ist also sicherlich keine Vorlage um Perl zu lernen, aber es erfĂŒllt meinen Zweck.
Ich bekomme Rechnungen und andere PDF Dateien per Email die, weil leider noch nicht alle Menschen digitalisiert sind, auf Papier gedruckt werden mĂŒssen. Ich habe nicht immer einen Drucker vor Ort also habe ich bisher die betroffenen Emails in einen Order Print verschoben und zu Hause gedruckt. Ich wollte das immer schon irgendwie automatisieren.
Jede Windows-basierte Lösung dazu war absolut grauenhaft! Man muss nur mal versuchen âPDF aus der Kommandozeile druckenâ zu suchen. Alles was da vorgeschlagen wird ist nutzlos, ĂŒberteuert und erfordert proprietĂ€re Programme.
Jetzt habe ich selbst eine Lösung zu implementiert bei der ich die vollstĂ€ndige Kontrolle habe udn die ĂŒberraschen gut funktioniert.
Voraussetzungen
cron, perl, pdftops, lpr, cron (z.B. mit cygwin)
Einen Postscript Drucker
** PDF Anhang herrunterladen **
Dieses Perl Script habe ich aus unterschiedlichen ForenbeitrĂ€gen zusammengestĂŒckelt bis es funktioniert. Echte T&E Programmierung.
#!/usr/bin/perl # Download pdf attachements from unseen messages in # a specified IMAP folder. After processing the # messages are set to seen. use Net::IMAP::Client; use Email::MIME; use Email::MIME::Attachment::Stripper; my $imap = Net::IMAP::Client->new( server => '<IMAP SERVER>', user => '<USER>', pass => '<PASSWORD>', ssl => 0, # (use SSL? default no) #port => 993 # (but defaults are sane) # ssl_verify_peer => 1, # (use ca to verify server, default yes) # ssl_ca_file => '/etc/ssl/certs/certa.pm', # (CA file used for verify server) or # ssl_ca_path => '/etc/ssl/certs/', # (CA path used for SSL) ) or die "Could not connect to IMAP server"; $imap->login or die('Login failed: ' . $imap->last_error); $imap->select('Print'); my $messages = $imap->search('UNSEEN'); foreach $msg (@$messages) { my $data = $imap->get_rfc822_body($msg); my $parsed = Email::MIME->new($data); my $stripper; $stripper = Email::MIME::Attachment::Stripper->new($parsed); my @attachments = $stripper->attachments(); foreach my $a ( @attachments ) { next if $a->{'filename'} !~ /pdf/i; #only pdf attachments my $tempdir = "./print/"; my $tmpPath = $tempdir . $a->{'filename'}; my $f = new IO::File $tmpPath, "w" or die "Cannot create file " . $tmpPath; print $f $a->{'payload'}; } $imap->store($msg, '\\Seen'); } $imap->logout();
Die gedruckten Mails (Status seen im Print Ordner) werden ĂŒber mein imapfilter script archiviert. Ich verwende openvpn um auf meinen IMAP Server zuzugreifen. Einen Zugriff ĂŒber SSL habe ich nicht getestet.
** PDF drucken ** Das folgende Script druckt und entfernt die PDF Dateien
#!/usr/bin/bash shopt -s extglob PRINTER="<PRINTER NAME HERE>" FILES=print/*.pdf for pdf in $FILES; do pdftops $pdf ps="print/"$(basename "$pdf" .pdf)".ps" cat "$ps" | lpr -d "$PRINTER" rm $pdf rm $ps done
Automatisierung erfolgt ĂŒber cygwin cron.
by
by
von PDF Dateien aus IMAP laden und drucken














