2024-03-02|閱讀時間 ‧ 約 27 分鐘

R 套件筆記 | 利用 gmailr 套件與設定 gmail 帳號,實現自動化制式郵件

由於工作上會收發大量電子郵件,大部分的信件都是制式的內容,老實說工作初期真的覺得超煩的,雖說只是制式的更換收件人、貼上對應的內容,但是當案件一多不免出現錯誤,也沒辦法專注在信件的內容,淪為一項純粹愚蠢的工作。

gmailr 這個套件可說是把我從信件攻擊中拯救出來,可以用熟悉的 R 語言擺脫那無聊的 paper work,專注在工作本身,將自動生成信件草稿批次產生之後,只要確認信件內容,若有必要進行個別修改就可以寄出,增加工作效率與減少害怕弄錯的心理壓力。

套件安裝與帳號設定

gmailr 套件安裝本身跟一般 R 套件相同,但是 Google 帳號設定有點麻煩,每次要設定新信箱都要想很久外加查半天(不過也是因為我跟 Google API 不熟而且每個帳號也只需要設定一次),需要在 Google Cloud 上操作以下步驟:

  1. 建立新專案,如果是公司 G Suite 帳號可以將位置設定在機構內,若為一般免費的 Google 帳號就設定無機構。
  2. 在專案內搜尋並啟用 Gmail API。
  3. 建立 OAuth 用戶端憑證,應用程式名稱取名似乎有被限制(比如不能出現 "mail" 這個字),支援電子郵件填自己就可以了,應用程式類型選擇電腦版應用程式。
  4. 下載憑證 json 檔,檔名預設很長,我自己習慣命名為 credentials.json。
  5. 如果專案設定無機構的話記得去新增使用者加入自己的信箱,否則執行後會顯示未完成 Google 驗證程序(內部機構則不需進行此步驟)。
  6. 執行 R script,gm_auth() 執行後應自動跳出瀏覽器畫面並詢問存取範圍,一路確認並同意之後,最終會出現 "Authentication complete. Please close this page and return to R." 表示帳號連接成功。


rm(list=ls())
#install.packages("gmailr")
library(gmailr)
#path放上下載好的憑證檔案​
gm_auth_configure(path = "YOURPATH/credentials.json")
#可以在 email 放上指定的信箱,或是 = TRUE 在瀏覽器上選擇
gm_auth(email = TRUE ,cache = ".secret")
#Waiting for authentication in browser...
#Press Esc/Ctrl + C to abort
#Authentication complete.


信件搜尋和內容讀取

搜尋指定條件的信件可用於統計或是後續自動化處理,比如某一時間區段收到的信件數量,或是抓取制式信件的固定字串進行後續處理。

##搜尋符合的信
# search 與 gmail ​搜尋功能相同
#num_results 預設值為 100
msgs = gm_messages(search = "搜尋關鍵字 after:2023/01/01 before:2023/12/31",
num_results=1000)
#取出信件 id​
id=gm_id(msgs)

#利用 id 讀取第 i 封信件內容​
x=gm_message(id[i] ,user_id = "me")
#信件日期​
gm_date(x)
#信件標題​
gm_subject(x)
#信件內容(gm_body有時候沒辦法讀取到信件內容,可能是編碼問題?)
gm_body(x)
gmailr:::base64url_decode_to_char(x$payload$parts[[1]]$parts[[1]]$body$data)
#附檔下載
gm_save_attachments(x)


編寫信件

程式可以設定收件人、附件,搭配 html 語法撰寫郵件內容,依照需求可以選擇將郵件放在草稿匣或是直接寄出,搭配迴圈和資料表就可以大量產出信件。

 email <- gm_mime() %>%
#收件者信箱​
gm_to("TOMAIL") %>%
#副本收件者
gm_cc("CCMAIL") %>%
#寄件者信箱
gm_from("MYMAIL") %>%
#寫出中文標題需要一些轉換
gm_subject(paste0("=?utf-8?B?",
base64enc::base64encode(charToRaw(enc2utf8("信件標題"))), "?=")) %>%
#信件內容
gm_html_body("MAIL") %>%
#附件
gm_attach_file("ATTACHFILE")
#撰寫草稿
gm_create_draft(email)
#直接寄出
gm_send_message(email)



分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.