Jak wysyłać e-maile z R i Gmaila

W pewnym momencie swojego życia R prawdopodobnie zechcesz podzielić się wynikami swojej analizy z kolegami, którzy nie używają R. Można to zrobić na wiele sposobów. Jednym z najłatwiejszych (i najtańszych) jest wysyłanie wyników e-mailem.

Ale to trochę smutne, aby zautomatyzować cały przepływ pracy w zakresie analizy, tylko po to, aby ręcznie stworzyć i wysłać wiadomość e-mail na końcu. Na szczęście nie musisz. Istnieje kilka pakietów języka R, które umożliwiają wysyłanie wiadomości e-mail bezpośrednio ze skryptu języka R. W tym artykule pokażę jeden z nich: gmailr autorstwa Jima Hestera, który jest teraz inżynierem oprogramowania w RStudio.

Oczywiście będziesz potrzebować konta Gmail, które możesz założyć bezpłatnie, jeśli go nie masz. Następnie, zanim będziesz mógł używać tego konta z R, musisz skonfigurować je pod kątem dostępu do interfejsu API. Oto jak.

Wejdź na console.developers.google.com (tak, to jest sub-subdomena). Jeśli nie masz jeszcze projektu deweloperskiego, zostaniesz poproszony o jego utworzenie. 

U góry panelu powinna pojawić się opcja „Włącz interfejsy API i usługi”. Kliknij to.

Sharon Machlis,

Następnie będziesz chciał poszukać interfejsu Gmail API. Kliknij to, a następnie kliknij Włącz. 

Skrypt języka R będzie wymagał poświadczeń, więc kliknij opcję Utwórz dane logowania w prawym górnym rogu.

Sharon Machlis

Zgodnie z instrukcjami Jima Hestera potrzebujemy identyfikatora klienta, więc wybiorę identyfikator klienta.

Sharon Machlis,

Teraz prosi o typ aplikacji. Ponieważ „Skryptu R” nie ma tutaj, chcę wybrać „Inne”. Ale wszystkie przyciski opcji są wyszarzone. Dzieje się tak, ponieważ nie skonfigurowałem ekranu akceptacji. Łatwo to przeoczyć, jeśli koncentrujesz się na wyborach za pomocą przycisków radiowych; jest w prawym górnym rogu. Kliknij na to.

Sharon Machlis,

Twój adres e-mail powinien już znajdować się w formularzu zgody. Jedynym innym wymaganiem jest nazwa aplikacji. Możesz to nazwać, jak chcesz.

Jim mówi, że pozostałe ustawienia domyślne są w porządku, więc przewiń w dół i zapisz. Teraz powinieneś być w stanie wybrać Typ aplikacji Inny, nadać aplikacji nazwę i kliknąć Utwórz.

Konsola powinna wtedy podać identyfikator klienta i klucz tajny. Możesz ich użyć, dodając je do swojego środowiska R, jeśli chcesz. Ale Jim sugeruje zamiast tego pobranie pliku JSON. Możesz pobrać to do katalogu roboczego projektu R i zapamiętać nadaną mu nazwę pliku.

Sharon Machlis,

To kończy konfigurację po stronie Google i wreszcie nadszedł czas na kod R. 

Najpierw upewnij się, że masz zainstalowany pakiet gmailr. Jest dostępny w CRAN, więc możesz go zainstalować z install.packages("gmailr"). Następnie załaduj pakiet do skryptu z rozszerzeniem library(gmailr).

Zanim zrobisz cokolwiek innego, będziesz chciał skonfigurować swoją roboczą sesję R, aby używała pobranego pliku poświadczeń JSON. Możesz to zrobić za pomocą use_secret_file()funkcji i nazwy pliku JSON jako argumentu. Gdybym wywołał mój plik poświadczeń JSON DoMoreWithR.json, polecenie byłoby 

use_secret_file("DoMoreWithR.json")

Właściwie wysyłanie wiadomości jest dość łatwe.

W przypadku niektórych przykładowych danych pobrałem miesięczne stopy bezrobocia w USA, a następnie utworzyłem ciąg tekstowy o nazwie latest_msg z informacjami o ostatniej stopie bezrobocia. Zauważ, że w poniższym kodzie używam pakietu kleju, aby złożyć ciąg znaków, który chcę dla mojej wiadomości, ale to dlatego, że lubię to robić w ten sposób; paste()lub paste0()działają równie dobrze.

W wiadomości e-mail możesz użyć dowolnych danych wygenerowanych przez R. Jeśli chcesz śledzić razem z moim, oto kod (będziesz potrzebować zainstalowanego pakietu pacman):

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

bezrobocie <- coredata (UNRATE)

month_starting <- indeks (UNRATE)

długość_serii <- długość (bezrobocie)

last_msg <- glue ("Ostatnia stopa bezrobocia w USA wyniosła {bezrobocie [długość_serii]}, w miesiącu rozpoczynającym się {month_starting [długość_serii]}. To jest różnica {bezrobocie [długość_serii] - bezrobocie [długość_serii - 1]} punktów procentowych w stosunku do poprzedniego miesiąc.")

Następnie chcę utworzyć obiekt e-mail MIME, a następnie dodać adres do, adres nadawcy, tekst tematu i treść mojej wiadomości.

my_email_message%

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

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

temat ("Moja wiadomość testowa")%>%

text_body (latest_msg)

Jeśli to zrobisz, a następnie sprawdzisz strukturę my_email_message str(my_text_message), zobaczysz, że jest to lista z klasą mime.

Po utworzeniu obiektu wiadomości MIME możesz wysłać go za pomocą send_message()funkcji. Argumentem jest po prostu nazwa mojego obiektu MIME, w tym przypadku my_email_message. Więc pełne polecenie w tym przypadku to

send_message (my_email_message)

Kiedy uruchomisz send_message () po raz pierwszy, prawdopodobnie zostaniesz zapytany, czy chcesz buforować autoryzację między sesjami języka R. Proponuję powiedzieć tak. Przy pierwszym uruchomieniu w przeglądarce zostanie również wyświetlona prośba o autoryzację skryptu R do korzystania z konta Google.

Dzięki Gmailowi ​​możesz zrobić więcej. Jedną z opcji jest utworzenie wiadomości HTML, aby można było używać znaczników, takich jak pogrubienie i kursywa.

Tutaj treść mojej wiadomości zawiera znaki akapitu podobne do HTML oraz pogrubienie i kursywę, i wyślę ją na mój adres służbowy. 

html_msg_text <- klej ("

Ostatnia stopa bezrobocia w USA wynosiła

{bezrobocie [długość_serii]} w rozpoczynającym się miesiącu

{month_starting [series_length]}. To jest

{bezrobocie [długość_serii] - bezrobocie [długość_serii - 1]}

różnica punktów procentowych w porównaniu z poprzednim miesiącem.

Dane z US Bureau of Labor Statistics.

")
my_html_message%

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

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

temat ("Moja wiadomość testowa")%>%

html_body (html_msg_text)

send_message (my_html_message)

Niestety nie znam sposobu na łatwe umieszczenie obrazu wygenerowanego z języka R bezpośrednio w treści wiadomości. Ale dołączenie jednego jako załącznika jest dość proste. 

W górnej części poniższego skryptu przekształcam dane dotyczące stopy bezrobocia w ramkę danych z metrykami z roku 2000 i później, więc mogę użyć ggplot do sporządzenia wykresu, a następnie zapisać wykres do pliku. 

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)

Jeśli chcesz, możesz skorzystać z funkcji create_draft() tworzenia wersji roboczej wiadomości na swoim koncie Gmail, jeśli chcesz sprawdzić, jak to wygląda przed wysłaniem. W tym przypadku create_draft(message2)utworzy kopię roboczą mojej wiadomości z załącznikiem.

Jeśli chcesz zobaczyć, jak to wszystko wygląda w akcji, obejrzyj wideo u góry tego artykułu. Aby uzyskać więcej wskazówek dotyczących języka R, przejdź na stronę wideo „Zrób więcej z językiem R” lub zapoznaj się z listą odtwarzania „Zrób więcej z językiem R” na YouTube.