PDF-Anhänge automatisiert aus eingehender Mail extrahieren - Teil 1
Im Netz kursieren verschiedene Versionen eines Applescripts, die automatisiert PDF-Anhänge aus eingehenden Mails extrahieren sollen. Leider funktionieren diese nur so la-la und versagen oft.
Diesen Scripts ist vieles gemeinsam und sie versagen typischerweise an der entscheidenden Stelle mit wechselnden Fehlern:
save oneAttachment in file (destFolder & theName) -- (oder ähnlich)
Es hat den Anschein, als ob die Kombination Applescript & Mail mit komplexer aufgebauten MIME-Messages nicht richtig umgehen kann.
Um den Fehler zu beseitigen, habe ich mir eine etwas andere Methode einfallen lassen:
- In einem ersten Schritt extrahiert ein Applescript die komplette Mail inkl. Anhänge als Datei
- Im zweiten Schritt nutze ich ein selbstgeschriebenes Programm zur Extraktion der PDF-Anhänge. Dieses Programm beschreibe ich im Teil 2:
Einige Voraussetzungen - kann man natürlich im Script anpassen:
- Man legt einen Ordner unterhalb von Dokumente an, voreingestellt ist mailDrop
- Man legt in Mail einen Mail-Ordner unterhalb von INBOX an, voreingestellt ist dropArchive
Möglicherweise verwenden andere Mail-Server eine etwas andere Syntax und Ordnerstruktur, dann muss das Script entsprechend angepasst werden
Das Applescript bindet man wie gewohnt und hier beschrieben in die Mail-Regeln ein:
Bis hierher wird das Script nur eingegangene Mail entsprechend der Regeln als .eml-Datei in den mailDrop-Ordner kopieren und die bearbeitete Mail in den Mail-Unterordner verschieben.
Für die Extraktion der PDF-Anhänge benötigt man zusätzlich das externe Programm, das ich hier im Teil 2 beschrieben habe:
Übrigens:
Solange der Ordner oder symlink
~/GetPdfFromEml und das zugehörige Programm nicht existiert, passiert im Script beim Aufruf von
try
do shell script appName
end try
ganz genau: garnix.
Zur besseren Übersicht folgt das komplette Applescript im ersten Kommentar.
Damit das Skript kompakt und leicht verständlich bleibt, habe ich hier das ganze Logging und die Fehlerbehandlung herausgestrichen.