GAS Gmail 郵件自動化處理
在 GAS 中,你有兩個主要的郵件服務:MailApp(僅限寄信)與 GmailApp(功能完整,可讀取、標籤、搜尋郵件)。
基礎發信 (Simple Email)
如果你只需要簡單的通知功能,MailApp 是最輕量化的選擇。
/**
* 寄送簡單的文字通知
*/
function sendSimpleEmail() {
MailApp.sendEmail({
to: "user@example.com",
subject: "系統自動通知",
body: "這是一封來自 Google Apps Script 的自動化測試郵件。"
});
}
MailApp 函數語法說明
- MailApp.sendEmail(options):
to:收件者 Email。subject:主旨。body:純文字內文。htmlBody:(選填) HTML 格式內文。attachments:(選填) 附件物件陣列。
處理郵件執行緒 (Threads & Messages)
Gmail 是以「執行緒」(Thread) 為單位組織郵件的。
/**
* 搜尋帶有「急件」標籤的郵件並標記為已讀
*/
function processUrgentEmails() {
// 就像在 Gmail 搜尋框輸入一樣
const threads = GmailApp.search("label:急件 is:unread");
threads.forEach(thread => {
console.log(`處理討論串: ${thread.getFirstMessageSubject()}`);
thread.markRead(); // 標記為已讀
thread.addLabel(GmailApp.getUserLabelByName("已處理"));
});
}
GmailApp 核心函數語法說明
- GmailApp.search(query, start, max):搜尋郵件,回傳
GmailThread陣列。 - thread.markRead() / thread.markUnread():切換已讀狀態。
- thread.addLabel(labelObject):為整個執行緒加上標籤。
- thread.getMessages():取得該執行緒中所有的個別郵件物件 (
GmailMessage)。
自動儲存郵件附件
這在處理發票或報價單自動化時非常有用。
/**
* 監控 Gmail,將特定標題郵件的附件存入雲端硬碟
*/
function saveAttachmentsToDrive() {
const threads = GmailApp.search("subject:'報價單'");
const folder = DriveApp.getFolderById("YOUR_FOLDER_ID");
threads.forEach(thread => {
const messages = thread.getMessages();
messages.forEach(message => {
const attachments = message.getAttachments();
attachments.forEach(attachment => {
folder.createFile(attachment);
console.log(`附件已存檔: ${attachment.getName()}`);
});
});
});
}
附件處理相關函數語法說明
- message.getAttachments():取得單封郵件中的所有附件檔。
- attachment.getName():取得附件原始檔名。
- attachment.getContentType():取得 MIME 類型 (如
application/pdf)。 - folder.createFile(blob):直接傳入附件物件即可將其存入 Drive。
標籤管理 (Labels)
/**
* 自動建立新的標籤
*/
function manageLabels() {
let label = GmailApp.getUserLabelByName("自動備份");
if (!label) {
label = GmailApp.createLabel("自動備份");
}
}
標籤函數語法說明
- GmailApp.getUserLabelByName(name):取得現有標籤,若不存在回傳
null。 - GmailApp.createLabel(name):建立新標籤。
- GmailApp.deleteLabel(label):刪除標籤。