はじめに
ブラウザのタブをあまり増やしたくないという理由で Gmail 通知を slack に通知させるようにしました。
「そんなことしなくても」と思われるかもしれません、 Gmail の拡張機能が Chrome にはありますから。
そうです。ただ、 GAS でなにかしてみたかっただけです...
やること
- slack の Incoming WebHooks の登録
- Google Apps Script の実装
- トリガーを設定する
slack の Incoming WebHooks の登録
まずは、 slack のサービスである Incoming Webhook の設定をします。
-
自動通知用のチャンネルを用意してください。(既存チャンネルでも可)
-
チャンネル上部をクリック
- 作成完了後、Webhook URL の項目に出てくるURLを後で使用します。
Google Apps Script の実装
GAS の開き方はいろいろあると思いますが、2つ紹介します。
スプレッドシート経由で開く
- スプレッドシートを開く
- 下記の通りクリック
Google ドライブ経由で開く
- Google ドライブを開く
- 左上の新規をクリック
- その他から Google Apps Script を選択
コードを書きます
// Gmail を取得する
function fetchGmail() {
// 取得間隔
const now = Math.floor(new Date().getTime() / 1000);
const interval = now - (60 * 1); // 取得時間 => 1 = 1分
// 取得条件
const terms = '(is:unread after:'+ interval + ')';
// Gmail 取得
const threads = GmailApp.search(terms);
const emails = GmailApp.getMessagesForThreads(threads);
const value = [];
if(emails.length === 0) {
// 未読がない場合のメッセージ
return ":tada: 未読メールはありません :tada:";
} else {
for(const i in emails) {
// 各要素を取得
const email = emails[i][0];
const dateAndTime = (email.getDate().getMonth() + 1) + "月" + (email.getDate().getDate()) + "日 "
+ (email.getDate().getHours()) + "時" + (("00" + email.getDate().getMinutes()).slice(-2)) + "分";
const sender = email.getFrom(); // メールの相手
const subject = email.getSubject(); // 件名
const text = email.getPlainBody().slice(0,100); // 本文
value[i] = dateAndTime + "\n\n" + "【from】\n" + sender + "\n\n" + "【sbject】\n" + subject + "\n\n" + "【Message】\n"+ text;
}
const email = "```\n" + value.join('') + "\n```"; // slack でブロックを効かせたいので ``` を使う
return email;
}
}
// slack に通知する
const postUrl = "取得した Webhook URL";
function postSlack() {
const message = fetchGmail();
var jsonData =
{
"username" : 'slack の app 名',
"text" : message // メッセージ内容
};
var payload = JSON.stringify(jsonData);
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};
UrlFetchApp.fetch(postUrl, options);
}
slack で確認する
画面上部の実行ボタンを押します。
未読の Gmail が投稿されるはずです。
トリガーを設定する
画面左のサイドバーからトリガーを選択、右下の + アイコンから新規トリガーを追加します。
時間主導型、分主導型などお好きなトリガーを設定してください。
finish!!!
appendix
GAS はなんでもできます。上げたらきりがないと思いますが、参考までにカレンダー登録もやってみましょう。
function createSchedule () {
const gmail = "Eメールをここに";
const calender = CalendarApp.getCalendarById(gmail);
const title = 'test';
const startDate = new Date('2023/01/01 10:00:00');
const endDate = new Date('2023/01/01 19:00:00');
calender.createEvent(title, startDate, endDate);
}
初回はアクセス権限の承認が必要になります。
いいですね!できてます。
おわり
いかがでしたでしょうか?
みなさんも GAS を使って遊んでみてください。