LoginSignup
1
2

More than 3 years have passed since last update.

無料で特定のラベルにきた新着メール(gmail)をslackに通知する(privateでもpublicチャンネルでも可

Last updated at Posted at 2020-09-19

無料でSlack(プライベートチャンネル含む)へGmailを通知する(slack + mail)

だいぶ前に上記を書きましたが、たまたま今回使うシーンがありました。
が、今回やりたかったのは、タイトルの通り、新着メールを通知するというもの。

上記の記事では特定の時刻に定期実行(デイリーで1回程度に頻度)することが前提。

ただし、今回やりたいのは、新着メール受信して、即時でslack通知する、ということ。

そのためには、
1. 新着メールの存在を
2. 定期実行(分単位)したgasで監視して、
3. メールがあるならslack通知する、

といった手段をとる必要があります。

で、

意外とサクッとできたので、備忘録として、書き溜めておきます。

基本的な流れは上記の記事と同じです。

上記の記事と違う点

以下の二つ。

  • 新着メールGmailApp.searchで取得する
  • 下記gasを動かすトリガーを1分、5分と言ったインターバルで設定する(ここは必要に応じて変えてください

ことのみ。

script

function sendEmailsToSlack() {
    var label = GmailApp.getUserLabelByName('stores.jp');
    var messages = [];
    var searchCondition = 'label:[対象ラベル名] is:unread '; // 対象ラベルの未読メッセージ という指定をする
    var threads = GmailApp.search(searchCondition, 0, 50);

    if (threads.length == 0) return // 未読メッセなければ、終了。

    for (var i = 0; i < threads.length; i++) {
      messages = messages.concat(threads[i].getMessages())
      threads[i].markRead(); // 既読にする
    }

    var message = messages[messages.length - 1];

    Logger.log(message);

    var output = '\n' + message.getPlainBody();
    Logger.log(output);

    // payloadの設定は必要に応じてカスタマイズしてください。
    var today = new Date();
    var payload = {
        "username": "問い合わせあり",
        "attachments": [
          {
            "color": "#36a64f",
            "title": "以下の内容で問い合わせがありました",
            "fields": [
              {
                "value": output,
                "short": false
              }
            ],
          }
        ],
        "channel" : "#[通知したいチャンネル名]:", //if send public channel
        // "channel" : "@[通知したいチャンネル名]:", //if send private channel
        "icon_emoji": ":mailbox:"
    };

    var options = {
        'method' : 'post',
        'payload' : Utilities.jsonStringify(payload),
    };

    var webhookUrl = 'https://hooks.slack.com/services/TS9K2E1LY/hogehoge/xxxxxxxxxxxxxx'; // 通知したいslackチャンネルの の incoming webhook url
    UrlFetchApp.fetch(webhookUrl, options);
}
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2