はじめに
背景
普段メルマガなどメールが大量にきて、スマホの通知がうるさいので止めたい
送信元ごとすべて止めるとたまにくる重要メールなどに気づけない
スマホのメール取得間隔を伸ばすとすぐに見たいメールが来ない
なので、一旦アーカイブして、定期的にメールの件名を取得し、slackに通知するようにした
参考にさせていただいたもの
【決定版】GAS で Gmail の検索結果をスプレッドシートに抽出する方法
【初心者向け】GASを使ってSlackへ自動通知
設計概要
下記の動作を行う
- Gmailのラベル毎に新規に受信したメールを確認する
- 該当するメールがあれば、件名を抽出し、ラベル毎にslackに通知する
- 確認間隔は12時間ごと
#事前準備
Gmailの設定
すぐに通知が不要なメールは下記のフィルタを設定
- 受信トレイをスキップ(アーカイブ)
- 任意ラベルをつける
slackの設定
左カラムの下側にある「Add Apps」をクリック
「incoming-webhook」を検索して、インストール
incoming-webhook の設定画面で、「Add Configuration」をクリック
投稿したいチャンネルを選択し、「Add Incoming WebHooks integration」をクリック
※ここでは gmail チャンネルを選択
すると「Webhook URL」が作成される。
後ほど使用するので控えておく
GAS設定
Google Drive から新規をクリックし、Google Apps Script を選択
下記のスクリプをコピペ
※一部修正箇所あり(2行目)
function sendToSlack(message) {
var postUrl = '<Slack Webhook URL>'; // 先程取得した Slack の Webhook URLを指定する
var username = 'GmailBot'; // 通知時に表示されるユーザー名
var icon = ':hatching_chick:'; // 通知時に表示されるアイコン
var jsonData =
{
"username" : username,
"icon_emoji": icon,
"text" : message
};
var payload = JSON.stringify(jsonData);
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options);
}
function main() {
var messages = 'Gmail Check Start!\n';
var after = parseInt(((new Date()).getTime() - 13 * 60 * 60 * 1000) / 1000); //13時間前を指定
var labels = GmailApp.getUserLabels(); //ラベル一覧を取得
for (var i = 0; i < labels.length; i++) {
var targetLabel = "label:" + labels[i].getName();
var searchTarget = targetLabel + ' after:' + after
var subjects = ''
var loopcount = 0;
GmailApp
.search(searchTarget, 0, 10)
.forEach(function (thread) {
thread.getMessages().forEach(function (message) {
var subject = message.getSubject(); //メールの件名を取得
subjects += subject + "\n"
loopcount++;
});
});
if (loopcount === 0) continue;
messages += "\n" + targetLabel + "\n" + subjects
}
sendToSlack(messages)
}
テスト実行
main 関数を指定し、実行ボタン▶ をクリック
※初回のみ権限許可について、同意が求められるので、同意する
slack に正しく投稿されたら成功!
定期実行
同様に実行時間を「午後10時~11時」に設定したトリガーを追加する
※トリガーはこの範囲で実行されるため、毎回変動する
※そのため、gasプログラムのafterを13時間としている
さいごに
複数のアカウントを確認する方法を調べましたが、よくわからず。
とりあえずは、各アカウントごとに同様の設定をするしかなさそう。
どなたか、方法をご存知であればご教示下さい。