前幾天忘了自己下班有沒有打卡,除了回去補打之外不然就是要經過種種驗證登入公司信箱查詢。套句 強者我學長 說的 幹壞事是進步最大的原動力,於是開始了這段簡單旅程。
原本想用 ifttt 來處理
- 收到信自動轉寄給 ifttt
- ifttt 送給 Line Notify
但 gmail 應該是避免亂發郵件,所以自動轉寄的收信信箱要認證。但我又沒辦法跟 ifttt 拿認證碼,所以這條路就不行。
後來想到曾看過這篇 LINE Notify:用 Google Apps Script 建立簡易網站監測機器人,於是就照抄他送通知的 code 其他則是看 官方文件 的內容拼湊。
至於遇到的問題大概就是在 GmailApp.search
的條件不知道有哪些關鍵字,但生命會自己找到出路。總之程式碼如下
function run() {
var msg = queryMail();
if (msg.length > 0) {
lineMessage(msg);
}
}
var token = "xxx";
function lineMessage(msg) {
var option = {
method: "post",
headers: { Authorization: "Bearer " + token },
payload: {
message: msg,
},
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", option);
}
function queryMail() {
var rtnMsg = "";
var condition = 'subject:"刷卡通知" is:unread';
var threads = GmailApp.search(condition);
var messages = GmailApp.getMessagesForThreads(threads);
for (var i = 0; i < messages.length; i++) {
for (var j = 0; j < messages[i].length; j++) {
var mail = messages[i][j];
if (mail.isUnread()) {
rtnMsg +=
"\n" +
Utilities.formatDate(mail.getDate(), "GMT+8", "yyyy/MM/dd") +
" " +
mail.getPlainBody();
mail.markRead();
}
}
}
for (var i = 0; i < messages.length; i++) {
threads[i].moveToArchive();
}
return rtnMsg;
}