程式麻瓜也能上手!Gmail信件自動監測與內容擷取教學

更新於 發佈於 閱讀時間約 14 分鐘

你是否曾因系統通知信的遺漏而感到焦慮?

為了確保重要資訊不被錯過,我設計了一個自動化監測腳本,能精準記錄郵件的接收時間與內容。儘管系統郵件的寄送時間不固定,無法單純依賴固定時間檢核,但這套解決方案能即時捕捉每封信件,讓我不再擔心漏接通知。

我製作了一個google sheet的線上表單,並且鍵入每天固定的值A~C欄位,D & E欄位是保留給程式跑出來的結果(紅色部分),主要訴求是每天按下觸發後會自動跑出紅色的部分(感覺自己又靠AI多做了一點事?!)

圖一:最終示意圖

圖一:最終示意圖

因為公司使用gmail系統,所以我就想到可以使用google app script (類似javascript)的腳本程式語言,可以幫我快速串聯所有google 服務!

我真是機智的小天(?),但本人程式麻瓜.....該怎麼活用Google Apps Script:這個串聯 Google 服務的神隊友?這時候AI的強大就顯現出來了!還好我中文很好,我寫了下面的prompt.....

我的Prompt(我給 AI 的指令範例)

我向 AI 清楚說明我的需求:

我想請你幫我寫google app script 我按下按鈕後就可以去跑這個結果, (https://docs.google.com/spreadsheets/d (這裡是完整的網址)) 在這張檢核表當張中

  • Email 主旨: 主旨都一樣
  • sender: 寄件人都相同,系統發出的
  • receiver: 有一個沒有收件人 (因為太多我不附上了)
  • 寄送時間: 主要想要讀取的內容
  • 信件內容: 主要想要讀取的內容

請幫我寫google app script....

如何操作

下面這段 Google Apps Script 貼到 App Script Editor(擴充功能 Exten­sions → Apps Script)後就能用。

圖二:App Script在這裡~

圖二:App Script在這裡~

設定觸發條件:打造個人化自動化按鈕

這個自動化的小工具需要觸發,可以是時間點或者執行某個動作,我個人習慣使用按鈕,而設置按鈕有兩種方:

  1. 自訂選單按鈕:每次開啟試算表都會在功能表左邊多出 「📧 檢核工具」→「↻ 更新 Gmail 資訊」,(如同圖二 右邊有個檢核工具)
  2. 圖形/圖片按鈕:也可以在試算表插入「圖形/圖片」→ 右鍵 → 指派指令碼 → 填 updateEmailInfo,按按鈕就會跑。

我在這個範例中選擇第一種(看起來很高大上?)

AI基於我上述的需求會產出一步步的解決方案,如果聽不懂,我會說請step by step告訴我、或者我會說請用國中生/阿嬤聽得懂的語言指引我,或者就單純一直跟他說我不懂讓他重述~

AI會先跟我確認他的認知是否正確:

假設

  • 工作表名稱 工作表1(如工作表名稱就要調整cod當中的 const SHEET_NAME)
  • 第 1 列是標題,A∼E 欄依序為:  Email 主旨 | sender | receiver | 寄送時間 | 信件內容
  • A 欄已填入要檢索的 email 主旨。

程式碼

/**
* 開啟檔案時自動建立自訂選單
*/
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('📧 檢核工具')
.addItem('↻ 更新 Gmail 資訊', 'updateEmailInfo')
.addToUi();
}

/**
* 依 A 欄「Email 主旨」搜尋 Gmail,
* 把 sender / receiver / 寄送時間 / 信件內容 寫回 B~E 欄
*/
function updateEmailInfo() {
const SHEET_NAME = '工作表1'; // ⇦ 工作表名稱
const TZ = Session.getScriptTimeZone();
const MAX_BODY = 1000; // 信件內容最多存幾字

const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
const rows = sh.getLastRow() - 1; // 不含表頭
if (rows <= 0) {
SpreadsheetApp.getUi().alert('沒有任何主旨可供檢索。');
return;
}

const aValues = sh.getRange(2, 1, rows, 1).getValues(); // 只抓 A 欄
const output = [];

aValues.forEach(([subject]) => {
if (!subject) { // A 欄空白
output.push(['', '', '', '']);
return;
}

// 找最新的一封含該主旨的信
const threads = GmailApp.search(`subject:"${subject}"`, 0, 1); // 最多取 1 thread
if (threads.length === 0) { // 找不到
output.push(['(未找到)', '', '', '']);
return;
}

const msg = threads[0].getMessages().pop(); // 取該 thread 最後一封
const body = msg.getPlainBody().replace(/\s+/g, ' ').substring(0, MAX_BODY);

output.push([
msg.getFrom(), // sender
msg.getTo(), // receiver
Utilities.formatDate(msg.getDate(), TZ, 'yyyy/MM/dd HH:mm:ss'), // 寄送時間
body // 信件內容(前 1000 字)
]);
});

// 回寫 B~E 欄
sh.getRange(2, 2, rows, 4).setValues(output);

優化信件內容:讓機器產出更貼近人性

初次運行後,我發現程式抓取的信件內容包含了許多系統資訊,冗長且不便閱讀。身為一個使用者,我只想看到乾淨、重點明確的內文。因此,我再次與 AI 溝通,進行優化:

  • 目的: 按下按鈕後,從 Gmail 抓取最新一封符合主旨的信,並自動寫入寄件人、收件人、寄送時間以及精簡後的信件內容
  • 優化項目: 信件內容將會自動去除以下不必要的資訊:
    • -- 後的頁腳資訊(如取消訂閱連結)
    • From: / Sent: / To: / Cc: / Subject: 等轉寄歷史訊息
    • [cid:imagexxx] 這類圖片參照
    • [Company Logo] 等圖示文字
    • <http...> 這類 HTML 連結
    • 多餘的空白字元與簽名區塊(例如 Best Regards, 開頭的內容)

經過優化後的程式碼如下:

function onOpen() {
SpreadsheetApp.getUi()
.createMenu('📧 檢核工具')
.addItem('↻ 更新 Gmail 資訊', 'updateEmailInfo')
.addToUi();
}

function updateEmailInfo() {
const SHEET_NAME = '工作表1'; // ⇦ 修改為你的工作表名稱
const TZ = Session.getScriptTimeZone();
const MAX_BODY = 1000;

const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SHEET_NAME);
const rows = sh.getLastRow() - 1;
if (rows <= 0) {
SpreadsheetApp.getUi().alert('沒有任何主旨可供檢索。');
return;
}

const aValues = sh.getRange(2, 1, rows, 1).getValues();
const output = [];

aValues.forEach(([subject]) => {
if (!subject) {
output.push(['', '', '', '']);
return;
}

const threads = GmailApp.search(`subject:"${subject}"`, 0, 1);
if (threads.length === 0) {
output.push(['(未找到)', '', '', '']);
return;
}

const msg = threads[0].getMessages().pop();
const rawBody = msg.getPlainBody();

let cleaned = rawBody.split('\n--')[0]; // 砍掉 "--" 後面

cleaned = cleaned
.replace(/From:.*/gi, '')
.replace(/Sent:.*/gi, '')
.replace(/To:.*/gi, '')
.replace(/Cc:.*/gi, '')
.replace(/Subject:.*/gi, '')
.replace(/Best Regards,.*$/i, '') // 簽名區塊
.replace(/\[cid:.*?\]/g, '')
.replace(/\[Company Logo\]/gi, '')
.replace(/<http.*?>/gi, '')
.replace(/\s+/g, ' ')
.trim();

const body = cleaned.substring(0, MAX_BODY);

output.push([
msg.getFrom(),
msg.getTo(),
Utilities.formatDate(msg.getDate(), TZ, 'yyyy/MM/dd HH:mm:ss'),
body
]);
});

sh.getRange(2, 2, rows, 4).setValues(output);
}

修改好後按下儲存按鈕 (下圖)後,回到google sheet 重新整理,觸發的按鈕出現啦!

圖三:儲存按鈕

圖三:儲存按鈕

如何使用這個腳本:程式麻瓜也能輕鬆上手!

  1. 首次執行與授權: 第一次執行時,會跳出授權視窗。請按照指示,授權腳本存取您的 Gmail 和 Google 試算表。這是確保腳本能正常運作的關鍵一步。
  2. 日常使用: 之後,您只需點擊功能表中的「📧 檢核工具」→「↻ 更新 Gmail 資訊」,或按下您指派的按鈕,腳本就會自動更新 B 至 E 欄的資訊。

重要的注意事項

為了讓這個腳本順暢運行,請留意以下幾點:

  • 確保 A 欄有主旨: 請確認您的 Google 試算表 A 欄已填入正確的 Email 主旨(例如:「對帳OO結果通知」)。這是腳本搜尋信件的依據。
  • 工作表名稱正確: 請在「工作表1」分頁操作,或者如果您使用了不同的工作表名稱,務必修改程式碼中 const SHEET_NAME 的值。
  • 完成 Gmail 授權: 第一次執行 updateEmailInfo() 函數後,請務必完成 Gmail 權限的授權步驟。
圖一

圖一

太好了!

現在你可以每天早上悠閒的喝咖啡、優雅地按下一個鍵,讓腳本替你開心工作啦!

作者後記

這個解決方案源於實際工作需求,並簡化呈現,希望能透過這篇文章,讓更多人感受到AI與程式自動化所帶來的無限魅力與便利,即使是程式麻瓜也能輕鬆上手!

未來期待與大家分享更多有趣的內容,讓AI與程式能幫助你的工作更上一層樓 :)

留言
avatar-img
留言分享你的想法!
avatar-img
牧牧的沙龍
15會員
31內容數
living a vivid life wholeheartedly
牧牧的沙龍的其他內容
2025/07/07
還在用 Excel 處理大檔案卻常當機?本篇教你如何用 Python 打造 AI 資料廚房,從環境安裝、工具介紹,讓你快速入門自動化資料處理。適合資料新手,與AI攜手擺脫手動整理資料的上班族!
Thumbnail
2025/07/07
還在用 Excel 處理大檔案卻常當機?本篇教你如何用 Python 打造 AI 資料廚房,從環境安裝、工具介紹,讓你快速入門自動化資料處理。適合資料新手,與AI攜手擺脫手動整理資料的上班族!
Thumbnail
2025/04/13
近期美股台股急轉彎,看看迷因幣的表現? 想入手的新手歡迎多多討論!
Thumbnail
2025/04/13
近期美股台股急轉彎,看看迷因幣的表現? 想入手的新手歡迎多多討論!
Thumbnail
2025/03/27
職場是人花費時間最多的地方之一,每個人的工作觀不同,有些人尋求成就感、有些人尋求金錢報酬、有些人更在乎穩定和團隊提供的情感價值,而職業的累積更是一場耐力賽,一個人走得快、一群人走得遠,而決定你能否跟一群人走得遠的莫過於團隊氛圍、企業文化! 但不論你(的工作觀)是哪一種,文化契合度是能否長跑下去的關鍵
Thumbnail
2025/03/27
職場是人花費時間最多的地方之一,每個人的工作觀不同,有些人尋求成就感、有些人尋求金錢報酬、有些人更在乎穩定和團隊提供的情感價值,而職業的累積更是一場耐力賽,一個人走得快、一群人走得遠,而決定你能否跟一群人走得遠的莫過於團隊氛圍、企業文化! 但不論你(的工作觀)是哪一種,文化契合度是能否長跑下去的關鍵
Thumbnail
看更多
你可能也想看
Thumbnail
Google Docs 自動化應用情境,自動依 Google Sheets 試算表、Google Forms 表單回覆、Gmail 信件、Webhook、RSS 訂閱內容,建立相應 Google Docs 文件。還可以在新建 Google Docs 文件後,自動發送 Slack 通知給團隊成員!
Thumbnail
Google Docs 自動化應用情境,自動依 Google Sheets 試算表、Google Forms 表單回覆、Gmail 信件、Webhook、RSS 訂閱內容,建立相應 Google Docs 文件。還可以在新建 Google Docs 文件後,自動發送 Slack 通知給團隊成員!
Thumbnail
這篇文章分享如何透過免費電子郵件課程提供價值,建立信任,並引導訂閱者購買付費產品。透過豐富內容、獨特風格,以及AI的幫助,讓你的需求看起來更具吸引力。
Thumbnail
這篇文章分享如何透過免費電子郵件課程提供價值,建立信任,並引導訂閱者購買付費產品。透過豐富內容、獨特風格,以及AI的幫助,讓你的需求看起來更具吸引力。
Thumbnail
透過 Google Sheets 和 Make 打造專案任務自動提醒系統,當一到專案任務重要時程,系統便自動寄發專案任務的提醒信件或行事曆邀請,給專案任務負責人和相關團隊成員,確保專案進度如期完成,有效提升跨部門溝通協作效率!不再花費時間人工追蹤時程進度,釋放時間及專注力,專注在更重要的工作上!
Thumbnail
透過 Google Sheets 和 Make 打造專案任務自動提醒系統,當一到專案任務重要時程,系統便自動寄發專案任務的提醒信件或行事曆邀請,給專案任務負責人和相關團隊成員,確保專案進度如期完成,有效提升跨部門溝通協作效率!不再花費時間人工追蹤時程進度,釋放時間及專注力,專注在更重要的工作上!
Thumbnail
在 IG 上看到一位前端大大用 Google Apps Script + Line bot 替自己的球隊安排了球經,覺得很有趣,想來玩看看
Thumbnail
在 IG 上看到一位前端大大用 Google Apps Script + Line bot 替自己的球隊安排了球經,覺得很有趣,想來玩看看
Thumbnail
👨‍💻簡介 最近因為憑證越來越多,需要監控什麼時候到期,當到期時發送到期通知,因此撰寫一個簡單的小程式來完成。 這次使用Python和Telegram Bot來監控SSL證書的到期時間並發送通知。並使用GCP工具,如CloudFunction和CloudScheduler做部署平台。
Thumbnail
👨‍💻簡介 最近因為憑證越來越多,需要監控什麼時候到期,當到期時發送到期通知,因此撰寫一個簡單的小程式來完成。 這次使用Python和Telegram Bot來監控SSL證書的到期時間並發送通知。並使用GCP工具,如CloudFunction和CloudScheduler做部署平台。
Thumbnail
在日常生活和工作中,我們經常需要發送電子郵件來進行溝通和分享資訊。本文將介紹如何使用Python的pywin32模組連接到Outlook,並通過程式來自動發送郵件。
Thumbnail
在日常生活和工作中,我們經常需要發送電子郵件來進行溝通和分享資訊。本文將介紹如何使用Python的pywin32模組連接到Outlook,並通過程式來自動發送郵件。
Thumbnail
每日自動檢查資料庫運作所產生的訊息,若發現有錯誤,自動寄出警告信給擔當人員
Thumbnail
每日自動檢查資料庫運作所產生的訊息,若發現有錯誤,自動寄出警告信給擔當人員
Thumbnail
在這篇教學中,我們將學習如何使用 Google Apps Script 來連結 LINE Notify,以便於你的應用程式或自動化工作流程中發送通知。LINE Notify 是 LINE 提供的服務,可以讓你透過 LINE 帳號來發送自訂的通知訊息。
Thumbnail
在這篇教學中,我們將學習如何使用 Google Apps Script 來連結 LINE Notify,以便於你的應用程式或自動化工作流程中發送通知。LINE Notify 是 LINE 提供的服務,可以讓你透過 LINE 帳號來發送自訂的通知訊息。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News