Cara mengirim email dari R dan Gmail

Di beberapa titik dalam kehidupan R Anda, Anda mungkin ingin berbagi hasil analisis Anda dengan kolega yang tidak menggunakan R. Ada banyak cara untuk melakukannya. Salah satu cara termudah (dan paling murah) adalah mengirimkan hasil Anda lewat email.

Namun agak menyedihkan untuk mengotomatiskan seluruh alur kerja analisis Anda, hanya untuk membuat dan mengirim email secara manual di bagian akhir. Untungnya, Anda tidak perlu melakukannya. Ada beberapa paket R yang memungkinkan Anda mengirim email langsung dari skrip R. Dalam artikel ini, saya akan mendemonstrasikan salah satunya: gmailr oleh Jim Hester, yang sekarang menjadi insinyur perangkat lunak di RStudio.

Tentunya, Anda memerlukan akun Gmail, yang dapat disiapkan secara gratis jika Anda tidak memilikinya. Kemudian, sebelum Anda dapat menggunakan akun itu dari R, Anda harus mengaturnya untuk akses API. Begini caranya.

Buka console.developers.google.com (ya, itu sub-subdomain). Jika Anda belum memiliki proyek pengembang, Anda akan diminta untuk membuatnya. 

Di bagian atas dasbor Anda, Anda akan melihat pilihan untuk "Aktifkan API dan Layanan". Klik itu.

Sharon Machlis,

Selanjutnya Anda akan ingin mencari API Gmail. Klik itu dan kemudian klik Aktifkan. 

Skrip R akan membutuhkan kredensial, jadi klik Buat Kredensial di kanan atas.

Sharon Machlis

Menurut petunjuk Jim Hester, kami memerlukan ID klien, jadi saya akan memilih ID Klien.

Sharon Machlis,

Sekarang menanyakan jenis aplikasi. Karena "Skrip R" tidak ada di sini, saya ingin memilih "Lainnya". Tapi semua tombol radio berwarna abu-abu. Itu karena saya belum mengonfigurasi layar persetujuan. Itu mudah terlewatkan jika Anda berfokus pada pilihan tombol radio; itu di kanan atas. Klik itu.

Sharon Machlis,

Alamat email Anda harus sudah ada di formulir layar persetujuan. Satu-satunya persyaratan lainnya adalah nama untuk aplikasi tersebut. Anda bisa menyebutnya apapun yang Anda suka.

Jim mengatakan default lainnya baik-baik saja, jadi gulir ke bawah dan simpan. Sekarang Anda dapat memilih Jenis aplikasi Lainnya, beri nama aplikasi, dan klik Buat.

Konsol kemudian akan memberi Anda ID klien dan rahasia klien. Anda dapat menggunakannya dengan menambahkannya ke lingkungan R Anda jika Anda mau. Tetapi Jim menyarankan untuk mengunduh file JSON sebagai gantinya. Anda dapat mendownloadnya ke direktori kerja proyek R Anda, dan mengingat nama file yang Anda berikan.

Sharon Machlis,

Itu menyelesaikan penyiapan di sisi Google, dan akhirnya saatnya untuk beberapa kode R. 

Pertama, pastikan Anda sudah menginstal paket gmailr. Ini tersedia di CRAN, jadi Anda dapat menginstalnya dengan install.packages("gmailr"). Kemudian muat paket dalam skrip Anda dengan library(gmailr).

Sebelum melakukan hal lain, Anda ingin mengatur sesi kerja R Anda untuk menggunakan file kredensial JSON yang Anda unduh. Anda dapat melakukannya dengan use_secret_file()fungsi, dan nama file JSON Anda sebagai argumen. Jika saya memanggil file kredensial JSON saya DoMoreWithR.json, perintahnya adalah 

use_secret_file("DoMoreWithR.json")

Sebenarnya mengirim pesan itu cukup mudah.

Untuk beberapa contoh data, saya mengunduh tingkat pengangguran bulanan AS dan kemudian membuat string teks yang disebut latest_msg dengan info tentang tingkat pengangguran terbaru. Perhatikan bahwa dalam kode di bawah ini saya menggunakan paket glue untuk merakit string karakter yang saya inginkan untuk pesan saya, tetapi itu karena saya suka melakukannya dengan cara itu; paste()atau paste0()bekerja sama baiknya.

Anda dapat menggunakan data yang dihasilkan R yang Anda inginkan dalam pesan email Anda. Jika Anda ingin mengikuti saya, berikut kodenya (Anda harus menginstal paket pacman):

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

pengangguran <- coredata (UNRATE)

month_starting <- index (UNRATE)

series_length <- length (pengangguran)

latest_msg <- glue ("Tingkat pengangguran AS terbaru adalah {pengangguran [series_length]}, di bulan mulai {month_starting [series_length]}. Itu berarti {pengangguran [series_length] - pengangguran [series_length - 1]} persentase poin perbedaan dari sebelumnya bulan.")

Selanjutnya, saya ingin membuat objek email MIME, dan kemudian menambahkan alamat ke, alamat dari, teks subjek, dan isi pesan saya.

my_email_message%

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

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

subjek ("Pesan pengujian saya")%>%

text_body (latest_msg)

Jika Anda melakukan ini dan kemudian memeriksa struktur my_email_message dengan str(my_text_message)Anda akan melihat bahwa itu adalah daftar dengan kelas mime.

Setelah membuat objek pesan MIME Anda, Anda dapat mengirimkannya dengan send_message()fungsi. Argumennya hanyalah nama objek MIME saya, dalam hal ini my_email_message. Jadi perintah lengkap dalam hal ini adalah

send_message (pesan_saya_saya)

Saat Anda menjalankan send_message () pertama kali, Anda mungkin akan ditanya apakah Anda ingin menyimpan cache otorisasi di antara sesi R. Saya sarankan Anda mengatakan ya. Pertama kali Anda menjalankan ini, Anda juga akan diminta di browser Anda untuk mengotorisasi skrip R Anda untuk menggunakan akun Google Anda.

Ada banyak hal yang dapat Anda lakukan dengan gmailr. Salah satu opsinya adalah membuat pesan HTML, sehingga Anda dapat menggunakan markup seperti cetak tebal dan miring.

Di sini badan pesan saya menyertakan tanda paragraf seperti HTML dan cetak tebal serta miring, dan saya akan mengirimkannya ke alamat kantor saya. 

html_msg_text <- glue ("

Tingkat pengangguran AS terbaru adalah

{pengangguran [series_length]} , di bulan mulai

{month_starting [series_length]}. Begitulah

{pengangguran [series_length] - pengangguran [series_length - 1]}

persentase poin perbedaan dari bulan sebelumnya.

Data dari Biro Statistik Tenaga Kerja AS.

")
my_html_message%

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

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

subjek ("Pesan pengujian saya")%>%

html_body (html_msg_text)

send_message (my_html_message)

Sayangnya, saya tidak tahu cara untuk dengan mudah menyertakan gambar yang dihasilkan dari R langsung di badan pesan. Tapi cukup mudah untuk memasukkan satu sebagai lampiran. 

Di bagian atas skrip di bawah ini, saya mengubah data tingkat pengangguran menjadi bingkai data dengan metrik dari tahun 2000 dan yang lebih baru, sehingga saya dapat menggunakan ggplot untuk membuat grafik, lalu menyimpan grafik ke 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)

Jika mau, Anda dapat menggunakan fungsi create_draft() untuk membuat pesan draf di akun Gmail Anda, jika Anda ingin memeriksa tampilannya sebelum mengirimnya. Dalam hal ini, create_draft(message2)akan membuat draf pesan lampiran file saya.

Jika Anda ingin melihat bagaimana semua ini terlihat beraksi, lihat video di bagian atas artikel ini. Dan untuk tips R lainnya, buka halaman video Do More With R atau lihat playlist Do More With R YouTube.