由於工作上會收發大量電子郵件,大部分的信件都是制式的內容,老實說工作初期真的覺得超煩的,雖說只是制式的更換收件人、貼上對應的內容,但是當案件一多不免出現錯誤,也沒辦法專注在信件的內容,淪為一項純粹愚蠢的工作。
gmailr 這個套件可說是把我從信件攻擊中拯救出來,可以用熟悉的 R 語言擺脫那無聊的 paper work,專注在工作本身,將自動生成信件草稿批次產生之後,只要確認信件內容,若有必要進行個別修改就可以寄出,增加工作效率與減少害怕弄錯的心理壓力。
gmailr 套件安裝本身跟一般 R 套件相同,但是 Google 帳號設定有點麻煩,每次要設定新信箱都要想很久外加查半天(不過也是因為我跟 Google API 不熟而且每個帳號也只需要設定一次),需要在 Google Cloud 上操作以下步驟:
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)