This entry was posted on Sonntag, Dezember 13th, 2009 at 13:27 and is filed under Allgemein. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.


Mail automatisieren mit Applescript
Mit Applescript bietet Mac OS seit geraumer Zeit starke Werkzeuge, um Programme und Abläufe zu automatisieren. Das Problem: Kaum jemand beherrscht die Programmierung dieser Scriptsprache. Ich stand vor dem Problem, aus einer bestimmten eingehenden Mail den Excel (.xls)-Anhang herauszulösen und in einen Ordner als .csv (Windows kommagetrennt) zu speichern. Daraufhin sollte noch ein .php Script mit dem Safari gestartet werden, das die neuen Daten verarbeitet und einliest…
Es bedarf folgender Schritte:
- Regel in Mail, die das Script bei eingehender Mail startet
- Ein Applescript mit folgenden Abschnitten:
- Löschen der im (evetuell) vorherigen Ablauf erzeugten .csv Datei, um in Excel wegen der bereits vorhandenen Datei nicht in einen Fehler zu laufen
- Lösen der .xls Datei unter einem festgelegten Dateinamen in einen dafür vorgesehenen Dateiordner
- Starten von Excel, öffnen der .xls Arbeitsmappe, speichern als Windows kommagetrennte .csv
- Beenden von Excel ohne Speicherung der Arbeitsmappe
- Löschen der nicht mehr benötigten .xls Datei
- Starten des .php Scriptes
Am schwierigsten gestaltete sich die Speicherung des Excel-Arbeitsblattes als .csv. Microsoft bietet ein großes Supportdokument für all die mächtigen Applescript-Actions, die in Excel implementiert sind. Die darin enthaltenen Beispiele sind jedoch für ein Halbblut-Scriptkiddie wie mich nur schwer verständlich und es bedurfte so einiger Zeit, bis es endlich lief. Für den Fall, dass Du vor dem selben oder einem ähnlichen Problem stehst: Das kommentierte Script findest Du unten angehängt. Have Fun!
Das Erstellen der Regel in Mail.app, die das Applescript startet, ist ganz einfach: In Mail auf Einstellungen, dann auf Regeln gehen. Die Bedingung wie z.B. eine bei allen zu verarbeitenden Mails identische Betreffzeile eintragen, dann bei “Folgende Aktionen ausführen” Applescript ausführen wählen und dort den Pfad eintragen. In meinem Beispiel wäre das folgender Pfad:
/library/Webserver/Documents/test/detach.txt
Wenn Du das Script im Unterverzeichnis “test” Deines lokalen Homeverzeichnis speichern willst, kommt folgendes hinein:
~/backlinkparser/detach.txt
Und nun das eigentlich interessante, das Applescript, welches mit textedit.app in eine .txt Datei gespeichert wird. Wichtig ist, dass es eine reine Textdatei ist, also im Menü Format der Punkt “in reinen Text umwandeln” ausgewählt ist.
-- So muss ein Script anfangen, das mit einer Mail-Regel gestartet wird. Auch das Ende ganz unten ist erforderlich, um den auszuführenden Bereich zu kennzeichnen.
using terms from application "Mail"
on perform mail action with messages theMessages for rule theRule
-- vorherige tabelle.csv loeschen
tell application "Finder"
activate
-- Nachfolgend muss der richtige Pfad zur Datei eingetragen werden. Die besondere Mac OS - Konvention ist für Windows User erst einmal ungewohnt
set fileName to "Powerbook HD:Library:Webserver:Documents:test:tabelle.csv"
if file fileName exists then
delete file fileName
end if
end tell
--Anhang als tabelle.xls herausloesen
set theOutputFolder to "Powerbook HD:Library:Webserver:Documents:test:"
tell application "Mail"
set theMessage to item 1 of theMessages
set theAttachments to every attachment of content of theMessage
repeat with a from 1 to length of theAttachments
set theAttachment to item a of theAttachments
try
set theAttachmentName to "tabelle.xls"
set theSavePath to theOutputFolder & theAttachmentName
save theAttachment in theSavePath
end try
end repeat
end tell
-- tabelle.xls mit Excel nach tabelle.csv konvertieren
tell application "Microsoft Excel"
activate
open "Powerbook HD:Library:Webserver:Documents:test:tabelle.xls" as text
save in "Powerbook HD:Library:Webserver:Documents:tabelle:tabelle.csv" as CSV Windows file format with overwrite
close active workbook without saving
tell application "Microsoft Excel" to quit
end tell
-- nicht mehr benötigte tabelle.xls loeschen
tell application "Finder"
activate
set fileName to "Powerbook HD:Library:Webserver:Documents:test:tabelle.xls"
if file fileName exists then
delete file fileName
end if
end tell
-- Script starten
open location "http://127.0.0.1/test/script.php"
-- Das markiert das Ende der Action
end perform mail action with messages
end using terms from
Leave a Reply
