Planera ett veckovisa e-postmeddelande med AppleScript

Vi har nyligen gått över hur du använder två mycket viktiga komponenter i AppleScript: villkorliga uttalanden och upprepade loopar. När de kombineras är kraften i dessa två verktyg oerhört kraftfull. Nu ska vi använda det vi har lärt oss för att bygga ett enkelt och praktiskt arbetsflöde som automatiskt skickar ut en lista över dina ofullständiga uppgifter från appen Påminnelser.


Steg 1. Skapa en algoritm

Vad vi behöver är en enkel, enkel språklista över steg för att vägleda oss.

Innan vi börjar skriva in vår kod är det kritiskt att vi räknar ut vad det är som vi gör. Vi har redan en bra uppfattning om det slutresultat som vi vill uppnå, men det är inte det mest effektiva sättet att uppnå det, men det är inte det bästa sättet att uppnå det.

Istället är det som vi vill göra en grundläggande algoritm som kommer att fungera som en vägkarta för hur vi lägger ut vår kod. Vad vi behöver är en enkel, enkel språklista över steg för att vägleda oss.

Den knepiga delen här är att vi måste bygga vår algoritm med tanke på vad vi vet om AppleScripts inre verkningar. Våra steg kommer inte att ha kod i dem, men de måste vara kodmedvetna. Annars skulle vi sluta med något så här:

  • Få påminnelser
  • Lägg påminnelser i e-post
  • Skicka meddelande

Detta är utan tvekan något användbart, men i sanning kunde vi hålla reda på den processen mentalt utan att någonsin stava ut en specifik algoritm. Situationens verklighet är att denna process är mycket mer komplex och kräver lite djupare inblick i hur vi ska utföra varje bit. Här är ett mer grundligt och användbart försök till en algoritm:

  • Få alla påminnelser i en angiven lista
  • Mål bara de påminnelser som inte är färdiga
  • Ta reda på om påminnelsen har förfallodag
  • Om påminnelsen har förfallodag, ta både namnet och förfallodagen
  • Om påminnelsen inte har förfallodag, ta bara namnet
  • Konvertera all relevant information om påminnelser till Applescript-listobjekt
  • Skapa ett nytt mailmeddelande och ställ in dess egenskaper
  • Utför våra listobjekt till meddelandekroppen
  • Ställ in mottagaren av meddelandet
  • Skicka meddelandet
  • Schemalägg meddelande som inträffar dagligen eller veckovis

Nu snackar vi. Detta är mycket mer specifikt och beskriver effektivt hur vår kod ska struktureras. Vårt första försök var bedrägligt enkelt och verkade som om det kunde göras i tre eller fyra linjer kod. Vårt andra försök representerar en mycket mer realistisk titt på hur mycket arbete som ska gå in i det här skriptet.


Steg 2. Mål påminnelser App

Vår första kodningsuppgift är att få AppleScript att kommunicera med den nya påminnelser-appen inom Mountain Lion. Vi gör det självklart med ett berättningsblock, precis som om vi kommunicerade med någon annan app.

[Apple]
berätta ansökan "Påminnelser"
slutet berätta
[/ Apple]

Vårt tell block kommer att innehålla alla de kommandon som vi vill kasta i appen Påminnelser. Vilken kod som helst placerad mellan dessa två linjer antas riktas mot denna specifika app.


Steg 3. Starta en Repeat Loop

Todo-objektet högst upp i vår algoritm är att få alla påminnelser i en angiven lista. Vi vill inte ha dem alla samtidigt. I stället vill vi ta en åt gången, testa för att se om den matchar våra kriterier och fortsätt därefter.

För att uppnå denna cykel effekt kan vi använda en repetitionsslinga, som vi lärde oss allt om i en tidigare artikel. Denna omständighet kräver en upprepa med slinga:

[Apple]
berätta ansökan "Påminnelser"
upprepa med jag från 1 till (räknat på varje påminnelse om listan "påminnelser")
slutet upprepa
slutet berätta
[/ Apple]

Vad det här gör är att skapa ett block med kod som kommer att upprepas en gång för varje påminnelse i en lista med titeln "Påminnelser". Du borde ha en av dessa som standard i din Påminnelser-app.


Listan på Påminnelser som vi riktar in.

Varje gång kodblocket körs, variabeln jag kommer att öka tills det är lika med antalet poster i vår Påminnelser-lista.


Steg 4. Ställ in dina variabler

Nästa sak som vi ska göra är att skapa en hel del röra av variabler. Några av dessa kommer att användas direkt, andra som du inte kommer se till senare i vårt manus, det är bara en bra idé att få dem ur vägen.

[Apple]
--datum
ställa in datumet till "Påminnelser för" och datumsträng av (aktuellt datum)

--tomma variabler
ställ in theEntry till ""
ställa in listan till
ställ in utmatningen till ""

berätta ansökan "Påminnelser"
upprepa med jag från 1 till (räknat på varje påminnelse om listan "påminnelser")

--påminnelser variabler
ställ in theReminder för att påminna jag i listan "Påminnelser"
Ange påminnelseNamn till namnet påReminder

slutet upprepa
slutet berätta
[/ Apple]

Den första variabeln tar det aktuella datumet. Vi gör detta genom att referera till "datumsträngen" för det aktuella datumet. Detta tar följande format: Fredag ​​den 1 februari 2012. I sig är "aktuellt datum" mycket större och innehåller både tid och datum.

Efter att vi har datum skapar vi tre tomma variabler. Det verkar som en konstig sak att göra, men det finns logik bakom det. I grund och botten kommer vi att lägga till och manipulera dessa variabler inuti vår upprepning och om block och vi behöver dem att ha en grundläggande existensnivå innan vi kan göra det.

Slutligen skapar vi ytterligare två variabler inuti vår repetitionsslinga. theReminder är helt enkelt en genväg så att vi inte behöver skriva ut "påminnelse jag av lista påminnelser "en massa gånger. reminderName tar tag i namnet på varje påminnelse när vi cyklar genom listan.


Steg 5. Släng ut färdiga artiklar

Problemet med vår nuvarande struktur är det som cykler igenom Allt av dina påminnelser, även de som har slutförts. Vi är inte riktigt intresserade av dem så vi behöver filtrera dem ut med ett enkelt villkorligt uttalande. Detta går in i repetitionsslingan direkt efter påminnelsevariablerna från föregående steg.

[Apple]
--påminnelser variabler
ställ in theReminder för att påminna jag i listan "Påminnelser"
Ange påminnelseNamn till namnet påReminder

--är komplett?
om theReminder inte är klar då
avsluta om
[/ Apple]

Som du kan se är det lika enkelt som om ett uttalande är inriktat inte färdigt påminnelser. Nu kommer någon kod som vi kasta inuti detta bara att utföras på relevanta påminnelser.


Steg 6. Skapa en lista med väntande påminnelser

Nu när vi har ett villkorligt uttalande att filtrera bort oanvända föremål, behöver vi hitta en väg att fylla listan med titeln och förfallodagen för varje pågående påminnelse. Den knepiga delen är att appen Påminnelser inte kräver förfallodatum, vilket innebär att vissa påminnelser kommer att få dem och andra kommer inte att.

För att hantera detta måste vi inrätta två olika scenarier. Först testar vi för att se om ett förfallodatum finns. Om det gör så ställer vi in ingången till förfallodagen och påminnelsens namn. Om ett förfallodatum inte finns kommer vi att hoppa över förfallodagen och bara lägga till titeln till ingången. Slutligen lägger vi till ingången till listan. Återigen kommer denna process att tas på alla icke-färdiga påminnelser, gradvis bygga upp listan så att den innehåller all information som vi behöver.

[Apple]
--är komplett?
om theReminder inte är klar då
--har förfallodag?
om förfallodagen förReminder existerar då
Ange förfallodagen till förfallodagen för Reminder
ställa in theEntry till påminnelseName & linefeed & dueDate
annan
ställa in theEntry till påminnelseNamn
avsluta om
ställa in listan till listan & theEntry
avsluta om
[/ Apple]

Som ni kan se har vi nestat ett villkorligt uttalande inuti en annan. I allmänhet klarar jag av det här, när det är möjligt, att hålla sakerna enkla och läsbara, men i det här fallet är ett lager av nestning helt acceptabelt. Observera också att jag har placerat en radmatning mellan påminnelsens namn och förfallodatum så kommer de inte att visas på samma rad i vår slutliga produktion.


Steg 7. Formatera utmatningen

Vi är ganska mycket alla färdiga med påminnelsebeskrivningsblocket. Därefter måste vi ta all den texten som placerades i listan och formatera det snyggt för utmatning till ett mail.

För att uppnå detta måste vi dock få en känsla för hur vår produktion ser ut i sitt nuvarande tillstånd. När som helst du behöver få en glimt av något lagrat värde, försök att använda ett returformulär. Här är all kod som vi har skrivit hittills följt av ett uttalande som returnerar innehållet i listan som en textsträng.

[Apple]
ställa in datumet till "Påminnelser för" och datumsträng av (aktuellt datum)
ställ in theEntry till ""
ställa in listan till
ställ in utmatningen till ""

berätta ansökan "Påminnelser"
upprepa med jag från 1 till (räknat på varje påminnelse om listan "påminnelser")

--ställa in variabler
ställ in theReminder för att påminna jag i listan "Påminnelser"
Ange påminnelseNamn till namnet påReminder

--är komplett?
om theReminder inte är klar då
--har förfallodag?
om förfallodagen förReminder existerar då
Ange förfallodagen till förfallodagen för Reminder
ställa in theEntry till påminnelseName & linefeed & dueDate
annan
ställa in theEntry till påminnelseNamn
avsluta om
ställa in listan till listan & theEntry
avsluta om
slutet upprepa
slutet berätta

returnera listan som sträng
[/ Apple]

Om vi ​​kör det här ser vi en massa text som dyker upp i avsnittet "Resultat" i AppleScript Editor. Detta är texten som lagras i listan, men som du kan se nedan är det lite rörigt!


Resultatet av vårt skript hittills.

Vi har definitivt fått några problem med rasten. Låt oss städa upp det ska vi? Det första du vill göra är att ta bort det returnerade uttalandet. Det var bara ett tillfälligt knep för teständamål och har ingen plats i vårt sista skript.

Sätt sedan in stycket av kod nedan i stället för returräkningen. Vad vi gör här cyklar genom objekten i listan, lägger till extra linefeeds efter varje och sätter in några streckade linjer för att få allt att se bra ut.

[Apple]
upprepa med jag från 1 till (räkna av varje objekt i listan)
ställa in utmatningen till (utmatningen och åtgärden i i listan som sträng) & linefeed & "---" & linefeed
slutet upprepa
[/ Apple]

Nu om vi lägger till i ett annat tillfälligt avkastningsbevis för att kontrollera theOutput, Det vi ser är mycket trevligare och lättare att läsa. Observera att vårt skript hanterar båda påminnelserna med och utan förfallodatum bara bra och skiljer varje påminnelse med de streck som jag nämnde tidigare.


Resultatet av vårt skript hittills.

Steg 8. Skicka e-posten

Vi är nästan färdiga! Nu när vi har en snygg formaterad lista över de nuvarande påminnelserna behöver vi bara få den informationen i ett e-postmeddelande och skicka det av.

Det är här saker blir lite knepiga. Scripting Mail är en ganska udda uppgift och du behöver bara veta hur det fungerar för att få allt att visa sig rätt. AppleScript-ordboken kommer hjälp, men saker är inte lika enkla som de är i andra appar, så känner du inte avskräckt om du blir förvirrad.

Grundprocessen är som följer. Först måste du ställa in en variabel för att skapa ett nytt meddelande för vilket du tilldelar en uppsättning egenskaper (synlig, avsändare, ämne och innehåll). Då startar du faktiskt ett tell block den variabeln (som är det nya utgående meddelandet) och göra en ny mottagare. Då skickar du naturligtvis meddelandet. Så här ser det ut i praktiken:

[Apple]
--Skicka epost
berätta ansökan "Mail"
Aktivera
sätt theMessage att skapa nytt utgående meddelande med egenskaper synlig: sant, avsändare: "[email protected]", ämne: theDate, content: theOutput
berätta förMessage
gör nya till mottagare med egenskaper adress: "[email protected]"
skicka
slutet berätta
slutet berätta
[/ Apple]

Observera att vi har en avsändare och en mottagare här. Du kan göra samma e-post om du vill skicka meddelandet till dig själv, eller kanske du vill inkludera flera lagmedlemmar så att du kan använda den här dagliga e-posten för att hålla alla på uppdrag. Det är upp till dig!

Vi har också ett ämne med datumet i det som använder vår datumet variabel från tidigare. Innehållet i meddelandet är inställt på theOutput så det kommer att se ut som det vi såg i våra tester.

Vårt skript är nu klart. Bara för att vara säker på att du har allt, här är det fulla:

[Apple]
ställa in datumet till "Påminnelser för" och datumsträng av (aktuellt datum)
ställ in theEntry till ""
ställa in listan till
ställ in utmatningen till ""

berätta ansökan "Påminnelser"
upprepa med jag från 1 till (räknat på varje påminnelse om listan "påminnelser")

--ställa in variabler
ställ in theReminder för att påminna jag i listan "Påminnelser"
Ange påminnelseNamn till namnet påReminder

--är komplett?
om theReminder inte är klar då
--har förfallodag?
om förfallodagen förReminder existerar då
Ange förfallodagen till förfallodagen för Reminder
ställa in theEntry till påminnelseName & linefeed & dueDate
annan
ställa in theEntry till påminnelseNamn
avsluta om
ställa in listan till listan & theEntry
avsluta om
slutet upprepa
slutet berätta

upprepa med jag från 1 till (räkna av varje objekt i listan)
ställa in utmatningen till (utmatningen och åtgärden i i listan som sträng) & linefeed & "---" & linefeed
slutet upprepa

--Skicka epost
berätta ansökan "Mail"
Aktivera
sätt theMessage att skapa nytt utgående meddelande med egenskaper synlig: sant, avsändare: "[email protected]", ämne: theDate, content: theOutput
berätta förMessage
gör nya till mottagare med egenskaper adress: "[email protected]"
skicka
slutet berätta
slutet berätta
[/ Apple]


Steg 9. Schemalägga skriptet

Nu när manuset är helt funktionellt måste vi räkna ut ett sätt att schemalägga det för att springa regelbundet, säg varje måndag morgon så att du kan ta en titt på din vecka. För att göra detta, spara skriptet som ett program, placera det var som helst du vill på hårddisken och öppna sedan kalenderappen.

Härifrån kommer du förmodligen att skapa en ny kalender speciellt för automatiska uppgifter (så de kommer inte att störa dina andra kalendrar). Skapa sedan en ny händelse som upprepas varje måndag. Slutligen skapa en varning för händelsen som öppnar en fil och välj ditt skriptprogram.


Schemalägger skriptet i kalendern.

Med detta på plats, varje måndag klockan 8, oavsett om jag är på min dator eller inte, kommer ett mail att skickas till mig som innehåller mina påminnelser för veckan.


Påminnelsemail

Gör det bättre!

Om du följde stegen hela vägen till denna punkt, grattis, byggde du bara ett fantastiskt litet skript som hjälper dig att hålla dig produktiv i år. Nu är det dags att ta det jag har gjort och justera det för att passa dina egna behov. Hur kan du göra det bättre lämpat för ditt arbetsflöde?