R 套件筆記 | gmailr 自動化寄信,跟 chatGPT 聊聊會發現新函數

更新 發佈閱讀 6 分鐘

最近隔壁同事開始使用 chatGPT 修改我以前幫他寫的 code,效果相當驚人,居然解決了我們長久以來無法打破的障礙,因為我也不是專業的工程師,從統計出來都只用 R 寫一些小玩具,牽涉到太複雜的部份像是 HTML 語法,有時候就沒辦法立刻解決,也沒辦法花太多時間研究,有時候就讓乳牛 code 繼續畸形的跑下去,沒辦法解決的困難也只能先放著,工作流程就變成半自動半手動。

raw-image

還記得 chatGPT 剛出來的時候,我就有想要用來修改程式,尤其是當時學習 google app script,結果差強人意,不僅常常寫出文不對題的函式,程式碼直接跑下去還一直報錯,回饋給 GPT 也沒辦法快速解決,反而不如自己寫的快,不過去年我就有發現 chatGPT 對於報錯都可以有正確的回答,也一直有在使用。而看到我同事的例子,才發現現在更強大了,持續對話就可以生成程式碼,而且我覺得寫得比我之前的版本更好(要被淘汰了)。

  1. 我要做一個轉寄信件的R程式範例,需要將專案依照負責人寄給對應的信箱 請幫我生成兩個表格內容,此外還要生成一封信件範例,裡面有需要依照人物填入負責人和部門的內容
    專案 類別 負責人
    負責人 信箱
  2. 然後 GPT 就幫我生成了兩個表格,我依照我的習慣貼到 googlesheet,然後他就自己做了可以套入不同專案資訊的信件,並詢問我寄信的細節,包含是使用用 Gmail、Outlook 還是其他 SMTP?信件內容是否為純文字即可,還是要 HTML?我的回答是我要使用 gmailr 函數
  3. 然後他就幫忙整合好了(還有提醒要開啟Gmail API),我只要微調裡面的內容就可以馬上使用!


首先,設定好 gmailr 的憑證,如何設定在先前的文章有提到。

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

rm(list=ls())
library(gmailr)
#path放上下載好的憑證檔案
gm_auth_configure(path = "YOURPATH/credentials.json")
gm_auth(email = TRUE ,cache = ".secret")
#The gmailr package is using a cached token for YOURMAIL@gmail.com.

新學到了 glue 函數,之前 UTF8 的字串處理真的是搞死我,信件標題還有點蠢的寫了一長串轉換,而且使用 glue 的話內文也不需要另外排版,可以自動處理縮排和換行(不用一直<br>了),變數直接放在大括號內,如果牽涉算式也可以直接運算,實在太美妙了。

另外我也不習慣使用 purrr,一直以來都是用迴圈硬幹,簡潔的程式碼令人愉悅,看來之後要多跟 chatGPT 討教討教。

library(googlesheets4)
library(dplyr)
library(glue)
library(gmailr)
library(purrr)

# ===== 專案 & 負責人資料 =====
gsheet <- "https://docs.google.com/spreadsheets/d/1BklsguRoTa_wvkQzzxMEeNlHioJDCEOoPiBXcbB5BHI/edit?gid=921198502#gid=921198502"
responsible_info <- read_sheet(gsheet ,sheet="信箱列表")
project_info <- read_sheet(gsheet ,sheet="專案資訊")

# ===== 合併資料 =====
mail_data <- project_info %>%
left_join(responsible_info, by = "負責人")

# ===== 產生並寄出信件的函數 =====
send_project_email <- function(專案, 負責人, 部門, 信箱) {
# 信件主旨與內文
subject <- glue("請協助確認「{專案}」專案最新進度")
body <- glue("
親愛的 {負責人} 您好,

感謝您在「{專案}」專案上的投入與協助。

我們目前正在彙整本階段的進度報告,懇請您協助提供以下資訊:

- 當前進度是否有變更?
- 是否有資源或支援上的需求?
- 有無預計的風險或延遲事項需提前說明?

這項專案由 {部門} 部門負責,您的回覆將有助於我們準確掌握整體進展,並確保後續安排順利進行。

如您對此有任何問題,歡迎隨時聯繫專案管理室。

再次感謝您的協助!

敬祝
工作愉快、萬事順心

專案管理室 敬上
(系統自動發送,請勿直接回覆)
")

# 建立信件物件
email <- gm_mime() %>%
gm_to(信箱) %>%
gm_from("YOURMAIL@gmail.com") %>%
gm_subject(subject) %>%
gm_text_body(body)

# 寄出信件或是產出草稿
#gm_send_message(email)
gm_create_draft(email)
}

#pmap系列函數參數數量要相同,如果不篩選的話,多一個 類別 會報錯
pwalk(mail_data[, c("專案", "負責人", "部門", "信箱")], function(專案, 負責人, 部門, 信箱) {
send_project_email(專案, 負責人, 部門, 信箱)
})



留言
avatar-img
金吉的沙龍
7會員
43內容數
寫一些自己覺得有趣的事情
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
今天又發現ChatGPT的一些缺點, 使用時需要很準確的提供你想要表達的文字(我覺得還蠻重要的) 又或者拿一些範例給它看, 它就能更準確的回答問題, 因為今天我發現有一篇文章和之前寫過的完全一樣了, 所以又要再請ChatGPT生成30則勵志英文短文, 結果之前發問的問題已經消失了, 又
Thumbnail
今天又發現ChatGPT的一些缺點, 使用時需要很準確的提供你想要表達的文字(我覺得還蠻重要的) 又或者拿一些範例給它看, 它就能更準確的回答問題, 因為今天我發現有一篇文章和之前寫過的完全一樣了, 所以又要再請ChatGPT生成30則勵志英文短文, 結果之前發問的問題已經消失了, 又
Thumbnail
喜歡我和ChatGPT一起完成的小說作品請幫我按愛心,照理說我也是小說的創作者GPT是我的助力,我有提供內容GPT提供他想要自己呈現的內容,所以說我是他的老闆GPT是我底層的員工
Thumbnail
喜歡我和ChatGPT一起完成的小說作品請幫我按愛心,照理說我也是小說的創作者GPT是我的助力,我有提供內容GPT提供他想要自己呈現的內容,所以說我是他的老闆GPT是我底層的員工
Thumbnail
大部分就是他代替我工作GPT AI真的可以取代人類的任何工作
Thumbnail
大部分就是他代替我工作GPT AI真的可以取代人類的任何工作
Thumbnail
我是一位提示工程師 生成式AI的課程,我大概已經上過1,000人次以上,最近更花費重金,在台大霖澤館舉辦一場百人AIBOT設計課程,並在將近10位的助教協助下,完成課程的設定目標。 在生成式AI的領域中,變化實在是非常地迅速,今天表現不佳的ChatGPT,明天可能問題就可以解決。 過去還有想辦
Thumbnail
我是一位提示工程師 生成式AI的課程,我大概已經上過1,000人次以上,最近更花費重金,在台大霖澤館舉辦一場百人AIBOT設計課程,並在將近10位的助教協助下,完成課程的設定目標。 在生成式AI的領域中,變化實在是非常地迅速,今天表現不佳的ChatGPT,明天可能問題就可以解決。 過去還有想辦
Thumbnail
老實說,原本的我一直認為,AI是離我很遠的東西,即使是去年的 ChatGPT 熱潮,我也只是跟著偶爾在工作中跟AI聊天激發靈感而已。不過,就在前一陣子看了《AI 世界的底層邏輯與生存法則》這本書後,我才逐漸加深使用AI的頻率,並且把「讓AI成為工作中的標配」當作讓自己能習慣的方向。
Thumbnail
老實說,原本的我一直認為,AI是離我很遠的東西,即使是去年的 ChatGPT 熱潮,我也只是跟著偶爾在工作中跟AI聊天激發靈感而已。不過,就在前一陣子看了《AI 世界的底層邏輯與生存法則》這本書後,我才逐漸加深使用AI的頻率,並且把「讓AI成為工作中的標配」當作讓自己能習慣的方向。
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Prompt Engineering 跨越了一個範圍:它涉及人工智慧科學家和工程師掌握的複雜技術;另一方
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 Prompt Engineering 跨越了一個範圍:它涉及人工智慧科學家和工程師掌握的複雜技術;另一方
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 針對Generative AI、Foundation Model、Large Language Mode
Thumbnail
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 針對Generative AI、Foundation Model、Large Language Mode
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News