Dienst: Aufgabe aus Mail heraus erstellen

Zuerst einmal eine kleine Planänderung. Anders als hier angesprochen habe ich die Idee mit dem zusätzlichen Postfach sehr schnell wieder verworfen. Das ganze war letztendlich sehr Fehleranfällig und auch zu schwerfällig. Viel besser gefiel mir die Idee mit dem Dienst bzw. AppleScript.

Die Aufgabenstellung

Nochmal zur ursprünglichen Aufgabe: Mit OSX Lion ist leider die Möglichkeit weggefallen, aus Mails heraus eine Erinnerung zu erstellen. Beide betroffene Programme sind jedoch Scriptfähig und man kann sowohl eine Mail per AppleScript auslesen als auch eine Erinnerung in iCal per AppleScript anlegen. Die eigentliche Schwierigkeit war für mich wann, wo und wie starte ich das Script. Idealerweise per Rechtsklick auf eine Mail und dann über das Kontextmenü das Script starten. Dazu fehlt mir allerdings im Moment noch das Wissen. Also bleiben nur noch die Möglichkeiten das ganze per Dienst an Mail anzuhängen oder über das einblendbare Scriptmenü in der Menüleiste des Finders.

Das Script

In beiden verbleibenden Möglichkeiten muss ein AppleScript erstellt werden, wobei im Automator lediglich 2 weitere Zeilen hinzukommen. (on run & end run). Das Script an sich ist recht einfach gehalten. Zuerst werden die momentan selektierten Mails abgefragt und dann die Auswahl auf das erste Element der Selektion beschränkt. Dann werden die notwendigen Daten der Mail wie Betreff, Inhalt und die MessageID in Variablen verpackt. Aus der MessageID wird am Ende des 1. Scriptteils noch eine MailURL gebaut damit man in iCal auch einen Link hat um auf die Mail springen zu können.

Im 2. Teil des Scriptes wird dann die eigentliche Aufgabe angelegt. Aus dem Betreff der Mail machen wir kurzerhand den Titel der Erinnerung und aus dem Inhalt der Mail die Beschreibung. Die MessageID benutzen wir um uns einen Link in iCal zu legen.

Ab und an kommt im Moment noch eine Fehlermeldung das ein Object nicht erzeugt werden kann. Das liegt an der fehlenden Fehlerbehandlung. Passiert bei mir wenn Mail zwischenzeitlich den Focus verloren hat und ich dann eine Mail nicht mehr explizit anklicke da sie ja eigentlich schon markiert ist. Also wenn das passiert einfach die Mail nochmal anklicken und den Dienst nochmal ausführen.

AppleScript im Automator

on run {input, parameters}
	tell application "Mail"
		set theSelection to selection
		set theMessage to item 1 of theSelection
		set theSubject to subject of theMessage
		set theContent to content of theMessage
		set theMessageId to message id of theMessage
		set theUrl to "message://" & "%3c" & theMessageId & "%3e"
		tell application "iCal"
			set newTodo to (make new todo at end of todos of calendar "Privat")
			tell newTodo
				set summary to theSubject
				set description to theContent
				set priority to medium priority
				set url to theUrl
			end tell
		end tell
	end tell
end run

Änderung am 27.08.2011

Sollte iCal beim Aufruf des Dienstes mal nicht gestartet sein, so kommt es zu einer Fehlermeldung im Automator. Abhilfe schafft eine zusätzliche Zeile vor dem ersten Aufruf von tell application "iCal".

tell application "iCal" to activate
tell application "iCal"
			set newTodo to ...

Verbesserungen

Im Moment ist der Kalender in dem die Erinnerung eingetragen wird noch hardgecoded. Ebenso die Priorität der erstellten Erinnerung. Hier wäre ein Dialog wünschenswert mit dem solche Einstellungen änderbar sind. Leider gibt es in AppleScript keine Möglichkeit Dialoge anzubieten die mehr als nur 3 Buttons besitzen. Auch sind DropDown-Listen nicht erlaubt. Somit gestaltet sich dieser Wunsch als recht schwierig und man müsste hierzu auf das Cocoa Framework unter ObjetiveC zurückgreifen. Overkill? Kanonen und Spatzen? Wer weiß .... :-)

Da die Subjects der Mails mitunter auch sehr lang werden können, sollte auch die Zusammenfassung der Erinnerung änderbar sein

Fehlerbehandlung einbauen:

  • Prüfen ob auch wirklich eine Mail ausgewählt wurde.
  • Prüfen ob angegebener Kalender existiert