PDFPrintButler

Wäre es nicht schön auch vom Firmenlaptop (ohne Admin-Rechte) aus zu Hause zu drucken?
Wäre es nicht klasse von unterwegs ein wichtiges Dokument schonmal zu Hause auszudrucken?

Kein Problem: CUPS und ein wenige Bash-Scripting machen es per Mail möglich:

Achtung

Es existiert eine aktualisierte Version!

Achtung

  1. #!/bin/bash
  2. #########################################################################
  3. #  PDFPrintButler                                                       #
  4. #  PDFPrintButler takes a given mail and extracts its attachments.      #
  5. #  If such an attachment is pritable it                                 #
  6. #  is passed to lp for printing.                                        #
  7. #                                                                       #
  8. #########################################################################
  9. #  Copyright (C) 2010 by Sebastian Just                                 #
  10. #  zeeman@zeeman.de                                                     #
  11. #                                                                       #
  12. #  This program is free software; you can redistribute it and/or modify #
  13. #  it under the terms of the GNU General Public License as published by #
  14. #  the Free Software Foundation; either version 2 of the License, or    #
  15. #  (at your option) any later version.                                  #
  16. #                                                                       #
  17. #########################################################################
  18. mailMessage=`mktemp`
  19. cat /dev/stdin > $mailMessage
  20. subject=`cat $mailMessage |grep -m 1 '^Subject:' | awk '{ for(i=2; i< =NF; i++) {printf("%s ", $i)}}'`
  21. from=`cat $mailMessage | grep -m 1 '^From:' | awk '{ for(i=2; i<=NF; i++) {printf("%s ", $i)}}'`
  22. echo "PDFPrintButler v1.0 started on $subject from $from:"
  23. for mimePart in `reformime -s < $mailMessage | grep 1\..`; do
  24.   mimeHeader=`reformime -s $mimePart -i < $mailMessage`
  25.   mimeType=`echo "$mimeHeader" | grep content-type | awk '{print $2}'`
  26.   mimeName=`echo "$mimeHeader" | grep content-disposition-filename | awk '{ for(i=2; i<=NF; i++) {printf("%s ", $i)}}'`
  27.   # List taken from http://www.cups.org/articles.php?L205+TFAQ+Q
  28.   case $mimeType in
  29.         "application/pdf"|\
  30.         "application/postscript"|\
  31.         "image/bmp"|\
  32.         "image/gif"|\
  33.         "image/jpeg"|\
  34.         "image/png"|\
  35.         "image/x-portable-anymap"|\
  36.         "image/x-portable-bitmap"|\
  37.         "image/x-portable-graymap"|\
  38.         "image/x-portable-pixmap"|\
  39.         "image/tiff")
  40.                 tempFile=`mktemp`
  41.                 reformime -e -s $mimePart  $tempFile
  42.                 echo "  $mimePart: Printing $mimeName as $mimeType."
  43.                 lp -t "$mimeName" $tempFile > /dev/null
  44.                 rm $tempFile
  45.         ;;
  46.         *) echo "       $mimePart: *Skipping* this part because $mimeType isn't supported!";;
  47.   esac
  48.  
  49. done
  50. echo "Finished."

Das ganze muss dann nur noch in eine passende .procmailrc eines Users eingebaut werden:
:0 f
| /home/pdfprintbutler/pdfprintbutler.bsh > /var/log/pdfprintbutler 2>&1

Das Anlegen eines Benutzers und das Verbinden des ganzen mit Fetchmail überlasse ich mal dem geneigten User (helfe aber auch gerne dabei bei spezifischen Nachfragen).

Im Groben muss man nur dafür sorgen, dass eine Mail an eine (möglichst nicht öffentlich bekannte) Adresse von Fetchmail abgeholt wird/von Postfix einem User zugestellt wird.
Während der Zustellung wird mittels Procmail die Mail an das PDFPrintButler-Script übergeben.
Dieses extrahiert die Attachments und druckt sie auf dem Standard-Drucker, welcher in CUPS hinterlegt ist.

Ein paar Hintergrundinfos sind ggf. noch wichtig:
Es werden (wie man wohl direkt im Code sieht) neben PDF auch einige Bild-Formate unterstützt.
Diese müssen direkt in der Email als Attachment angehängt werden (als nicht packen oder sowas!). Was im Email-Body und im Subject der Mail steht ist uninteressant (und wird nur fürs Logging verwendet). CUPS kann PDFs für jeden Drucker umrechnen, auch wenn der Drucker nativ kein PDF unterstützt (so wie es bei den meisten SOHO-Druckern der Fall ist).

Auch sollte man verschachtelte Mails vermeiden. (Mail mit Attachment als Attachment in einer Mail). Ich weiß nicht was passiert, ggf. funktioniert es ja 😉

Das Programm reformime ist bei Debian im Paket maildrop enthalten.
Wenn man dies installiert sollte man einen Mailer installiert haben. Andernfalls installiert apt-get Exim (Debian-Standard). Wer lieber Postfix haben möchte installiert selbiges bitte vorher!

Optimiert wird das Script ggf. noch dahin, dass das, was zur Zeit in die Logdatei geschrieben wird wieder an den Absender zurück geschickt wird. Aber dazu muss ich erst noch an der Mail-Infrastruktur hier im Netz arbeiten.

Schreibe einen Kommentar