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

閱讀時間約 5 分鐘

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

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)



7會員
34Content count
寫一些自己覺得有趣的事情
留言0
查看全部
發表第一個留言支持創作者!
金吉的沙龍 的其他內容
最近遇到了一個思考有點久的問題,如何將數值不同的樣品進行分組,同時每組的總和不能超越固定的上限值,且某些樣品不能被分在同一組。雖然規則並不困難,但是人工進行分組卻頗花時間,是不是有可能自動化處理這個步驟?如果有可能的話想要產出多個不同的分組方法,最後由人工選擇最佳的分組方式。
最近遇到了一個思考有點久的問題,如何將數值不同的樣品進行分組,同時每組的總和不能超越固定的上限值,且某些樣品不能被分在同一組。雖然規則並不困難,但是人工進行分組卻頗花時間,是不是有可能自動化處理這個步驟?如果有可能的話想要產出多個不同的分組方法,最後由人工選擇最佳的分組方式。
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
踏出舒適圈學習新事物,犯錯(低效執行)是必經的過程,犯錯後,重要的是要及時意識到錯誤,並將認知和行為修正(有效執行),繼續走向目的地,那麼,我該如何知道自己已經偏離軌道了呢? 若要發現錯誤,要保持開放的態度和成長心態,以便在遇到挑戰和新資訊時,能夠及時察覺調整策略。
Thumbnail
明天要出門旅行,為了讓一切順利,我請家人向ChatGPT詢問相關問題。憑藉著Chrome插件「Voice Control for ChatGPT」,我們能以語音互動的方式與ChatGPT交流。 家人問道:「我要出去旅行到馬來西亞和新加坡,請問需要準備些什麼?」得到ChatGPT的回答後,我們發現原來
Thumbnail
這次跟其他三位繪師一起參與速溶明信片周邊製作,我本身很喜歡傳統文化,對於能夠透過圖解去傳遞24節氣的資訊給大家,感到十分開心。 這次製作比較特別的地方:為了區分季節,顏色有限定在某些色票上,有人可以知道是那些色票嗎 :D
Thumbnail
以前聽過設計是一種符號,是一種溝通語言,最近參加活動,我才理解到「語言」的意義。 最近在製作圖解明信片,它可以採用的配色細節超過我過去的認知。( 應該說,我明明就不是平面設計師,到底為什麼在做平面設計 ) 以前我製作簡報或圖卡時,會使用網路上的圖標,但頂多小小修改上面的填色,或直接選擇適合的顏色;當
Thumbnail
初學GGplot2的時候,一直很希望有一種懶人模板,告訴我什麼指令會控制什麼就好,這樣我就複製貼上然後改一改就行了。 雖然距離摸熟GGplot還差得遠,但希望這些留下摸索的紀錄。 如果可以節省到誰的時間那就太好了。
昨晚看了知識星球創辦人的星球日誌,裏頭也寫些開發思考,甚至不是文章,又看到《學習學習》提倡的寫做合一,我決定繼續寫行動日誌,用寫來整理思考,用做來完善行動,透過寫與做達成學習閉環。 在打這篇文章時,剛好看到別人要做啥做啥的,深刻體驗到,要特別把重點放在自己身上,別人做的事,是別人的事,我需要做的是,
Thumbnail
在Rstudio中對於需要較多字元表示的數值,如:123000000、0.000000123,都會改用科學記號表示,如下圖: 此情況可透過 對於scipen可以等於99或999都可以,可當作顯示字元的上限,結果如下圖 因此,若想回到原本的設定,可透過 基本上數值的設定很少會調用,通常都是在圖表呈現上
Thumbnail
紐約時報曾經於2018年12月製作過「How Does Your State Make Electricity?」專題,探討從2001-2017年美國各州電力系統結構變化。本篇目的旨在仿照紐約時報的做法,也製作一個屬於台灣的電力結構轉變資訊圖表。
Thumbnail
現在這個時代,不管你是讀什麼科系,多多少少要會一點語言程式,用來做大量分析數據,或是幫你完成千篇一律重複性又高的工作,讓你有更多寶貴的時間去做更重要的想法發想、討論,重複性數據分析就交給電腦程式去執行,魯叔從大學到現在大概使用過Fortran(77、95、fixed、free,是我博班到博後使用
Thumbnail
對資料科學家或數據分析師來說,資料量太大、電腦效能不足一直都是個痛,經常要小心翼翼地觀察記憶體使用率是不是快爆炸。然而,就我的觀察,一樣都是撰寫程式,資料科學工作者對於程式碼乾淨、易懂、高效率的追求似乎比其他工程師來得低。(或是我的樣本數不足,以偏概全)
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
踏出舒適圈學習新事物,犯錯(低效執行)是必經的過程,犯錯後,重要的是要及時意識到錯誤,並將認知和行為修正(有效執行),繼續走向目的地,那麼,我該如何知道自己已經偏離軌道了呢? 若要發現錯誤,要保持開放的態度和成長心態,以便在遇到挑戰和新資訊時,能夠及時察覺調整策略。
Thumbnail
明天要出門旅行,為了讓一切順利,我請家人向ChatGPT詢問相關問題。憑藉著Chrome插件「Voice Control for ChatGPT」,我們能以語音互動的方式與ChatGPT交流。 家人問道:「我要出去旅行到馬來西亞和新加坡,請問需要準備些什麼?」得到ChatGPT的回答後,我們發現原來
Thumbnail
這次跟其他三位繪師一起參與速溶明信片周邊製作,我本身很喜歡傳統文化,對於能夠透過圖解去傳遞24節氣的資訊給大家,感到十分開心。 這次製作比較特別的地方:為了區分季節,顏色有限定在某些色票上,有人可以知道是那些色票嗎 :D
Thumbnail
以前聽過設計是一種符號,是一種溝通語言,最近參加活動,我才理解到「語言」的意義。 最近在製作圖解明信片,它可以採用的配色細節超過我過去的認知。( 應該說,我明明就不是平面設計師,到底為什麼在做平面設計 ) 以前我製作簡報或圖卡時,會使用網路上的圖標,但頂多小小修改上面的填色,或直接選擇適合的顏色;當
Thumbnail
初學GGplot2的時候,一直很希望有一種懶人模板,告訴我什麼指令會控制什麼就好,這樣我就複製貼上然後改一改就行了。 雖然距離摸熟GGplot還差得遠,但希望這些留下摸索的紀錄。 如果可以節省到誰的時間那就太好了。
昨晚看了知識星球創辦人的星球日誌,裏頭也寫些開發思考,甚至不是文章,又看到《學習學習》提倡的寫做合一,我決定繼續寫行動日誌,用寫來整理思考,用做來完善行動,透過寫與做達成學習閉環。 在打這篇文章時,剛好看到別人要做啥做啥的,深刻體驗到,要特別把重點放在自己身上,別人做的事,是別人的事,我需要做的是,
Thumbnail
在Rstudio中對於需要較多字元表示的數值,如:123000000、0.000000123,都會改用科學記號表示,如下圖: 此情況可透過 對於scipen可以等於99或999都可以,可當作顯示字元的上限,結果如下圖 因此,若想回到原本的設定,可透過 基本上數值的設定很少會調用,通常都是在圖表呈現上
Thumbnail
紐約時報曾經於2018年12月製作過「How Does Your State Make Electricity?」專題,探討從2001-2017年美國各州電力系統結構變化。本篇目的旨在仿照紐約時報的做法,也製作一個屬於台灣的電力結構轉變資訊圖表。
Thumbnail
現在這個時代,不管你是讀什麼科系,多多少少要會一點語言程式,用來做大量分析數據,或是幫你完成千篇一律重複性又高的工作,讓你有更多寶貴的時間去做更重要的想法發想、討論,重複性數據分析就交給電腦程式去執行,魯叔從大學到現在大概使用過Fortran(77、95、fixed、free,是我博班到博後使用
Thumbnail
對資料科學家或數據分析師來說,資料量太大、電腦效能不足一直都是個痛,經常要小心翼翼地觀察記憶體使用率是不是快爆炸。然而,就我的觀察,一樣都是撰寫程式,資料科學工作者對於程式碼乾淨、易懂、高效率的追求似乎比其他工程師來得低。(或是我的樣本數不足,以偏概全)