GASを使ってGmailをSlackに転送する方法

会社でGmailの通知をSlackに転送したいって頼まれたんだけど、どうしたらいいのか全然わからなくて…
猫男
猫男
catman
catman
大丈夫だ。君にはcatmanがついている。GASを使って、GmailをSlackに転送することも可能だ。教えてやろう。

GASを使ったGmailからSlackへの転送: 基本の考え方

GASを活用すれば、GmailのメールをSlackに通知することができます。メールを特定の条件でフィルタリングし、Slackに適切に転送する流れです。

前準備:SlackとGmailの設定

このプロジェクトを始める前に、いくつかの事前準備が必要です。まず、SlackのウェブフックURLを取得し、GASプロジェクトを用意します。

SlackのウェブフックURLの取得

SlackのIncoming Webhooksを使って、外部からメッセージを送信できるURLを生成します。これにより、GASからSlackチャネルにメッセージを投稿可能になります。

Slackの管理画面へアクセスし、Webhookを有効にします。生成されたURLは後ほどGASのスクリプトに組み込みます。

GASプロジェクトの作成

GASを開き、新しいプロジェクトを作成します。このプロジェクト内でGmailからSlackへの転送スクリプトを構築します。

準備が整ったね!次は実際にコードを書く感じ?
猫男
猫男
catman
catman
そう。次に、GASでスクリプトを書くステップを説明する。

GASスクリプトの作成: GmailメールをSlackに転送

まずは基本的なスクリプトを作成しましょう。Gmailの新着メールを特定の条件で検索し、その内容をSlackに送信する仕組みを構築します。

GMAIのメールをフィルタリング

フィルタリングによって、転送したいメールだけを選びます。例えば、特定の件名や送信者を基準にすることが可能です。

 function getUnreadEmails() {
 const label = GmailApp.getUserLabelByName("Slack転送");
 const threads = label.getThreads();
 return threads;
 }

この関数は、ラベル「Slack転送」がつけられた未読のメールを取得します。

Slackへメッセージを送信

Gmailのメール内容を使ってSlackへメッセージを送信します。

function sendToSlack(content) {
 const webhookUrl = "YOUR_SLACK_WEBHOOK_URL";
 const payload = {
 'text': content
 };
 const options = {
 'method': 'post',
 'contentType': 'application/json',
 'payload': JSON.stringify(payload)
 };
 UrlFetchApp.fetch(webhookUrl, options);
}

この関数では、取得したメールの内容をSlackの指定チャンネルに投稿します。

組み合わせてすべての流れを組み立てる

これらの関数を組み合わせて、一連の処理を自動化します。

function main() {
 const emails = getUnreadEmails();
 for (let i = 0; i < emails.length; i++) {
 const message = emails[i].getFirstMessageSubject();
 sendToSlack("新しいメールがあります: " + message);
 emails[i].markRead();
 }
}

このスクリプトは、取得したメールを順番にSlackに通知し、通知後にメールを既読にします。

思ったより簡単にできそう!これでGmailとSlackの連携が進められそう!
猫男
猫男
catman
catman
確かに簡単だろう。しかし、Slackの通知で大事なのは不要な情報を流し過ぎないこと。必要な情報だけを送り込むよう慎重に設定するんだ。

練習問題

次の問題を解いて、GASスクリプトの理解を深めてみましょう。

  1. Gmailの未読メールをフィルタリングする関数を作成しなさい。ただし、件名に「重要」と含まれるメールのみを対象にします。
  2. Slackのウェブフックで通知を送る際、「送信者名」と「件名」を含めるように関数を改善しなさい。

解答と解説

function getImportantEmails() {
 const threads = GmailApp.search("label:unread subject:重要");
 return threads;
}

GmailAppのsearchメソッドを使用し、ラベル「未読」と件名に「重要」を含むメールを取得します。

function sendDetailedToSlack(sender, subject) {
 const webhookUrl = "YOUR_SLACK_WEBHOOK_URL";
 const payload = {
 'text': "新しいメールです\n送信者: " + sender + "\n件名: " + subject
 };
 const options = {
 'method': 'post',
 'contentType': 'application/json',
 'payload': JSON.stringify(payload)
 };
 UrlFetchApp.fetch(webhookUrl, options);
}

この改善された関数では、Slackの通知メッセージに「送信者名」と「件名」を含めて、受信者が即座に文脈を理解できるようにしています。

EARTHPG 自動化研究所

「その作業、仕組みにできます。」

Google Apps Script、Python、スプレッドシート自動化、WordPress開発、 API連携、AI活用まで対応。 小さな自動化から業務全体の設計まで、研究所が支援します。