Plan een e-mailherinneringsmail met AppleScript

We zijn recent gaan nadenken over het gebruik van twee zeer belangrijke componenten van AppleScript: voorwaardelijke instructies en herhaalde lussen. In combinatie is de kracht van deze twee gereedschappen ongelooflijk krachtig. Nu gaan we wat we hebben geleerd gebruiken om een ​​eenvoudige en praktische workflow te maken die automatisch een lijst met onvolledige taken uit de app Herinneringen e-mailt.


Stap 1. Maak een algoritme

Wat we nodig hebben, is een eenvoudige, eenvoudige taallijst met stappen om ons te begeleiden.

Voordat we onze code gaan typen, is het van cruciaal belang dat we uitvinden wat we doen. We hebben al een goed idee van het eindresultaat dat we willen bereiken, maar blindelings op weg om dat doel te bereiken, is niet de meest effectieve manier om dit te bereiken.

Wat we in plaats daarvan willen doen, is een basisalgoritme opwerken dat als een routekaart zal dienen voor de manier waarop we onze code inrichten. Wat we nodig hebben, is een eenvoudige, eenvoudige taallijst met stappen om ons te begeleiden.

Het lastige hier is dat we ons algoritme moeten bouwen met in het achterhoofd wat we weten over de interne werking van AppleScript. Onze stappen zullen geen code bevatten, maar ze moeten code-bewust zijn. Anders zouden we zoiets als dit krijgen:

  • Ontvang herinneringen
  • Zet herinneringen in e-mail
  • Bericht versturen

Dit is aantoonbaar iets nuttig, maar in waarheid kunnen we dat proces mentaal bijhouden zonder ooit een specifiek algoritme uit te spreken. De realiteit van de situatie is dat dit proces veel complexer is en enige diepere gedachten vereist over hoe we elk stuk zullen bereiken. Hier is een meer grondige en nuttige poging tot een algoritme:

  • Download alle herinneringen in een opgegeven lijst
  • Target alleen die herinneringen die niet zijn voltooid
  • Zoek uit of de herinnering een vervaldatum heeft
  • Als de herinnering een vervaldatum heeft, pak je zowel de naam als de einddatum
  • Als de herinnering geen vervaldatum heeft, hoeft u alleen de naam te pakken
  • Converteer alle relevante herinneringsinformatie naar Applescript-lijstitems
  • Maak een nieuw e-mailbericht en stel de eigenschappen in
  • Voer onze lijstitems uit naar de berichttekst
  • Stel de ontvanger van het bericht in
  • Stuur het bericht
  • Plan het bericht dagelijks of wekelijks

Nu zijn we aan het praten. Dit is veel specifieker en schetst effectief hoe onze code gestructureerd zal worden. Onze eerste poging was bedrieglijk eenvoudig en het leek erop dat het kon worden gedaan in drie of vier regels code. Onze tweede poging geeft een veel realistischere kijk op hoeveel werk er in dit script zal gaan.


Stap 2. Target Herinneringen App

Onze eerste coderingstaak is om AppleScript te laten communiceren met de nieuwe Herinneringsapp binnenin Mountain Lion. We doen dit natuurlijk met een vertellend blok, net alsof we communiceren met een andere app.

[Applescript]
vertel de applicatie "Herinneringen"
einde vertellen
[/ Applescript]

Ons tell-blok bevat alle opdrachten die we in de Herinneringen-app willen gooien. Van elke code die tussen deze twee regels wordt geplaatst, wordt aangenomen dat deze op deze specifieke app is gericht.


Stap 3. Start een herhalingslus

Het belangrijkste item bovenaan ons algoritme is om alle herinneringen in een opgegeven lijst te krijgen. We willen ze echter niet allemaal tegelijk. In plaats daarvan willen we er één tegelijk pakken, testen of het voldoet aan onze criteria en dienovereenkomstig handelen.

Om dit fietseffect te bereiken, kunnen we een herhalingslus gebruiken, waarover we in een vorig artikel alles hebben geleerd. Deze omstandigheid vraagt ​​om een herhaal met lus:

[Applescript]
vertel de applicatie "Herinneringen"
herhaal met i van 1 tot (tel van elke herinnering aan lijst "Herinneringen")
einde herhalen
einde vertellen
[/ Applescript]

Wat dit doet is een codeblok instellen dat één keer wordt herhaald voor elke herinnering in een lijst met de naam 'Herinneringen'. Je zou een van deze standaard in je Herinneringen-app moeten hebben.


De lijst Herinneringen die we targeten.

Elke keer dat het codeblok loopt, de variabele ik wordt verhoogd tot het gelijk is aan het aantal items in onze lijst Herinneringen.


Stap 4. Stel uw variabelen in

Het volgende dat we gaan doen, is een hele reeks variabelen maken. Sommige hiervan zullen meteen worden gebruikt, andere zul je pas later in ons script zien, het is gewoon een goed idee om ze in één keer uit de weg te ruimen.

[Applescript]
--datum
zet de datum op "Herinneringen voor" & datumreeks van (huidige datum)

--lege variabelen
zet de Enter op ""
stel de lijst in op
zet de Output op ""

vertel de applicatie "Herinneringen"
herhaal met i van 1 tot (tel van elke herinnering aan lijst "Herinneringen")

--herinneringsvariabelen
zet theReminder op Herinnering i van de lijst "Herinneringen"
stel reminderName in op de naam van theReminder

einde herhalen
einde vertellen
[/ Applescript]

De eerste variabele pakt de huidige datum. We doen dit door te verwijzen naar de "datumstring" van de huidige datum. Dit heeft de volgende indeling: Vrijdag 1 februari 2012. Op zichzelf is de "huidige datum" veel groter en bevat deze zowel de tijd als de datum.

Nadat we de datum hebben, maken we drie lege variabelen. Dit lijkt een raar iets om te doen, maar er zit een logica achter. In principe gaan we deze variabelen toevoegen aan en manipuleren binnen onze herhaal- en alsblokken en we hebben ze nodig om een ​​basisniveau van bestaan ​​te hebben voordat we dat kunnen doen..

Ten slotte creëren we binnen onze herhaalde lus nog twee variabelen. de herinnering is gewoon een snelkoppeling, zodat we geen "herinnering" hoeven in te typen ik van lijst Herinneringen "een aantal keren. reminderName grijpt de naam van elke herinnering terwijl we door de lijst bladeren.


Stap 5. Gooi voltooide items weg

Het probleem met onze huidige structuur is dat er een cyclus doorheen gaat allemaal van uw herinneringen, zelfs die zijn voltooid. Daar zijn we niet echt in geïnteresseerd, dus we moeten ze filteren met een eenvoudige voorwaardelijke verklaring. Dit gaat binnen de herhalingslus direct na de herinneringsvariabelen van de vorige stap.

[Applescript]
--herinneringsvariabelen
zet theReminder op Herinnering i van de lijst "Herinneringen"
stel reminderName in op de naam van theReminder

--is compleet?
als deReminder dan niet is voltooid
stop als
[/ Applescript]

Zoals u kunt zien, is het zo simpel als een als statement dat doelen niet voltooid herinneringen. Nu wordt elke code die we hierbinnen gooien alleen uitgevoerd op de relevante herinneringen.


Stap 6. Maak een lijst met in behandeling zijnde herinneringen

Nu we een voorwaardelijke verklaring hebben om niet-voltooide items te filteren, moeten we een manier vinden om te vullen de lijst met de titel en de einddatum van elke in behandeling zijnde herinnering. Het lastige is dat de app Herinneringen geen vervaldatum vereist, wat betekent dat sommige herinneringen ze hebben en anderen niet.

Om dit aan te kunnen, moeten we twee verschillende scenario's instellen. Eerst testen we of een vervaldatum bestaat. Als dat zo is, zullen we instellen de ingang tot de vervaldatum en de naam van de herinnering. Als een vervaldatum niet bestaat, slaan we de vervaldatum over en voegt u de titel gewoon toe de ingang. Eindelijk zullen we toevoegen de ingang naar de lijst. Nogmaals, dit proces zal worden uitgevoerd op alle niet-voltooide herinneringen, geleidelijk aan opbouwend de lijst zodat het alle informatie bevat die we nodig hebben.

[Applescript]
--is compleet?
als deReminder dan niet is voltooid
--heeft vervaldatum?
als de vervaldatum van theReminder dan bestaat
stel dueDate in op de vervaldatum van theReminder
zet de Enter op reminderName & linefeed & dueDate
anders
zet de Intocht op herinneringsnaam
stop als
zet de lijst op theList & theEntry
stop als
[/ Applescript]

Zoals u kunt zien, hebben we een voorwaardelijke verklaring genesteld in een andere. Over het algemeen stuur ik dit weg als het mogelijk is om dingen eenvoudig en leesbaar te houden, maar in dit geval is een laag nesten perfect acceptabel. Merk ook op dat ik een linefeed tussen de naam van de herinnering en de vervaldatum zodat ze niet op dezelfde regel in onze uiteindelijke uitvoer verschijnen.


Stap 7. Formatteer de uitvoer

We zijn bijna allemaal klaar met het Tell-blok voor tellers. Vervolgens moeten we al die tekst opnemen die is geplaatst de lijst en maak het netjes op voor uitvoer naar een e-mail.

Om dit te bereiken, moeten we echter een idee krijgen van hoe onze uitvoer er in de huidige staat uitziet. Elke keer dat u een glimp van een opgeslagen waarde wilt opvangen, probeert u een retourverklaring te gebruiken. Hier is alle code die we tot nu toe hebben geschreven, gevolgd door een instructie die de inhoud van de lijst als een reeks tekst.

[Applescript]
zet de datum op "Herinneringen voor" & datumreeks van (huidige datum)
zet de Enter op ""
stel de lijst in op
zet de Output op ""

vertel de applicatie "Herinneringen"
herhaal met i van 1 tot (tel van elke herinnering aan lijst "Herinneringen")

--stel variabelen in
zet theReminder op Herinnering i van de lijst "Herinneringen"
stel reminderName in op de naam van theReminder

--is compleet?
als deReminder dan niet is voltooid
--heeft vervaldatum?
als de vervaldatum van theReminder dan bestaat
stel dueDate in op de vervaldatum van theReminder
zet de Enter op reminderName & linefeed & dueDate
anders
zet de Intocht op herinneringsnaam
stop als
zet de lijst op theList & theEntry
stop als
einde herhalen
einde vertellen

retourneer de lijst als tekenreeks
[/ Applescript]

Als we dit uitvoeren, zien we een stapel tekst verschijnen in de sectie "Resultaat" van AppleScript Editor. Dit is de tekst die is opgeslagen in de lijst, maar zoals je hieronder kunt zien, is het een beetje rommelig!


De output van ons script tot nu toe.

We hebben zeker wat problemen met regelafbreking. Laten we dat opruimen, zullen we? Het eerste dat u wilt doen, is die retourverklaring verwijderen. Het was slechts een tijdelijke truc voor testdoeleinden en hoort niet thuis in ons definitieve script.

Voeg vervolgens de onderstaande brok code toe in plaats van de retourinstructie. Wat we hier doen is fietsen door de items in de lijst, het toevoegen van extra lijnafdrukken na elk en het invoegen van een paar stippellijnen om alles er mooi uit te laten zien.

[Applescript]
herhaal met i van 1 tot (tel van elk item van de lijst)
zet de Output naar (the Output & item i van deList als string) & linefeed & "---" & linefeed
einde herhalen
[/ Applescript]

Als we nu een andere tijdelijke retourverklaring toevoegen om te controleren het resultaat, wat we zien is veel mooier en gemakkelijker te lezen. Merk op dat ons script beide herinneringen met en zonder vervaldatums prima verwerkt en elke herinnering scheidt van de streepjes die ik eerder heb genoemd.


De output van ons script tot nu toe.

Stap 8. Verzend de e-mail

We zijn bijna klaar! Nu we een mooi opgemaakte lijst met de huidige herinneringen hebben, moeten we die informatie gewoon in een e-mail ontvangen en versturen.

Dit is waar dingen een beetje lastig worden. Scripting Mail is een vrij eigenzinnige taak en je moet gewoon weten hoe het werkt om het allemaal goed te laten aflopen. Het AppleScript-woordenboek zullen hulp, maar dingen zijn niet zo eenvoudig als in andere apps, dus voel je niet ontmoedigd als je in de war raakt.

Het basisproces is als volgt. Eerst moet u een variabele instellen om een ​​nieuw bericht te maken waarvoor u een reeks eigenschappen toewijst (zichtbaar, afzender, onderwerp en inhoud). Vervolgens start u een tell-blok op die variabele (wat het nieuwe uitgaande bericht is) en maak een nieuwe ontvanger. Dan stuur je natuurlijk het bericht. Hier is hoe dit er in de praktijk uitziet:

[Applescript]
--Verstuur e-mail
vertel de applicatie "Mail"
activeren
zet theMessage om een ​​nieuw uitgaand bericht te maken met eigenschappen visible: true, sender: "[email protected]", onderwerp: theDate, content: theOutput
vertel theMessage
maak nieuw voor ontvanger met eigenschappen address: "[email protected]"
sturen
einde vertellen
einde vertellen
[/ Applescript]

Merk op dat we hier een afzender en een ontvanger hebben. U kunt deze dezelfde e-mail maken als u het bericht naar uzelf wilt verzenden, of misschien wilt u meerdere teamleden opnemen, zodat u deze dagelijkse e-mail kunt gebruiken om iedereen op tijd te houden. Het is aan jou!

We hebben ook een onderwerp met de datum die onze de datum variabele van vroeger. De inhoud van het bericht is ingesteld op het resultaat dus het ziet eruit als wat we in onze tests zagen.

Ons script is nu klaar. Om er zeker van te zijn dat je alles hebt, hier is het volledige ding:

[Applescript]
zet de datum op "Herinneringen voor" & datumreeks van (huidige datum)
zet de Enter op ""
stel de lijst in op
zet de Output op ""

vertel de applicatie "Herinneringen"
herhaal met i van 1 tot (tel van elke herinnering aan lijst "Herinneringen")

--stel variabelen in
zet theReminder op Herinnering i van de lijst "Herinneringen"
stel reminderName in op de naam van theReminder

--is compleet?
als deReminder dan niet is voltooid
--heeft vervaldatum?
als de vervaldatum van theReminder dan bestaat
stel dueDate in op de vervaldatum van theReminder
zet de Enter op reminderName & linefeed & dueDate
anders
zet de Intocht op herinneringsnaam
stop als
zet de lijst op theList & theEntry
stop als
einde herhalen
einde vertellen

herhaal met i van 1 tot (tel van elk item van de lijst)
zet de Output naar (the Output & item i van deList als string) & linefeed & "---" & linefeed
einde herhalen

--Verstuur e-mail
vertel de applicatie "Mail"
activeren
zet theMessage om een ​​nieuw uitgaand bericht te maken met eigenschappen visible: true, sender: "[email protected]", onderwerp: theDate, content: theOutput
vertel theMessage
maak nieuw voor ontvanger met eigenschappen address: "[email protected]"
sturen
einde vertellen
einde vertellen
[/ Applescript]


Stap 9. Het script plannen

Nu het script perfect functioneel is, moeten we erachter komen hoe het regelmatig kan worden uitgevoerd, bijvoorbeeld elke maandagochtend, zodat u uw week kunt bekijken. Sla het script hiervoor op als een toepassing, plaats het waar u maar wilt op uw harde schijf en open vervolgens de app Agenda.

Van hieruit wil je waarschijnlijk een nieuwe kalender maken speciaal voor geautomatiseerde taken (zodat ze je andere agenda's niet in de war brengen). Maak vervolgens een nieuwe afspraak die elke maandag wordt herhaald. Maak ten slotte een waarschuwing voor de gebeurtenis die een bestand opent en kies uw scripttoepassing.


Het script plannen in de agenda.

Met dit op zijn plek, elke maandag om 8 uur, of ik nu aan mijn computer zit of niet, een e-mail zal naar mij worden gestuurd met daarin mijn herinneringen voor de week.


Herinneringsmail

Maak het beter!

Als je de stappen helemaal tot op dit punt hebt gevolgd, gefeliciteerd, heb je zojuist een geweldig klein script gemaakt waarmee je dit jaar productief kunt blijven. Nu is het tijd om te nemen wat ik heb gedaan en het aan te passen aan uw eigen behoeften. Hoe kunt u het beter geschikt maken voor uw workflow?