8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Send emails to this channel を使ってメールをslackに通知するメモ

Last updated at Posted at 2023-12-08

新卒にやり方を共有した時のメモ。

仕事中大体の情報はslackでやりとりすることが多いのですが、重要な情報がメールだけで来ていたときに問題が起きる、ということもあるかもしれないので、見る必要がありそうなメールをslackに転送します。

やり方

slackのメールアドレスを取得

slackのチャンネル宛にメールを送る方法を使います。(メールによってはIDパスワード等が含まれるような場合もあると思うので、プライベートチャンネルに通知するのがおすすめです。)

まず、通知を飛ばしたいチャンネルのSend emails to channelをクリックします。
send_email_to_slack.png

↓のような画面が表示されるので、Get Channel Email Addresをクリックします。
send_email_to_slack_2.png

チャンネルのメールアドレスが表示されるので、このアドレス宛にメールを送ればslack通知されます。
send_email_to_slack_3.png

slackのメールアドレス宛にメールを送信

メールの宛先に先ほどのslackチャンネルのアドレスを追加すればOKです。

たったこれだけでSlack通知ができてしまうのですが、より実用的になるようにGASを使ったアプリのslack通知もやってみます。gmailの検索条件に当てはまるメールをslackに通知する、という例でslack通知をやってみましょう。
ソースコードは【GAS】Gmailで自由に転送するを参考にしています。

ドライブを開き、新規> その他> GoogleAppsScriptをクリックします。
gastest.png

以下をコード.gsにコピペ

function transferEmail() {
  const addressTo = "*******";// CHANGE_ME slackのアドレスをコピペ
  const searchCondition = "******";// CHANGE_ME

  const now = Math.floor(new Date().getTime()/1000); 
  const intervalTime = 0.5; //0.5時間毎に実行されるようにトリガーを設定
  const term = now - 3600 * intervalTime;
  const str = searchCondition + ' ' + 'after:' + term;

  const myThreads = GmailApp.search(str, 0, 30);
  const myMsgs = GmailApp.getMessagesForThreads(myThreads);

  if(myMsgs.length == 0)
    return null;

  myMsgs.map(function(msgs) {
    const msg = msgs[0];   
    MailApp.sendEmail({
      to: addressTo,
      subject: msg.getSubject(),
      body: msg.getPlainBody(),
      attachments: msg.getAttachments()
    });
  });
}

addressToに先ほどコピーしたslackチャンネルのアドレス、searchConditionにメールの検索条件をコピペします。
検索条件はgmailの画面を開いて実際に検索してみるのが早いです。
例えば自分宛のメールをslackに転送したい場合は、gmailアプリの画面で to hogehoge@example.com という条件を作成して、それをそのままコピペすればOKです。
フィルタ設定とかしている人はそこで条件作成していると思うので、それを貼り付ければOKです。

transferMail.png

  const searchCondition = "to hogehoge@example.com";// CHANGE_ME

みたいにすればOKです。

ソースコードの修正が完了したら、トリガーを実行しますが、その前に一度実行して動作確認してみましょう。
実行> transferEmail から実行すると、以下の様な許可が求められるので、ログインして許可します。

transfarEmailTest - Google Chrome 2020-12-14 11.31.png

ログイン - Google アカウント - Google Chrome 2020-12-14 11..png

許可後、該当のチャンネルに投稿されれば動作確認完了です。

次にトリガーを設定します。上記例では30分毎にメールをチェックするようにしているので、30分毎のトリガーをセットしておきましょう。(const intervalTime = 0.5; を書き換えれば好きな時間でのトリガーのセット可能です。)

transfarEmailTest - プロジェクトのトリガー - Apps Script - Go.png

通知の様子

こんな感じで通知が飛びます。
send_email_to_slack5.png

開くとこんな感じ。
上に送信元のアドレス、件名、日付、下に本文が確認できます。
send_email_to_slack_4.png

どういうところで使えそうか。

  • GASでアプリ作ってみたけど、通知は簡単でいい。
  • メールソフト開きたくないので、見る必要のあるメールはslack転送したい。
  • メールで来る問い合わせを専用のチャンネルに通知したい。
  • 勤怠メールの宛先に追加して、勤怠情報をチームチャンネルにも通知したい。
  • 今までメールに通知する形で運用していたツール等をslackに移行するのがめんどい。

欠点

以下の様な欠点もあります。それは困る、という場合はwebhook等利用してアプリを作成しましょう。

  • 単体だとメンションが出来ない(多分)。
  • フォーマットが固定

まとめ

slackへのメール通知をwebhook使わずにやってみました。
今回はメールを単純に転送するだけでしたが、MailApp.sendEmail の宛先をslackチャンネルのアドレスにすることで、GASで作ったアプリのslack通知も簡単に実現できます。

また、今までメールに通知していたような情報(環境メンテナンス等の情報、リリースに関連するチェック、各種お知らせ等)については、GASを書く必要すらなく、宛先にslackチャンネルのアドレスを追加するだけでslack通知できます。もしくは今回実装したメール転送アプリを利用することで既存の仕組みに手を入れることなくslack通知することも可能です。

通知をなるべく1カ所に集約したいという人は多いと思うので、確認のために毎日メールアプリ開きたくない、という人はぜひ試してみてください。

8
0
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
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?