Cara menghantar e-mel dari R dan Gmail

Pada satu ketika dalam kehidupan R anda, anda mungkin ingin berkongsi hasil analisis anda dengan rakan sekerja yang tidak menggunakan R. Terdapat banyak cara untuk melakukan ini. Salah satu yang paling mudah (dan paling murah) adalah menghantar e-mel hasil anda.

Tetapi agak menyedihkan untuk mengautomasikan keseluruhan aliran kerja analisis anda, hanya untuk membuat dan menghantar e-mel secara manual pada akhirnya. Nasib baik, anda tidak perlu. Terdapat beberapa pakej R yang membolehkan anda menghantar e-mel terus dari skrip R. Dalam artikel ini, saya akan demo salah satunya: gmailr oleh Jim Hester, yang kini menjadi jurutera perisian di RStudio.

Jelas sekali, anda memerlukan akaun Gmail, yang boleh disediakan secara percuma jika anda tidak memilikinya. Kemudian, sebelum anda dapat menggunakan akaun tersebut dari R, anda perlu menyiapkannya untuk akses API. Ini caranya.

Pergi ke console.developers.google.com (ya, itu adalah sub-subdomain). Sekiranya anda belum mempunyai projek pembangun, anda akan diminta untuk membuatnya. 

Di bahagian atas papan pemuka, anda akan melihat pilihan untuk "Aktifkan API dan Perkhidmatan." Klik itu.

Sharon Machlis,

Seterusnya anda ingin mencari API Gmail. Klik pada itu dan kemudian klik Aktifkan. 

Skrip R memerlukan kelayakan, jadi klik Buat Kredensial di kanan atas.

Sharon Machlis

Menurut arahan Jim Hester, kami memerlukan ID pelanggan, jadi saya akan memilih ID Pelanggan.

Sharon Machlis,

Sekarang ia meminta jenis aplikasi. Oleh kerana "R script" tidak ada di sini, saya ingin memilih "Other". Tetapi semua butang radio berwarna kelabu. Ini kerana saya belum mengkonfigurasi skrin persetujuan. Perkara itu mudah dilupakan jika anda memfokuskan diri pada pilihan butang radio; ia berada di bahagian atas kanan. Klik pada itu.

Sharon Machlis,

Alamat e-mel anda mestilah dalam borang skrin persetujuan. Satu-satunya syarat lain adalah nama untuk aplikasi tersebut. Anda boleh menyebutnya apa sahaja yang anda suka.

Jim mengatakan lalai yang lain baik-baik saja, jadi tatal ke bawah dan simpan. Sekarang anda harus dapat memilih Jenis aplikasi Lain, beri nama aplikasi, dan klik Buat.

Konsol kemudiannya harus memberikan anda ID pelanggan dan rahsia pelanggan. Anda boleh menggunakannya dengan menambahkannya ke lingkungan R jika anda mahu. Tetapi Jim mencadangkan memuat turun fail JSON sebagai gantinya. Anda boleh memuat turunnya ke direktori kerja projek R anda, dan ingat nama fail yang anda berikan.

Sharon Machlis,

Itu selesai persediaan di sisi Google, dan akhirnya tiba masanya untuk beberapa kod R 

Pertama, pastikan anda memasang pakej gmailr. Ia tersedia di CRAN, jadi anda boleh memasangnya install.packages("gmailr"). Kemudian muatkan pakej dalam skrip anda dengan library(gmailr).

Sebelum melakukan perkara lain, anda perlu mengatur sesi R anda untuk menggunakan fail kelayakan JSON yang anda muat turun. Anda boleh melakukannya dengan use_secret_file()fungsi, dan nama fail JSON anda sebagai argumen. Sekiranya saya memanggil fail kelayakan JSON saya DoMoreWithR.json, arahannya adalah 

use_secret_file("DoMoreWithR.json")

Sebenarnya menghantar mesej agak mudah.

Untuk beberapa sampel data, saya memuat turun kadar pengangguran AS bulanan dan kemudian membuat rentetan teks yang disebut latest_msg dengan maklumat mengenai kadar pengangguran terkini. Perhatikan bahawa dalam kod di bawah ini saya menggunakan pakej gam untuk menyusun rentetan watak yang saya mahukan untuk mesej saya, tetapi itu kerana saya suka melakukannya dengan cara itu; paste()atau paste0()bekerja dengan baik.

Anda boleh menggunakan data yang dihasilkan R yang anda mahukan dalam mesej e-mel anda. Sekiranya anda ingin mengikuti dengan saya, inilah kodnya (anda memerlukan pacman pakej yang dipasang):

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

pengangguran <- coredata (UNRATE)

bulan_mulakan <- indeks (TINGKATKAN)

seri_panjang <- panjang (pengangguran)

terkini_msg <- gam ("Kadar pengangguran AS yang terbaru ialah {pengangguran [siri_length]}, pada bulan bermula {month_starting [series_length]}. Itulah {pengangguran [siri_length] - pengangguran [seri_length - 1]} perbezaan peratusan mata dari sebelumnya bulan. ")

Seterusnya, saya ingin membuat objek e-mel MIME, dan kemudian menambahkan alamat ke alamat, alamat dari, teks subjek, dan isi mesej saya.

my_email_message%

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

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

subjek ("Mesej ujian saya")%>%

text_body (terbaru_msg)

Sekiranya anda melakukan ini dan kemudian memeriksa struktur pesanan_mesej_saya dengan str(my_text_message)anda, anda akan melihat bahawa itu senarai dengan kelas mime.

After creating your MIME message object, you can send it with the send_message() function. The argument is just the name of my MIME object, in this case my_email_message. So the full command in this case is

send_message(my_email_message)

When you run send_message() the first time, you’ll likely be asked if you want to cache authorization between R sessions. I suggest you say yes. The first time you run this, you’ll also be asked in your browser to authorize your R script to use your Google account.

There is more you can do with gmailr. One option is to create an HTML message, so you can use markup like bold and italic.

Here my message body includes HTML-like paragraph marks and bold and italic, and I’ll send it to my work address. 

html_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.

Data from the U.S. Bureau of Labor Statistics.

")
my_html_message %

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

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

subject("My test message") %>%

html_body(html_msg_text)

send_message(my_html_message)

Unfortunately, I don’t know a way to easily include an image generated from R directly in the message body. But it’s pretty straightforward to include one as an attachment. 

At the top of the script below, I’m turning my unemployment rate data into a data frame with metrics from 2000 and later, so I can use ggplot to graph it, and then save the graph to a file. 

This next part of the code is what’s important to know for email, though. First, like before, I’m creating a text string for my message text with the glue package. What’s new is the last two lines of code creating my MIME object. That last line, attach_file(), attaches my PNG file to the email. The line before is important if you want text to show up in the body of the email. Without using both text_body()andattach_part() for the body text, text won’t show up when you attach a file. Just something to remember.

Then I can use the same send_message() function to send it.

un_df %

filter(month_starting >= as.Date("2000-01-01")) %>%

rename(unemployment = UNRATE)

mygraph <- ggplot(un_df, aes(month_starting, unemployment)) +

geom_line() +

ggtitle("US Monthly Unemployment") +

xlab("Month Starting") +

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)

Sekiranya anda mahu, anda boleh menggunakan fungsi tersebut create_draft() untuk membuat draf pesan di akaun Gmail anda, jika anda ingin memeriksa bagaimana rupanya sebelum mengirimkannya. Dalam kes ini, create_draft(message2)akan membuat draf mesej lampiran fail saya.

Sekiranya anda ingin melihat bagaimana semua ini kelihatan dalam tindakan, lihat video di bahagian atas artikel ini. Dan untuk lebih banyak petua R, kunjungi halaman video Do More With R atau lihat senarai main Do More With R YouTube.