1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GAS を使って gmail を slack で通知してみる

Last updated at Posted at 2022-12-26

はじめに

ブラウザのタブをあまり増やしたくないという理由で Gmail 通知を slack に通知させるようにしました。

「そんなことしなくても」と思われるかもしれません、 Gmail の拡張機能が Chrome にはありますから。

そうです。ただ、 GAS でなにかしてみたかっただけです...

やること

  1. slack の Incoming WebHooks の登録
  2. Google Apps Script の実装
  3. トリガーを設定する

slack の Incoming WebHooks の登録

まずは、 slack のサービスである Incoming Webhook の設定をします。

  1. 自動通知用のチャンネルを用意してください。(既存チャンネルでも可)

  2. チャンネル上部をクリック

Slack___general___sample.png

Slack___gmail-notification___sample.png

Slack___gmail-notification___sample-2.png

  1. 作成完了後、Webhook URL の項目に出てくるURLを後で使用します。

Google Apps Script の実装

GAS の開き方はいろいろあると思いますが、2つ紹介します。

スプレッドシート経由で開く

  1. スプレッドシートを開く
  2. 下記の通りクリック

スクリーンショット_2022-07-15_12_07_21.png

Google ドライブ経由で開く

  1. Google ドライブを開く
  2. 左上の新規をクリック
  3. その他から 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 が投稿されるはずです。
Slack___gmail-notification___sample-3.png

トリガーを設定する

画面左のサイドバーからトリガーを選択、右下の + アイコンから新規トリガーを追加します。

時間主導型、分主導型などお好きなトリガーを設定してください。

スクリーンショット 2022-12-30 11.19.04.png

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);
}

初回はアクセス権限の承認が必要になります。

スクリーンショット 2022-12-30 11.23.39.png

いいですね!できてます。

おわり

いかがでしたでしょうか?
みなさんも GAS を使って遊んでみてください。

参考

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?