Line Notifyに登録
マイページからアクセストークンの発行
トークンは発行後に表示されます。
閉じると二度と表示されないので忘れずコピーしておきます。
GASを実行
以下をテンプレートとして「何分毎」と「Your Line Token」の箇所を書き換える
////(該当したメールが既読扱いになるかも?) const sendLine = (body, lineToken) => { let options = { "method": "post", "payload": { 'message': body }, "headers": { "Authorization": "Bearer " + lineToken } }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options); } const setSearchCondition = () => { const now = Math.floor(new Date().getTime() / 1000); const interval = 15; //〇分前~現在の新着メールを取得 #--トリガーをこれに合わせておく!! const term = now - (60 * interval); const subject = 'subject:"お知らせ|重要|不在"'; // 件名 「|」つなぎでor条件を指定できる //検索条件候補 // const subject = "subject:件名"; // 件名 // const label = "label:ラベル"; // ラベル // const term = "after:2022/1/1 before:2022/1/31"; // 日付 // const from = "<from:test@gmail.com>"; // 送信者 //実態は件名+日付といった複数指定の条件は "subject:件名 after:2022/1/1 before:2022/1/31" のように半角スペース区切りで指定可能 //XX分前の新着(未読)で指定件名のメールを取得 return '(is:unread ' + subject + ')'; } const searchMail = (searchCondition) => { return GmailApp.search(searchCondition); } const getMessages = (searchResult) => { const mails = GmailApp.getMessagesForThreads(searchResult); let detailMessages = [] for (const messages of mails) { const message = messages.pop() detailMessages.push( "\n【Date】: " + message.getDate() + "\n【From】: " + message.getFrom() + "\n【Subject】: " + message.getSubject() + "\n【Body】: \n" + message.getPlainBody().slice(0, 200) ) } GmailApp.markThreadsRead(searchResult); return detailMessages; } const main = () => { const lineToken = "XXXXXXXXXXXXXXXXXXX"; //Your Line Token const result = searchMail(setSearchCondition()) if (result.length > 0) { const messages = getMessages(result) messages.forEach(message => { sendLine(message, lineToken) }) } }
実行対象の関数が main
になっていることを確認し「実行」を押下する。
初回起動に許可を求められるので詳細を表示して権限付与する。
対象のメールが飛んで来たら準備完了。
トリガーを設定し自動実行する
決まった時間ごとに実行されるようにGASのトリガーを設定する。