R 및 Gmail에서 이메일을 보내는 방법

R 생활의 어느 시점에서 분석 결과를 R을 사용하지 않는 동료와 공유하고 싶을 것입니다. 이를 수행하는 방법에는 여러 가지가 있습니다. 가장 쉽고 저렴한 방법 중 하나는 결과를 이메일로 보내는 것입니다.

그러나 전체 분석 워크 플로우를 자동화하는 것은 슬프지만 마지막에 이메일을 수동으로 작성하고 보내는 것뿐입니다. 다행히도 그럴 필요가 없습니다. R 스크립트에서 직접 이메일을 보낼 수있는 여러 R 패키지가 있습니다. 이 기사에서는 RStudio의 소프트웨어 엔지니어 인 Jim Hester의 gmailr 중 하나를 시연합니다.

당연히 Gmail 계정이 필요하며 계정이없는 경우 무료로 설정할 수 있습니다. 그런 다음 R에서 해당 계정을 사용하기 전에 API 액세스를 위해 설정해야합니다. 방법은 다음과 같습니다.

console.developers.google.com으로 이동합니다 (예, 하위 도메인 임). 아직 개발자 프로젝트가없는 경우 새로 만들라는 메시지가 표시됩니다. 

대시 보드 상단에 'API 및 서비스 활성화'옵션이 표시됩니다. 그것을 클릭하십시오.

Sharon Machlis,

다음으로 Gmail API를 검색합니다. 그것을 클릭 한 다음 사용을 클릭하십시오. 

R 스크립트에는 자격 증명이 필요하므로 오른쪽 상단에서 자격 증명 만들기를 클릭합니다.

샤론 마클리스

Jim Hester의 지침에 따라 클라이언트 ID가 필요하므로 클라이언트 ID를 선택하겠습니다.

Sharon Machlis,

이제 애플리케이션 유형을 요청합니다. 여기에 "R 스크립트"가 없기 때문에 "기타"를 선택하고 싶습니다. 그러나 모든 라디오 버튼은 회색으로 표시됩니다. 동의 화면을 구성하지 않았기 때문입니다. 라디오 버튼 선택에 집중한다면 놓치기 쉽습니다. 오른쪽 상단에 있습니다. 그것을 클릭하십시오.

Sharon Machlis,

귀하의 이메일 주소는 이미 동의 화면 양식에 있어야합니다. 유일한 다른 요구 사항은 응용 프로그램의 이름입니다. 원하는대로 부를 수 있습니다.

Jim은 나머지 기본값은 괜찮다고 말 했으므로 아래로 스크롤하여 저장하십시오. 이제 응용 프로그램 유형 기타를 선택하고 응용 프로그램에 이름을 지정한 다음 만들기를 클릭 할 수 있습니다.

그러면 콘솔에서 클라이언트 ID와 클라이언트 암호를 제공해야합니다. 원하는 경우 R 환경에 추가하여 사용할 수 있습니다. 그러나 Jim은 대신 JSON 파일을 다운로드 할 것을 제안합니다. 이를 R 프로젝트 작업 디렉토리에 다운로드하고 지정한 파일 이름을 기억할 수 있습니다.

Sharon Machlis,

이것으로 Google 측에서 설정이 완료되고 드디어 R 코드가 필요합니다. 

먼저 gmailr 패키지가 설치되어 있는지 확인하십시오. CRAN에서 사용할 수 있으므로 install.packages("gmailr"). 그런 다음 스크립트에 library(gmailr).

다른 작업을 수행하기 전에 다운로드 한 JSON 자격 증명 파일을 사용하도록 작업 R 세션을 설정해야합니다. use_secret_file()함수와 JSON 파일의 이름을 인수로 사용하여 이를 수행 할 수 있습니다 . JSON 자격 증명 파일 DoMoreWithR.json을 호출하면 명령은 다음과 같습니다. 

use_secret_file("DoMoreWithR.json")

실제로 메시지를 보내는 것은 상당히 쉽습니다.

일부 샘플 데이터를 위해 월별 미국 실업률을 다운로드 한 다음 최신 실업률에 대한 정보가 포함 된 latest_msg라는 텍스트 문자열을 만들었습니다. 아래 코드에서 풀 패키지를 사용하여 메시지에 원하는 문자열을 조합하지만, 그 이유는 제가 그렇게하는 것을 좋아하기 때문입니다. paste()또는 paste0()똑같이 잘 작동합니다.

전자 메일 메시지에 원하는 R 생성 데이터를 사용할 수 있습니다. 저를 따라하고 싶다면 여기 코드가 있습니다 (팩맨 패키지가 설치되어 있어야합니다).

팩맨 :: p_load (quantmod, glue, xts, dplyr, ggplot2)
getSymbols ( "UNRATE", src = "FRED")

실업률 <-coredata (UNRATE)

월 _ 시작 <-인덱스 (UNRATE)

series_length <-길이 (실업)

latest_msg <-glue ( "최근 미국 실업률은 {month_starting [series_length]}부터 시작된 달의 {unemployment [series_length]}였습니다. 이는 {unemployment [series_length]-unemployment [series_length-1]} 퍼센트 포인트 차이입니다. 달.")

다음으로 MIME 전자 메일 개체를 만든 다음받는 사람 주소, 보낸 사람 주소, 제목 텍스트 및 메시지 본문을 추가하려고합니다.

my_email_message %

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

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

subject ( "내 테스트 메시지") %> %

text_body (latest_msg)

이렇게 한 다음 my_email_message의 구조를 확인하면 str(my_text_message)클래스가 mime.

MIME 메시지 개체를 만든 후 send_message()함수 와 함께 보낼 수 있습니다 . 인수는 내 MIME 개체의 이름입니다 (이 경우 my_email_message). 따라서이 경우 전체 명령은

send_message (my_email_message)

send_message ()를 처음 실행할 때 R 세션간에 인증을 캐시 할 것인지 묻는 메시지가 표시 될 수 있습니다. 예라고 대답하는 것이 좋습니다. 이것을 처음 실행하면 브라우저에서 Google 계정을 사용하도록 R 스크립트를 승인하라는 메시지가 표시됩니다.

gmailr로 할 수있는 일이 더 있습니다. 한 가지 옵션은 HTML 메시지를 만드는 것이므로 굵게 및 기울임 꼴과 같은 마크 업을 사용할 수 있습니다.

여기에 내 메시지 본문에는 HTML과 유사한 단락 기호와 굵게 및 기울임 꼴이 포함되어 있으며 내 직장 주소로 보내겠습니다. 

html_msg_text <-glue ( "

최근 미국 실업률은

{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)

원하는 경우 create_draft() Gmail 계정에서 임시 메시지를 작성하는 기능 을 사용할 수 있습니다. 메시지를 보내기 전에 어떻게 보이는지 확인하려면. 이 경우 create_draft(message2)파일 첨부 메시지의 초안을 만듭니다.

이 모든 것이 어떻게 작동하는지보고 싶다면이 기사 상단의 비디오를 확인하십시오. 더 많은 R 팁을 보려면 R으로 더 많은 작업 수행 비디오 페이지로 이동하거나 R로 더 많은 작업 수행 YouTube 재생 목록을 확인하세요.