Planlegg en ukentlig påminnelse e-post med AppleScript

Schedule en ukentlig påminnelse e-post med Applescript

Vi har nylig gått over hvordan du bruker to svært viktige komponenter i Applescript: betinget utsagn og gjenta sløyfer. Når kombinert, er kraften i disse to verktøyene utrolig kraftig. Nå skal vi bruke det vi har lært å bygge en enkel og praktisk arbeidsflyt som automatisk sender ut en liste over dine ufullstendige oppgaver fra påminnelser app.



Trinn 1. Lag en algoritme

Det vi trenger er en enkel, vanlig språk liste over tiltak for å veilede oss.

Før vi begynner å skrive koden vår, er det viktig at vi finner ut hva det er at vi ' re gjør. Vi har allerede en god ide om sluttresultatet som vi er ute etter å oppnå, men blindt drar ut for å møte dette målet er ikke den mest effektive måten å oppnå det.

stedet, hva vi ønsker å gjøre er opparbeide en grunnleggende algoritme som vil fungere som et veikart for hvordan vi legger ut koden vår. Det vi trenger er en enkel, vanlig språk liste over tiltak for å veilede oss.

Den vanskelige delen her er at vi trenger å bygge vår algoritme, men husk samtidig det vi vet om den interne driften av Applescript. Våre trinnene vil ikke ha kode i dem, men de må være kode bevisst. Ellers ville vi ende opp med noe som dette:

Få påminnelser

Sett påminnelser i e

Send melding

Dette er uten tvil litt
nyttig, men i sannhet vi kan holde styr på at prosessen mentalt uten å konkretisere en bestemt algoritme. Realiteten i situasjonen er at denne prosessen er mye mer kompleks og krever litt dypere tanke i hvordan vi skal oppnå hvert stykke. Her er en mer grundig og nyttig forsøk på en algoritme:

Få alle påminnelser i en spesifisert liste

Target bare de påminnelser som ikke er fullført

Finne ut om påminnelsen har en forfallsdato

Hvis påminnelsen har en forfallsdato, grip både navnet og forfallsdato

Hvis påminnelsen ikke har en forfallsdato, bare ta navnet

Konverter all relevant informasjon påminnelse til Applescript listeelementer

Opprett en ny e-postmelding og angi egenskapene

Output vår liste elementer i meldingen kroppen

Still mottakeren av meldingen

Send meldingen

Schedule melding til oppstå daglig eller ukentlig

Nå vi snakker. Dette er mye mer konkret og effektivt skisserer hvordan koden vår kommer til å være strukturert. Vårt første forsøk var utrolig enkle og virket som det kunne gjøres i tre eller fire linjer med kode. Vår andre forsøk representerer en mye mer realistisk syn på hvor mye arbeid som kommer til å gå inn i dette skriptet.

Trinn 2. Target påminnelser App

Vår første koding oppgave er å få Applescript til å kommunisere med de nye påminnelser app innsiden av Mountain Lion. Vi selvsagt gjøre dette med en forteller blokk, akkurat som om vi skulle kommunisere med noen annen app

[Applescript] forteller programmet ". Påminnelser " ende fortelle [/Applescript]

Vår tell blokk vil inneholde alle kommandoene som vi ønsker å kaste på påminnelser app. Noen kode plassert mellom disse to linjene vil bli antatt å være rettet mot denne spesifikke app.

Trinn 3. Start en Gjenta Loop

todo element på toppen av algoritmen vår er å få alle av påminnelser i en spesifisert liste. Vi trenger faktisk ikke vil ha dem alle på en gang skjønt. I stedet ønsker vi å ta en av gangen, for å teste om det matcher våre kriterier og fortsett deretter.

For å oppnå dette sykling effekt, kan vi bruke en gjentakelse loop, som vi har lært om i en tidligere artikkel. Dette forholdet krever en gjenta med
sløyfe:

[Applescript] forteller programmet " påminnelser " gjenta med jeg fra en til (telling av hver påminnelse om liste " påminnelser ") end repeatend fortelle [/Applescript]

Hva dette er å etablere en blokk med kode som vil gjenta én gang for hver påminnelse i en liste tittelen "Påminnelser". Du bør ha en av disse som standard i Påminnelser app.
Påminnelser liste som vi er målgruppe.

Hver gang kodeblokk løper, variabelen i
vil øke til den er lik til antall elementer i vår påminnelser listen.

Trinn 4. Sett variabler

Det neste som vi kommer til å gjøre er å lage en hel rot av variabler. Noen av disse vil bli brukt med en gang, andre vil du ikke se før senere i vår script, er det bare en god idé å få dem ut av veien på en gang

[Applescript] -. Dateset thedate til " Påminnelser for " & dato streng av (dagens dato)

- tom variablesset theEntry til " " satt thelist til {} satt theoutput til " "

forteller programmet " påminnelser " gjenta med jeg fra en til (telling av hver påminnelse om liste " påminnelser ")

- påminnelse variabler satt theReminder til påminnelse jeg av liste " påminnelser " satt reminderName til navnet på theReminder

end repeatend fortelle [/Applescript]

Den første variabelen griper gjeldende dato. Vi gjør dette ved å henvise til "datostreng" av dagens dato. Dette tar følgende format: fredag ​​1. februar 2012
. Av seg selv, "dagens dato" er mye større og inneholder gang, samt dato.

Etter at vi har datoen, skaper vi tre tomme variabler. Dette virker som en merkelig ting å gjøre, men det er logikken bak det. I utgangspunktet skal vi legge til og manipulere disse variablene innsiden av våre gjenta og hvis blokkene, og vi trenger dem til å ha en grunnleggende nivå av eksistens før vi kan gjøre det.

Til slutt, innsiden av våre gjenta sløyfe skaper vi to flere variabler. theReminder
er bare en snarvei, slik at vi ikke trenger å skrive ut "påminnelse i
liste påminnelser" en rekke ganger. reminderName
griper navnet på hver påminnelse som vi bla gjennom listen.

Trinn 5. Toss Out ferdige elementer

Problemet med vår nåværende struktur er som blar gjennom alle
av dine påminnelser, selv de som har blitt gjennomført. Vi er egentlig ikke interessert i dem, så vi trenger å filtrere dem ut med en enkel betinget utsagn. Dette går på innsiden av gjentakelses sløyfe rett etter påminnelses variabler fra forrige trinn

[Applescript] - påminnelse variablesset theReminder til påminnelse jeg av liste ". Påminnelser " satt reminderName til navnet på theReminder

- er komplett hvis theReminder ikke er fullført thenend hvis [/Applescript]

Som du kan se, er det så enkelt som en if setning som mål ikke fullført
påminnelser?. Nå noen kode som vi kaste innsiden av dette vil kjøre kun på de aktuelle påminnelser.

Trinn 6. Lag en liste over ventende påminnelser

Nå som vi har et betinget utsagn for å filtrere ut ikke- ferdige elementer, må vi finne en måte å fylle thelist
med tittelen og forfallsdato for hver ventende påminnelse. Den vanskelige delen er, vil ikke påminnelser app krever ikke en forfallsdato, noe som betyr at noen påminnelser vil ha dem, og andre vil ikke.

For å håndtere dette må vi sette opp to ulike scenarier. Først vil vi teste for å se om en forfallsdato eksisterer. Hvis den gjør det, vil vi sette theEntry
til forfallsdato og påminnelsen navn. Hvis en forfallsdato ikke eksisterer, vil vi hoppe over forfallsdato og bare legge til tittelen i theEntry
. Til slutt, vil vi legge til theEntry
til thelist
. Igjen, vil denne prosessen bli tatt på alle ikke-fullført påminnelser, gradvis bygge opp thelist
slik at den inneholder all informasjon som vi trenger

[Applescript] -. Er fullført? hvis theReminder ikke er fullført så --has forfallsdato? hvis forfall theReminder eksisterer deretter satt forfallsdato til forfallsdato theReminder satt theEntry å reminderName & linjematingen & forfallsdato annet satt theEntry å reminderName slutten hvis satt thelist å thelist & theEntryend hvis [/Applescript]

Som du ser, har vi nestet et betinget utsagn innsiden av en annen. Vanligvis jeg styre klar av dette når det er mulig å holde ting enkelt og lesbar, men i dette tilfellet, er helt akseptabelt ett lag av hekkende. Legg også merke til at jeg har plassert en linjeskift
i mellom påminnelse navn og forfallsdato, slik at de ikke vises på samme linje i vår endelige resultatet.

Trinn 7. Format Output

Vi er ganske mye ferdig med påminnelser app tell blokk. Deretter må vi ta alle av den teksten som ble plassert i thelist Hotell og formatere den pent for produksjonen i en e-post.

For å oppnå dette selv, vi trenger å få et inntrykk av hvordan produksjonen vår ser ut i sin nåværende tilstand. Hver gang du trenger for å få et glimt av noen lagrede verdi, prøv å bruke en retur uttalelse. Her er alt av koden som vi har skrevet så langt etterfulgt av en uttalelse som returnerer innholdet i thelist
som en tekststreng

[Applescript] satt thedate til ". Påminnelser for " & dato streng av (dagens dato) satt theEntry til " " satt thelist til {} satt theoutput til " "

forteller programmet " påminnelser " gjenta med jeg fra en til (telling av hver påminnelse om liste " påminnelser ")

- sett variabler satt theReminder til påminnelse jeg av liste " påminnelser " satt reminderName til navnet på theReminder

- er fullført? hvis theReminder ikke er fullført så --has forfallsdato? hvis forfall theReminder eksisterer deretter satt forfallsdato til forfallsdato theReminder satt theEntry å reminderName & linjematingen & forfallsdato annet satt theEntry å reminderName slutten hvis satt thelist å thelist & theEntry slutten hvis slutten repeatend fortelle

tilbake thelist som string [/Applescript]

Hvis vi kjører dette, vil vi se en haug med tekst dukker opp i "Resultat" i Applescript Editor . Dette er teksten som er lagret i thelist
, men som du kan se nedenfor, er det litt rotete!
Utgangen av skriptet så langt.

Vi har definitivt fått noen linjeskift spørsmål. La oss rydde det opp skal vi? Det første du trenger å gjøre er å fjerne det retur uttalelse. Det var bare en midlertidig triks for testformål og har ingen plass i vår endelige manuset.

Deretter setter du del av koden under i stedet for retur uttalelse. Det vi gjør her er sykling gjennom elementene i thelist
, legge ekstra linefeeds etter hvert og sette noen stiplede linjer for å gjøre alt ser pen.

[Applescript] gjenta med i fra en til (telling av hvert element av thelist) satt theoutput til (theoutput & element jeg av thelist som streng) & linjematingen & " --- " & linefeedend gjenta [/Applescript]

Nå hvis vi legger i en annen midlertidig retur uttalelse for å sjekke theoutput
, det vi ser er mye penere og lettere å lese. Legg merke til at scriptet håndterer både påminnelser med og uten forfallsdatoer helt fint og skiller hver påminnelse med de streker som jeg nevnte tidligere.
Utgangen av skriptet så langt.
Trinn 8. Send e-post

Vi er nesten ferdig! Nå som vi har en pent formatert liste over gjeldende påminnelser, vi trenger bare å få den informasjonen i en e-post og sende den av.

Det er her ting blir litt vanskelig. Scripting Mail er en ganske quirky oppgave, og du slags trenger bare å vite hvordan det fungerer å gjøre det alle slå ut til høyre. Applescript Dictionary vil
hjelp, men ting er ikke så enkelt som de er i andre apps så føler ikke motet hvis du blir forvirret.

Den grunnleggende prosessen er som følger. Først må du sette en variabel for å lage en ny melding som du tildele et sett med egenskaper (synlig, avsender, emne og innhold). Så, du faktisk sette i gang en forteller blokk på Hotell som variabel (som er den nye utgående melding) og lage en ny mottaker. Da har du selvfølgelig sende meldingen. Her er hva dette ser ut i praksis:

[Applescript] - Send Emailtell søknad " Mail " aktivere satt theMessage å lage ny utgående meldingen med egenskaper {synlige: true, avsender: " [email protected]"~~V;, emne: thedate, innhold: theoutput} fortelle theMessage lage ny til mottaker med egenskaper {adresse: " recipientemail @ gmail Com "} send slutten tellend fortelle [/Applescript]

Legg merke til at vi har en sender og en mottaker her. Du kan gjøre disse samme e-post hvis du ønsker å sende meldingen til deg selv, eller kanskje du ønsker å inkludere flere gruppemedlemmer, slik at du kan bruke denne daglige e-post for å holde alle på oppgaven. Det er opp til deg!

Vi har også et motiv med datoen i det som utnytter vår thedate
variabel fra før. Innholdet i meldingen er satt til theoutput
slik det vil se ut akkurat som det vi så i våre tester.

Vår script er nå ferdig. Bare for å være sikker på at du har alt, her er den fullstendige ting:

[Applescript] satt thedate til " Påminnelser for " & dato streng av (dagens dato) satt theEntry til " " satt thelist til {} satt theoutput til " "

forteller programmet " påminnelser " gjenta med jeg fra en til (telling av hver påminnelse om liste " påminnelser ")

- sett variabler satt theReminder til påminnelse jeg av liste " påminnelser " satt reminderName til navnet på theReminder

- er fullført? hvis theReminder ikke er fullført så --has forfallsdato? hvis forfall theReminder eksisterer deretter satt forfallsdato til forfallsdato theReminder satt theEntry å reminderName & linjematingen & forfallsdato annet satt theEntry å reminderName slutten hvis satt thelist å thelist & theEntry slutten hvis slutten repeatend fortelle

gjenta med i fra en til (telling av hvert element av thelist) satt theoutput til (theoutput & element jeg av thelist som streng) & linjematingen & " --- " & linefeedend gjenta

- Send Emailtell søknad " Mail " aktivere satt theMessage å lage ny utgående meldingen med egenskaper {synlige: true, avsender: " [email protected]"~~V;, emne: thedate, innhold: theoutput} fortelle theMessage lage ny til mottaker med egenskaper {adresse: " recipientemail @ gmail Com "} send slutten tellend fortelle [/Applescript]

Trinn 9. Planlegge Script

Nå som manuset er helt funksjonell, må vi finne en måte å planlegge det å kjøre regelmessig, sier hver mandag morgen, slik at du kan få en titt på din uke. For å gjøre dette, lagre skriptet som en applikasjon, plassere det hvor som helst på harddisken, og åpne opp Kalender-applikasjonen.

Herfra vil du sannsynligvis ønske å opprette en ny kalender spesielt for automatisert oppgaver (slik at de ikke roter til de andre kalendere). Deretter oppretter du en ny hendelse som gjentar hver mandag. Endelig opprette et varsel for hendelsen som åpner en fil og velge skriptet søknaden.
Planlegge Script i kalenderen.

Med dette på plass, hver mandag kl 8 am, enten jeg er på min datamaskin eller ikke, en e-post vil bli sendt til meg som inneholder mine påminnelser for uken.
Påminnelse Email
Make It Better!

Hvis du har fulgt trinnene hele veien til dette punktet, gratulerer, du bare bygget en awesome liten skript som vil bidra til å holde deg produktiv i år. Nå er det på tide å ta det jeg har gjort og justere den til å passe dine egne behov. Hvordan kan du gjøre det bedre egnet for arbeidsflyten? Anmeldelser