【Gmail】Google Apps ScriptでGmailの特定ラベルをSlackに通知する方法

GAS イメージ

Gmail で特定のラベルが付いたメールだけを Slack に流したい時があります。
たとえば「問い合わせ」「障害連絡」「重要」などのラベルだけを通知すれば、メールをずっと開いていなくても見逃しにくくなります。

今回は、Google Apps Script(GAS)を使って、Gmail の特定ラベルを Slack に通知するシンプルな方法をまとめます。

目次

事前準備

先に Slack 側で Incoming Webhook を作成しておきます。
Webhook URL が発行されたら、そのURLに対して JSON を POST するだけでメッセージを送れます。

GAS 側では、Gmail のラベル名と Webhook URL を用意しておきます。

サンプルコード

function postLabeledGmailToSlack() {
  const labelName = '重要';
  const doneLabelName = 'slack_posted';
  const webhookUrl = 'https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX';

  const label = GmailApp.getUserLabelByName(labelName);
  if (!label) return;

  let doneLabel = GmailApp.getUserLabelByName(doneLabelName);
  if (!doneLabel) {
    doneLabel = GmailApp.createLabel(doneLabelName);
  }

  const threads = label.getThreads(0, 20);

  threads.forEach(thread => {
    const messages = thread.getMessages();
    const lastMessage = messages[messages.length - 1];

    const subject = thread.getFirstMessageSubject();
    const from = lastMessage.getFrom();
    const body = lastMessage.getPlainBody().slice(0, 200);
    const permalink = thread.getPermalink();

    const payload = {
      text:
        'Gmail通知\n' +
        '件名: ' + subject + '\n' +
        '送信者: ' + from + '\n' +
        '本文抜粋: ' + body + '\n' +
        'リンク: ' + permalink
    };

    UrlFetchApp.fetch(webhookUrl, {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify(payload)
    });

    thread.addLabel(doneLabel);
  });
}

コードのポイント

GmailLabel では、ラベルが付いたスレッドを getThreads() または getThreads(start, max) で取得できます。
大量に処理する可能性があるなら、範囲指定できる getThreads(start, max) のほうが扱いやすいです。

また、GmailThread では getMessages() でメッセージ一覧が取れます。
件名は getFirstMessageSubject()、最新時刻は getLastMessageDate()、スレッドのリンクは getPermalink() で取れるので、通知文を組み立てやすいです。

Slack通知で気をつけたいこと

Slack Incoming Webhook は、Webhook URL に JSON を POST すればメッセージが送れます。
その代わり、Webhook URL 自体が秘密情報なので、GitHub など公開リポジトリに載せないよう注意が必要です。

リクエストが壊れていると、400 / 403 / 404 などのエラーが返ることもあるので、うまく飛ばない場合はレスポンス確認もしておくと安心です。

トリガー設定して自動化する

このスクリプトは、Apps Script の時間主導トリガーを設定しておけば自動化できます。
たとえば 5分おき、10分おきなどで動かせば、ほぼリアルタイムに近い形で Gmail → Slack 通知ができます。

問い合わせ窓口や監視通知の一次受けに使うとかなり便利です。

まとめ

GAS と Slack Incoming Webhook を組み合わせると、Gmail の特定ラベルだけを簡単に通知できます。
メール全部を追いかけるより、ラベル単位で通知するほうが運用しやすいので、個人的にもかなり使い勝手がいいやり方です。

「必要なメールだけSlackに流したい」という時は、この形がかなりシンプルでおすすめです。

参考一次情報

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次