Kako poslati e-poštu s R-a i Gmaila

U jednom trenutku svog R života, vjerojatno ćete htjeti podijeliti rezultate svoje analize s kolegama koji se ne koriste. Postoji puno načina za to. Jedno od najjednostavnijih (i najjeftinijih) slanje rezultata e-poštom.

No, nekako je tužno automatizirati čitav tijek rada analize, samo na kraju ručno izraditi i poslati e-poštu. Srećom, ne morate. Postoji nekoliko R paketa koji vam omogućuju slanje e-pošte izravno iz R skripte. U ovom članku predstavit ću jedan od njih: gmailr Jima Hestera, koji je sada softverski inženjer na RStudio.

Očito će vam trebati Gmail račun koji možete besplatno postaviti ako ga nemate. Zatim, prije nego što budete mogli koristiti taj račun iz R-a, morat ćete ga postaviti za API pristup. Evo kako.

Idite na console.developers.google.com (da, to je poddomena). Ako još nemate razvojni projekt, morat ćete ga stvoriti. 

Na vrhu nadzorne ploče trebali biste vidjeti mogućnost "Omogući API-je i usluge". Kliknite to.

Sharon Machlis,

Dalje ćete htjeti potražiti Gmail API. Kliknite na to, a zatim na Enable. 

Za skriptu R bit će potrebne vjerodajnice, pa kliknite Stvori vjerodajnice u gornjem desnom kutu.

Sharon Machlis

Prema uputama Jima Hestera, trebamo ID klijenta, pa ću odabrati Client ID.

Sharon Machlis,

Sada se traži vrsta aplikacije. Budući da "R skripta" nije ovdje, želim odabrati "Ostalo". Ali svi su radio gumbi sive boje. To je zato što nisam konfigurirao zaslon za pristanak. To je lako propustiti ako ste usredotočeni na odabir radio gumba; gore je desno. Kliknite na to.

Sharon Machlis,

Vaša adresa e-pošte već bi trebala biti u obrascu zaslona za saglasnost. Jedini drugi zahtjev je naziv aplikacije. Možete ga nazvati kako god želite.

Jim kaže da su ostatak zadanih vrijednosti u redu, pa se pomaknite prema dolje i spremite. Sada biste trebali moći odabrati vrstu aplikacije Ostalo, dajte aplikaciji ime i kliknite Stvori.

Tada bi vam konzola trebala dati ID klijenta i tajnu klijenta. Možete ih koristiti dodavanjem u svoje R okruženje ako želite. Ali Jim umjesto toga predlaže preuzimanje datoteke JSON. Možete ga preuzeti u svoj radni direktorij R projekta i zapamtiti ime datoteke koju ste mu dali.

Sharon Machlis,

To završava postavljanje na Googleovoj strani, i napokon je vrijeme za neki R kod. 

Prvo provjerite je li instaliran gmailr paket. Dostupan je na CRAN-u, tako da ga možete instalirati s install.packages("gmailr"). Zatim učitajte paket u svoju skriptu sa library(gmailr).

Prije nego što napravite bilo što drugo, morat ćete postaviti svoju radnu R sesiju za upotrebu preuzete datoteke JSON vjerodajnica. To možete učiniti s use_secret_file()funkcijom i imenom vaše JSON datoteke kao argumentom. Da sam svoju datoteku vjerodajnica JSON nazvao DoMoreWithR.json, naredba bi bila 

use_secret_file("DoMoreWithR.json")

Zapravo je slanje poruke prilično jednostavno.

Za neke uzorke podataka preuzeo sam mjesečne stope nezaposlenosti u SAD-u, a zatim stvorio tekstualni niz pod nazivom latest_msg s informacijama o najnovijoj stopi nezaposlenosti. Imajte na umu da u donjem kodu koristim paket ljepila za sastavljanje niza znakova koji želim za svoju poruku, ali to je zato što to volim raditi na takav način; paste()ili paste0()rade jednako dobro.

U svojoj e-poruci možete upotrijebiti sve podatke generirane R-om. Ako želite slijediti moj, evo koda (trebat će vam instaliran paket pacman):

pacman :: p_load (quantmod, ljepilo, xts, dplyr, ggplot2)
getSymbols ("UNRATE", src = "FRED")

nezaposlenost <- coredata (UNRATE)

month_starting <- indeks (UNRATE)

niz_duljina <- duljina (nezaposlenost)

najnovije_msg <- ljepilo ("Najnovija stopa nezaposlenosti u SAD-u bila je {nezaposlenost [serija_duljina]}, u mjesecu koji započinje {mjesečno_pokretanje [duljina_datoteke]}. To je {nezaposlenost [serija_duljina] - nezaposlenost [duljina_reda] - 1 postotnih bodova u odnosu na prethodnu mjesec.")

Dalje, želim stvoriti MIME objekt e-pošte, a zatim dodati adresu na adresu, adresu s adrese, tekst predmeta i tijelo poruke.

my_email_message%

na ("[email protected]")%>%

od ("[email protected]")%>%

subject ("Moja testna poruka")%>%

tekst_tijelo (najnovije_msg)

Ako to učinite, a zatim provjerite strukturu poruke my_email_message, str(my_text_message)vidjet ćete da se radi o popisu s klasom mime.

Nakon stvaranja objekta MIME poruke možete ga poslati s send_message()funkcijom. Argument je samo ime mog MIME objekta, u ovom slučaju my_email_message. Dakle, potpuna naredba u ovom slučaju je

poslati_poruku (moja_poslata_poruka_)

Kad prvi put pokrenete send_message (), vjerojatno ćete biti upitani želite li predmemorirati autorizaciju između R sesija. Predlažem da kažete da. Kad prvi put pokrenete ovo, u pregledniku ćete također zatražiti da autorizirate svoju R skriptu za upotrebu vašeg Google računa.

Više možete učiniti s gmailrom. Jedna od mogućnosti je stvaranje HTML poruke, tako da oznake možete koristiti podebljano i kurziv.

Ovdje moje tijelo poruke sadrži oznake odlomaka nalik HTML-u i podebljano i kurzivno, a ja ću ih poslati na svoju radnu adresu. 

html_msg_text <- ljepilo ("

Najnovija američka stopa nezaposlenosti bila je

{nezaposlenost [niz_duljina]} , u mjesecu koji započinje

{mjesečno_pokretanje [dužina_datoteke]}. To je to

{nezaposlenost [serija_duljina] - nezaposlenost [serija_dužina - 1]}

postotnih bodova razlika u odnosu na prethodni mjesec.

Podaci američkog Zavoda za statistiku rada.

")
my_html_message%

do ("[email protected]")%>%

od ("[email protected]")%>%

subject ("Moja testna poruka")%>%

html_body (html_msg_text)

poslati_poruku (moja_html_poruka)

Nažalost, ne znam način na koji bih lako mogao uključiti sliku generiranu iz R izravno u tijelo poruke. No, prilično je jednostavno uključiti ga kao privitak. 

Na vrhu donje skripte pretvaram podatke o stopi nezaposlenosti u podatkovni okvir s mjernim podacima od 2000. i kasnije, tako da ga mogu koristiti za ggplot, a zatim spremiti graf u datoteku. 

Ovaj sljedeći dio koda je ono što je važno znati za e-poštu. Prvo, kao i prije, stvaram tekstualni niz za tekst moje poruke s paketom ljepila. Novo je u posljednja dva retka koda koji stvaraju moj MIME objekt. Taj zadnji redak attach_file(),, prilaže moju PNG datoteku uz e-poštu. Redak prije važan je ako želite da se tekst prikazuje u tijelu e-pošte. Bez upotrebe oba teksta text_body()iattach_part() za osnovni tekst, tekst se neće prikazati kad priložite datoteku. Samo nešto za pamćenje.

Tada mogu koristiti istu send_message()funkciju da je pošaljem.

un_df%

filter (pokretanje_mjeseca> = as.Date ("01.01.2000."))%>%

preimenovati (nezaposlenost = UNRATE)

mygraph <- ggplot (un_df, aes (pokretanje_mjeseca, nezaposlenost)) +

geom_line () +

ggtitle ("Mjesečna nezaposlenost u SAD-u") +

xlab ("Mjesec počinje") +

ylab ("")

ggsave("unemployment_graph.png")
msg_text <- glue("The latest US unemployment rate was {unemployment[series_length]}, in the month starting {month_starting[series_length]}. That's {unemployment[series_length] - unemployment[series_length - 1]} percentage points difference from the prior month. A graph of the data since January 2000 is attached.")

message2 %

to("[email protected]") %>%

from("[email protected]") %>%

subject("My text message with attached graph") %>%

text_body(msg_text) %>%

attach_part(msg_text) %>%

attach_file("unemployment_graph.png")

send_message(message2)

Ako želite, možete upotrijebiti funkciju create_draft() za izradu skice poruke na svom Gmail računu ako želite provjeriti kako izgleda prije slanja. U ovom bi slučaju create_draft(message2)stvorio nacrt moje poruke o privitku datoteke.

Ako želite vidjeti kako sve ovo izgleda na djelu, pogledajte videozapis na vrhu ovog članka. A za više R savjeta, idite na stranicu s videozapisima Učini više s R na popisu pjesama ili pogledajte Popis za reprodukciju Uradi više s R YouTubeom.