Planen Sie eine wöchentliche Erinnerungs-E-Mail mit AppleScript

Wir haben vor kurzem zwei sehr wichtige Komponenten von AppleScript verwendet: Bedingungsanweisungen und Wiederholungsschleifen. Zusammengenommen ist die Leistung dieser beiden Werkzeuge unglaublich leistungsstark. Jetzt verwenden wir das Gelernte, um einen einfachen und praktischen Workflow zu erstellen, der automatisch eine Liste Ihrer unvollständigen Aufgaben aus der Reminders-App per E-Mail versendet.


Schritt 1. Erstellen Sie einen Algorithmus

Was wir brauchen, ist eine einfache, übersichtliche Liste von Schritten, die uns leiten sollen.

Bevor wir mit der Eingabe unseres Codes beginnen, ist es wichtig, dass wir herausfinden, was wir tun. Wir haben bereits eine gute Vorstellung von dem Endergebnis, das wir erreichen wollen, aber das Erreichen dieses Ziels blind zu erreichen, ist nicht der effektivste Weg, um es zu erreichen.

Stattdessen möchten wir einen grundlegenden Algorithmus ausarbeiten, der als Wegweiser für die Gestaltung unseres Codes dient. Was wir brauchen, ist eine einfache, übersichtliche Liste von Schritten, die uns leiten sollen.

Der knifflige Teil hier ist, dass wir unseren Algorithmus entwickeln müssen, während wir darüber nachdenken, was wir über die inneren Abläufe von AppleScript wissen. Unsere Schritte enthalten keinen Code, aber sie müssen codebewusst sein. Andernfalls würden wir mit so etwas enden:

  • Erinnerungen erhalten
  • Setzen Sie Erinnerungen in E-Mails
  • Nachricht senden

Das ist wohl zu sagen etwas nützlich, aber in Wahrheit könnten wir diesen Prozess mental verfolgen, ohne jemals einen bestimmten Algorithmus zu formulieren. Die Realität der Situation ist, dass dieser Prozess viel komplexer ist und ein tieferes Nachdenken darüber erforderlich ist, wie wir jedes Stück erreichen werden. Hier ist ein gründlicherer und nützlicherer Versuch eines Algorithmus:

  • Holen Sie sich alle Erinnerungen in einer bestimmten Liste
  • Richten Sie nur die Erinnerungen aus, die nicht abgeschlossen sind
  • Finden Sie heraus, ob die Mahnung ein Fälligkeitsdatum hat
  • Wenn die Erinnerung ein Fälligkeitsdatum hat, greifen Sie sowohl den Namen als auch das Fälligkeitsdatum an
  • Wenn die Erinnerung kein Fälligkeitsdatum hat, greifen Sie einfach den Namen
  • Konvertieren Sie alle relevanten Erinnerungsinformationen in Elemente der Applescript-Liste
  • Erstellen Sie eine neue E-Mail-Nachricht und legen Sie deren Eigenschaften fest
  • Geben Sie unsere Listenelemente in den Nachrichtentext aus
  • Legen Sie den Empfänger der Nachricht fest
  • Nachricht senden
  • Planen Sie die Nachricht täglich oder wöchentlich

Jetzt reden wir. Dies ist viel konkreter und beschreibt effektiv, wie unser Code strukturiert wird. Unser erster Versuch war täuschend einfach und schien aus drei oder vier Codezeilen zu bestehen. Unser zweiter Versuch zeigt einen viel realistischeren Blick darauf, wie viel Arbeit in dieses Skript eingehen wird.


Schritt 2. Zielerinnerung App

Unsere erste Codierungsaufgabe besteht darin, AppleScript mit der neuen Reminders-App in Mountain Lion zu kommunizieren. Wir machen das natürlich mit einem Tell-Block, als ob wir mit einer anderen App kommunizieren würden.

[apfelschrift]
Anwendung "Erinnerungen" mitteilen
ende sagen
[/ applescript]

Unser Tell-Block enthält alle Befehle, die wir in der Reminders-App werfen möchten. Es wird angenommen, dass jeder Code, der sich zwischen diesen beiden Zeilen befindet, auf diese bestimmte App gerichtet ist.


Schritt 3. Starten Sie eine Wiederholungsschleife

Das ToDo-Element an der Spitze unseres Algorithmus besteht darin, alle Erinnerungen in einer angegebenen Liste abzurufen. Wir wollen eigentlich nicht alle auf einmal. Stattdessen möchten wir uns eins nach dem anderen schnappen, testen, ob es unseren Kriterien entspricht, und entsprechend vorgehen.

Um diesen zyklischen Effekt zu erzielen, können wir eine Wiederholungsschleife verwenden, über die wir in einem vorherigen Artikel alles gelernt haben. Dieser Umstand erfordert a wiederhole mit Schleife:

[apfelschrift]
Anwendung "Erinnerungen" mitteilen
wiederhole mit i von 1 bis (zählt von jeder Erinnerung der Liste "Erinnerungen")
ende wiederholen
ende sagen
[/ applescript]

Dies bewirkt, dass ein Codeblock erstellt wird, der für jede Erinnerung in einer Liste mit dem Titel "Erinnerungen" einmal wiederholt wird. Sie sollten standardmäßig eine davon in Ihrer Erinnerungs-App haben.


Die Erinnerungsliste, auf die wir abzielen.

Bei jeder Ausführung des Codeblocks wird die Variable verwendet ich wird erhöht, bis es der Anzahl der Elemente in unserer Erinnerungsliste entspricht.


Schritt 4. Legen Sie Ihre Variablen fest

Als nächstes erstellen wir ein ganzes Durcheinander von Variablen. Einige davon werden sofort verwendet, andere werden Sie später in unserem Skript nicht sehen. Es ist nur eine gute Idee, sie auf einmal aus dem Weg zu räumen.

[apfelschrift]
--Datum
setze theDate auf "Erinnerungen für" & Datumszeichen von (aktuelles Datum)

--leere Variablen
setze den Eintrag auf ""
setze die Liste auf
setze den Ausgang auf ""

Anwendung "Erinnerungen" mitteilen
wiederhole mit i von 1 bis (zählt von jeder Erinnerung der Liste "Erinnerungen")

--Erinnerungsvariablen
theReminder auf Erinnerung i der Liste "Erinnerungen" setzen
setze reminderName auf den Namen des Reminder

ende wiederholen
ende sagen
[/ applescript]

Die erste Variable erfasst das aktuelle Datum. Wir machen dies, indem wir uns auf die "Datumszeichenfolge" des aktuellen Datums beziehen. Dies hat das folgende Format: Freitag, 1. Februar 2012. Das "aktuelle Datum" ist an sich viel größer und enthält sowohl die Uhrzeit als auch das Datum.

Nach dem Datum erstellen wir drei leere Variablen. Dies scheint seltsam zu sein, aber es steckt eine Logik dahinter. Im Grunde werden wir diese Variablen innerhalb unserer Wiederholungen und ob Blöcke verbessern und bearbeiten, und wir brauchen sie, um eine grundlegende Existenzebene zu haben, bevor wir dies tun können.

In unserer Wiederholungsschleife erstellen wir schließlich zwei weitere Variablen. Die Erinnerung ist einfach eine Abkürzung, damit wir nicht "Erinnerung" eingeben müssen ich Liste der Erinnerungen "ein paar Mal. reminderName holt sich den Namen jeder Erinnerung, während wir die Liste durchlaufen.


Schritt 5. Fertige Gegenstände entsorgen

Das Problem bei unserer derzeitigen Struktur ist, dass Zyklen durchlaufen alles Ihrer Erinnerungen, auch diejenigen, die abgeschlossen wurden. Wir sind nicht wirklich an diesen interessiert, also müssen wir sie mit einer einfachen Bedingungsanweisung herausfiltern. Diese wird direkt nach den Erinnerungsvariablen des vorherigen Schritts in die Wiederholungsschleife eingefügt.

[apfelschrift]
--Erinnerungsvariablen
theReminder auf Erinnerung i der Liste "Erinnerungen" setzen
setze reminderName auf den Namen des Reminder

--ist komplett?
wenn theReminder dann nicht abgeschlossen ist
ende wenn
[/ applescript]

Wie Sie sehen, ist es so einfach wie eine if-Anweisung, die anvisiert nicht vollständig Erinnerungen. Jetzt wird jeder Code, den wir hineinwerfen, nur auf den relevanten Erinnerungen ausgeführt.


Schritt 6. Erstellen Sie eine Liste ausstehender Erinnerungen

Nun, da wir eine Bedingungsanweisung zum Herausfiltern nicht abgeschlossener Elemente haben, müssen wir einen Weg zum Ausfüllen finden Die Liste mit dem Titel und dem Fälligkeitsdatum jeder anstehenden Mahnung. Das schwierige an der Sache ist, dass die Reminders-App kein Fälligkeitsdatum erfordert, was bedeutet, dass einige Erinnerungen sie haben und andere nicht.

Um dies zu bewältigen, müssen wir zwei verschiedene Szenarien einrichten. Zuerst testen wir, ob ein Fälligkeitsdatum vorliegt. Wenn ja, setzen wir uns der Eintritt auf das Fälligkeitsdatum und den Namen der Erinnerung. Wenn kein Fälligkeitsdatum existiert, überspringen wir das Fälligkeitsdatum und fügen einfach den Titel hinzu der Eintritt. Zum Schluss werden wir noch hinzufügen der Eintritt zu Die Liste. Dieser Prozess wird erneut für alle nicht abgeschlossenen Erinnerungen übernommen und schrittweise aufgebaut Die Liste so dass es alle Informationen enthält, die wir brauchen.

[apfelschrift]
--ist komplett?
wenn theReminder dann nicht abgeschlossen ist
--hat Fälligkeitsdatum?
Wenn das Fälligkeitsdatum des Rememinder liegt, dann
dueDate auf das Fälligkeitsdatum des Reminder setzen
setze theEntry auf reminderName & linefeed & dueDate
sonst
setze theEntry auf reminderName
ende wenn
setze theList auf theList & theEntry
ende wenn
[/ applescript]

Wie Sie sehen, haben wir eine bedingte Anweisung in eine andere geschachtelt. Im Allgemeinen halte ich mich davon fern, wenn es möglich ist, um die Dinge einfach und lesbar zu halten. In diesem Fall ist eine Schachtelungsebene durchaus akzeptabel. Beachten Sie auch, dass ich ein gesetzt habe Zeilenvorschub zwischen dem Erinnerungsnamen und dem Fälligkeitsdatum, damit sie in der endgültigen Ausgabe nicht in derselben Zeile erscheinen.


Schritt 7. Formatieren Sie die Ausgabe

Wir sind so ziemlich alle mit dem Reminders App Tell Block fertig. Als Nächstes müssen wir den gesamten Text aufnehmen, in den der Text eingefügt wurde Die Liste und formatieren Sie es schön für die Ausgabe in eine E-Mail.

Um dies zu erreichen, müssen wir jedoch ein Gefühl dafür bekommen, wie unsere Ausgabe im aktuellen Zustand aussieht. Wenn Sie einen Einblick in einen gespeicherten Wert erhalten möchten, versuchen Sie es mit einer return-Anweisung. Hier ist der gesamte Code, den wir bisher geschrieben haben, gefolgt von einer Anweisung, die den Inhalt von zurückgibt Die Liste als Textfolge.

[apfelschrift]
setze theDate auf "Erinnerungen für" & Datumszeichen von (aktuelles Datum)
setze den Eintrag auf ""
setze die Liste auf
setze den Ausgang auf ""

Anwendung "Erinnerungen" mitteilen
wiederhole mit i von 1 bis (zählt von jeder Erinnerung der Liste "Erinnerungen")

--Variablen setzen
theReminder auf Erinnerung i der Liste "Erinnerungen" setzen
setze reminderName auf den Namen des Reminder

--ist komplett?
wenn theReminder dann nicht abgeschlossen ist
--hat Fälligkeitsdatum?
Wenn das Fälligkeitsdatum des Rememinder liegt, dann
dueDate auf das Fälligkeitsdatum des Reminder setzen
setze theEntry auf reminderName & linefeed & dueDate
sonst
setze theEntry auf reminderName
ende wenn
setze theList auf theList & theEntry
ende wenn
ende wiederholen
ende sagen

Gibt die Liste als String zurück
[/ applescript]

Wenn Sie dies ausführen, wird im AppleScript-Editor im Bereich "Ergebnis" eine Reihe von Texten angezeigt. Dies ist der Text, der in gespeichert wird Die Liste, Aber wie Sie unten sehen können, ist es etwas unordentlich!


Die Ausgabe unseres Skripts bisher.

Wir haben definitiv ein paar Zeilenumbrüche. Lasst uns das aufräumen, sollen wir? Das erste, was Sie tun müssen, ist, diese return-Anweisung zu entfernen. Es war nur ein vorübergehender Trick zu Testzwecken und hat keinen Platz in unserem letzten Skript.

Als nächstes fügen Sie den Code unten anstelle der return-Anweisung ein. Was wir hier machen, radelt durch die Gegenstände in Die Liste, Hinzufügen zusätzlicher Zeilenvorschübe nach jedem und Einfügen einiger gestrichelter Linien, damit alles schön aussieht.

[apfelschrift]
wiederhole mit i von 1 bis (zählt von jedem Element der Liste)
Setzen Sie theOutput auf (theOutput & item i derListe als String) & linefeed & "---" & linefeed
ende wiederholen
[/ applescript]

Nun, wenn wir eine weitere temporäre return-Anweisung zur Überprüfung hinzufügen die Ausgabe, Was wir sehen, ist viel schöner und leichter zu lesen. Beachten Sie, dass unser Skript sowohl Erinnerungen mit als auch ohne Fälligkeitsdatum gut verarbeitet und jede Erinnerung mit den Bindestrichen trennt, die ich zuvor erwähnt habe.


Die Ausgabe unseres Skripts bisher.

Schritt 8. Senden Sie die E-Mail

Wir sind fast fertig! Jetzt, da wir eine schön formatierte Liste der aktuellen Erinnerungen haben, müssen wir diese Informationen nur in einer E-Mail abrufen und abschicken.

Hier wird es etwas knifflig. Scripting Mail ist eine ziemlich schrullige Aufgabe und man muss nur wissen, wie es funktioniert, damit alles richtig wird. Das AppleScript-Wörterbuch werden Hilfe, aber die Dinge sind nicht so einfach wie in anderen Apps, so dass Sie sich nicht entmutigt fühlen, wenn Sie verwirrt werden.

Der grundlegende Prozess ist wie folgt. Zuerst müssen Sie eine Variable festlegen, um eine neue Nachricht zu erstellen, für die Sie eine Reihe von Eigenschaften (sichtbar, Absender, Betreff und Inhalt) zuweisen. Dann initiieren Sie tatsächlich einen Tell-Block auf diese Variable (die neue ausgehende Nachricht) und machen Sie einen neuen Empfänger. Dann senden Sie natürlich die Nachricht. So sieht das in der Praxis aus:

[apfelschrift]
--E-Mail senden
Anwendung "Mail" mitteilen
aktivieren Sie
Stellen Sie theMessage so ein, dass eine neue ausgehende Nachricht mit den Eigenschaften visible: true, Absender: "[email protected]", Betreff: theDate, Inhalt: theOutput erstellt wird.
Sagen Sie der Nachricht
Empfänger mit Eigenschaften Adresse: "[email protected]" neu erstellen
senden
ende sagen
ende sagen
[/ applescript]

Beachten Sie, dass wir hier einen Absender und einen Empfänger haben. Sie können die gleiche E-Mail-Adresse erstellen, wenn Sie die Nachricht an sich selbst senden möchten, oder Sie möchten möglicherweise mehrere Teammitglieder hinzufügen, sodass Sie diese tägliche E-Mail-Adresse verwenden können, um alle Mitarbeiter auf dem Laufenden zu halten. Es liegt an dir!

Wir haben auch ein Thema mit dem Datum, das unser verwendet das Datum variabel von vor. Der Inhalt der Nachricht ist auf festgelegt die Ausgabe Es wird also genau so aussehen, wie wir es in unseren Tests gesehen haben.

Unser Skript ist jetzt fertig. Nur um sicher zu sein, dass Sie alles haben, hier ist das Ganze:

[apfelschrift]
setze theDate auf "Erinnerungen für" & Datumszeichen von (aktuelles Datum)
setze den Eintrag auf ""
setze die Liste auf
setze den Ausgang auf ""

Anwendung "Erinnerungen" mitteilen
wiederhole mit i von 1 bis (zählt von jeder Erinnerung der Liste "Erinnerungen")

--Variablen setzen
theReminder auf Erinnerung i der Liste "Erinnerungen" setzen
setze reminderName auf den Namen des Reminder

--ist komplett?
wenn theReminder dann nicht abgeschlossen ist
--hat Fälligkeitsdatum?
Wenn das Fälligkeitsdatum des Rememinder liegt, dann
dueDate auf das Fälligkeitsdatum des Reminder setzen
setze theEntry auf reminderName & linefeed & dueDate
sonst
setze theEntry auf reminderName
ende wenn
setze theList auf theList & theEntry
ende wenn
ende wiederholen
ende sagen

wiederhole mit i von 1 bis (zählt von jedem Element der Liste)
Setzen Sie theOutput auf (theOutput & item i derListe als String) & linefeed & "---" & linefeed
ende wiederholen

--E-Mail senden
Anwendung "Mail" mitteilen
aktivieren Sie
Stellen Sie theMessage so ein, dass eine neue ausgehende Nachricht mit den Eigenschaften visible: true, Absender: "[email protected]", Betreff: theDate, Inhalt: theOutput erstellt wird.
Sagen Sie der Nachricht
Empfänger mit Eigenschaften Adresse: "[email protected]" neu erstellen
senden
ende sagen
ende sagen
[/ applescript]


Schritt 9. Planen Sie das Skript

Jetzt, da das Skript perfekt funktioniert, müssen wir einen Weg finden, das Skript regelmäßig auszuführen, beispielsweise jeden Montagmorgen, damit Sie einen Blick auf Ihre Woche werfen können. Speichern Sie dazu das Skript als Anwendung, platzieren Sie es an einer beliebigen Stelle auf Ihrer Festplatte und öffnen Sie die Kalender-App.

Von hier aus möchten Sie wahrscheinlich einen neuen Kalender speziell für automatisierte Aufgaben erstellen (damit Ihre anderen Kalender nicht verstopft werden). Erstellen Sie dann ein neues Ereignis, das sich jeden Montag wiederholt. Erstellen Sie schließlich eine Warnung für das Ereignis, durch das eine Datei geöffnet wird, und wählen Sie Ihre Skriptanwendung aus.


Planen des Skripts im Kalender.

Wenn dies der Fall ist, wird jeden Montag um 8 Uhr morgens eine E-Mail mit meinen Erinnerungen für die Woche an mich gesendet.


Erinnerungsmail

Mache es besser!

Wenn Sie die Schritte bis zu diesem Punkt befolgt haben, herzlichen Glückwunsch, haben Sie gerade ein tolles kleines Skript erstellt, das Ihnen helfen wird, dieses Jahr produktiv zu bleiben. Nun ist es an der Zeit, das, was ich getan habe, zu nehmen und es an Ihre eigenen Bedürfnisse anzupassen. Wie können Sie es für Ihren Workflow besser geeignet machen??