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への転送スクリプトを構築します。
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に通知し、通知後にメールを既読にします。
練習問題
次の問題を解いて、GASスクリプトの理解を深めてみましょう。
- Gmailの未読メールをフィルタリングする関数を作成しなさい。ただし、件名に「重要」と含まれるメールのみを対象にします。
- 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の通知メッセージに「送信者名」と「件名」を含めて、受信者が即座に文脈を理解できるようにしています。