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
留言分享你的想法!
avatar-img
金吉的沙龍
7會員
42內容數
寫一些自己覺得有趣的事情
你可能也想看
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