Wie ich Outlook E-Mails aus Things öffne.
Things ist ein großartiger Taskmanager mit einer recht guten Integration in die MacOS Board Tools. Ich verwende aber Outlook für meine Arbeits-E-Mail.
Doch jedes Mal wenn eine E-Mail zu einer neuen Aufgabe führt, find ich den Workflow mit Copy&Paste und dem QuickEntry Panel nicht sonderlich Benutzerfreundlich. Außerdem gibt es keinen weg um auf die ursprüngliche E-Mail zurückzukommen. Aber dies wäre hilfreich. Manchmal sind die Einzelheiten der Aufgabe in der E-Mail zu finden, manchmal habe ich Referenzdokumente an die E-Mail angehängt oder ich muss einfach auf die E-Mail antworten, wenn ich mit der Aufgabe fertig bin.
Was ich möchte, ist die Möglichkeit, einen Link zu einer Outlook-Nachricht in Things zu verwenden.
In diesem Beitrag integrieren wir Outlook mit Todoist (oder eigentlich mit jedem anderen Tool), indem wir Links zurück zu Outlook-E-Mails erstellen.
Erstes Apple Skript: Markierte Outlook-Nachrichten als Task anlegen
[Mac Automation Scripting]{https://developer.apple.com/library/archive/documentation/LanguagesUtilities/Conceptual/MacAutomationScriptingGuide/index.html} ermöglicht die Interaktion mit Programmen zur Automatisierung von Aufgaben. AppleScript ist die Sprache, die Apple für diesen Zweck zur Verfügung stellt, aber es ist auch möglich JavaScript für die Automatisierung zu verwenden. Der eingebaute Skript-Editor bietet eine sehr einfache IDE für die Bearbeitung von Skripten. Es gibt eine eingebaute Dokumentation zu den verfügbaren Bibliotheken Versuchen wir zunächst, einige Informationen zu einer ausgewählten Nachricht in Outlook zu erhalten.
tell application "Microsoft Outlook"
set selectedMessage to first item of (get current messages)
set selectedMessageSubject to the subject of selectedMessage
display notification selectedMessageSubject
end tell
Das obige Skript zeigt den Betreff der ausgewählten Nachricht als Benachrichtigung an. Dieses Skript kannst du kopieren und im Skript-Editor ausprobieren Jetzt, da wir wissen, wie wir ausgewählte Nachrichten erhalten, müssen wir einen Link zu dieser Nachricht erstellen.
tell application "Microsoft Outlook"
set outlookMessage to first item of (get current messages)
set outlookMessageID to the id of outlookMessage
set outlookMessageSubject to the subject of outlookMessage
set outlookMessageBody to the plain text content of outlookMessage
set outlookMessageReceived to time received of outlookMessage
set outlookMessageSenderDat to the sender of outlookMessage
set outlookMessageSenderName to the name of outlookMessageSenderDat
set outlookMessageSenderAddress to the address of outlookMessageSenderDat
set taskMessage to outlookMessageSubject & outlookMessageSenderName & "<" & outlookMessageSenderAddress & "> hat am " & outlookMessageReceived & " eine Email mit dem Betreff \"" & outlookMessageSubject & "\" gesendet. outlook://" & outlookMessageID
set the clipboard to taskMessage
display notification taskMessage
end tell
Im oberen Script habe ich bereits einen Text und einen Link zur Message erzeugt. Um das Skript auszuprobieren, können wir es einfach wie gewohnt im Skript-Editor starten. Wenn eine Nachricht in Outlook ausgewählt ist wird ein Text und die URI in die Zwischenablage des Systems kopiert, von da aus können wir den Text im Things Quick Entry Panel einzufügen. Der Link zur Nachricht funktioniert so aber noch nicht.
Ein benutzerdefinierter Protokoll-Handler
Jetzt, wo wir in der Lage sind, Links zu Outlook-Nachrichten zu kopieren, brauchen wir eine Möglichkeit, diese Links zu handhaben, um zur Outlook-Nachricht zu springen. Dazu müssen wir einen benutzerdefinierten Protokoll-Handler erstellen. Dadurch wird unsere neu eingeführte Outlook:// URLs von MacOS erkannt.
Um einen benutzerdefinierten Protokoll-Handler mit AppleScript zu implementieren, implementieren wir einfach einen open location wie folgt.
on open location this_URL
set the messageId to text 11 thru -1 of this_URL
tell application "Microsoft Outlook"
activate
open message id messageId
end tell
end open location
scripteditor
Dann müssen wir aus dem Script ein ausführbares Programm erstellen und seine Info.plist bearbeiten, um unser neues URL-Schema zu definieren. Im Wesentlichen müssen wir die folgenden Schritte durchlaufen:
- Das Skript als app package aus dem Script-Editor exportieren (Ablage -> Exportieren -> Dateiformat Programm)
- Im Finder die exportierte Datei markieren und mit der rechten Maustaste klicken und Paketinhalt wählen.
- Im Ordner “Contents” öffnen wir die Datei Info.plist im Texteditor und fügen vor den letzten beiden Zeilen den folgenden Inhalt hinzu.
<key>CFBundleIdentifier</key>
<string>org.personal.outlook</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>Pass To OutlookUriHandler</string>
<key>CFBundleURLSchemes</key>
<array>
<string>outlook</string>
</array>
</dict>
</array>
- Die Datei speichern, im Programmverzeichnis ablegen und mit Doppelklick ausführen.
Jetzt sind wir im Grunde genommen fertig. Wir können es testen wenn wir einen Outlook-Nachrichten-Link kopieren und den Link von der Befehlszeile aus zu öffnen (open ). Wenn alles klappt sollte sich die E-Mail in Outlook öffnen.
Alles zusammenfügen
An diesem Punkt haben wir ein Skript, das Links zu Outlook in die Zwischenablage kopieren kann, sodass wir den Link in eine andere Anwendung einfügen können. Und wir können auch auf diesen Link klicken um die Email in Outlook zu öffnen. Wir sind also fast fertig, aber noch nicht ganz. Wir müssen in Outlook eine Nachricht auszuwählen, und dann unser Skript im Skript-Editor öffnen und es ausführen, um Links in die Zwischenablage zu kopieren. Dieser Prozess ist überhaupt nicht effizient, aber wenn wir einen Outlook Link in die Zwischenablage kopieren können, können wir den Link doch evt. auch direkt in ein Things Quick Entry Panel einfügen:
tell application "Microsoft Outlook"
set outlookMessage to first item of (get current messages)
set outlookMessageID to the id of outlookMessage
set outlookMessageSubject to the subject of outlookMessage
set outlookMessageBody to the plain text content of outlookMessage
set outlookMessageReceived to time received of outlookMessage
set outlookMessageSenderDat to the sender of outlookMessage
set outlookMessageSenderName to the name of outlookMessageSenderDat
set outlookMessageSenderAddress to the address of outlookMessageSenderDat
end tell
tell application "Things3"
set thingsSubject to "✉️ " & outlookMessageSenderName & " " & outlookMessageSubject
set thingsNote to outlookMessageSubject & "
✉️ " & outlookMessageSenderName & "<" & outlookMessageSenderAddress & "> hat am " & outlookMessageReceived & " eine Email mit dem Betreff \"" & outlookMessageSubject & "\" gesendet. outlook://" & outlookMessageID
show quick entry panel with properties {name:thingsSubject, notes:thingsNote}
end tell
Als Nächstes können wir die Automator-Anwendung verwenden, um einen Dienst mit unserem Skript zu definieren, und dann eine Shortcut zu unserem neuen Dienst definieren.
Automator
Jetzt haben wir eine funktionierende Integration von Outlook in Things, prinzipiell haben wir sogar die Möglichkeit von jeder Anwendung aus auf Outlook-Nachrichten zu verlinken und zu öffnen.
Ich habe das Skript auf GitHub hochgeladen.