公開日:12/31/2021 更新日:3/26/2022
筆者は社会人サークルに所属しており、Gmailで出席のリマインドメールがイベント前日に送られてくる。
しかし、Gmailを見る習慣がないので度々見落としてしまう。
なので、Gmailが届いたらLineに通知するプログラムを作ろうと考えた。
これで予定ブッチをなんとか回避したい!
Google Apps Scriptとは、主にGoogleのサービスを自動化するスクリプト言語。
スプレッドシートの操作を自動化したりGmailからメールを取得が簡単に出来る。
使い方は簡単。Googleアカウントがあればログインしてスプレッドシートからツールバーの拡張機能>Apps Script を押下する。
function の中に実行したいソースを記述していく。
LINENotify のサイト (https://notify-bot.line.me/ja/ )から
Lineに登録しているメールアドレスとパスワードでログイン。
そして、マイページのトークンを発行するボタンからトークンを取得。
通知を送信するトークルームを選択 では自分と1:1を選択。発行したトークンは必ずメモっておく。
・【スケジュールアラーム通知】 という件名でメールが送られてくる
・ 1日前までに届いた新規メールから上記件名のメールが存在すればLine通知する(毎朝実行が前提)
・ Lineの通知内容はメール本文とするが、そのままだと長文なので不要部分はトリミングする
以下の関数を Apps Script のトリガー追加より、時間主導型で指定時間帯に日時で実行されるように設定する。
function sendToLineFromGmail() {
//1日前の日時を取得
const d = new Date();
d.setDate(d.getDate()-1);
const y = d.getFullYear();
const mon = d.getMonth() + 1;
const d2 = d.getDate();
const day = y+"/"+mon+"/"+d2;
// LINENotifyから取得したトークンを設定
let token = "XXXXXXXXXXXXXXXXXXXXXXX"
let url = "https://notify-api.line.me/api/notify"
let options = {
"method" : "post",
"headers" : {
"Authorization" : "Bearer "+ token
},
"payload" : {
"message" : ''
}
}
//Gmailでメール検索に使うクエリを設定
const query = 'from:XXX@XXXXXXX subject:スケジュールアラーム通知 after:'+day;
//メールリストを取得
const threads = GmailApp.search(query);
//リストからメールを1件ずつループで確認
threads.forEach(thread => {
const messages = thread.getMessages();
messages.forEach(message => {
//メール内容取得
const body = message.getPlainBody();
//メール内容に含まれる「イベント」前までと「集合」の文字以下をsliceでトリミングする
options.payload.message = body.slice(body.indexOf('イベント'),body.indexOf('- 集合'))
//LINEに通知
UrlFetchApp.fetch(url, options)
});
});
}
初回実行時には以下の警告エラーが出る可能性がある。
このプロジェクトを実行するには、ご利用の Google アカウントへのアクアセスを許可する必要があります。再試行して、許可してください。
その際には、GmailとLineNotifyへのアクセスを許可してあげれば問題ない。
下記の画面などが出た場合は詳細ボタンを押下して安全でないページに移動する。