Skip to content

Instantly share code, notes, and snippets.

@Atsumi3
Created April 3, 2023 09:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Atsumi3/6145a50345840cf14a4b81b74774cd68 to your computer and use it in GitHub Desktop.
Save Atsumi3/6145a50345840cf14a4b81b74774cd68 to your computer and use it in GitHub Desktop.
タイトルに特定アプリ名を含むメールを受信したらSlackに通知するgs
/**
* ここから始まる
* @param {string} appName - アプリ名
* @param {string} fromAddress - 送信元アドレス
* @param {string} slackChannelName - 投稿先チャンネル名
* @param {string} slackMessageIcon - 投稿メッセージアイコン
* @param {string} slackMessageUserName - 投稿者名
* @param {string} webhookUrl - 投稿スペースのWebhookUrl
*/
function run_(appName, fromAddress, slackChannelName, slackMessageIcon, slackMessageUserName, webhookUrl) {
// 送信元アドレスからのメールを最新から10件取得する
let mailSearchResult = GmailApp.search(`from:${fromAddress}`, 0, 10);
// 指定したアプリ名がタイトルに含まれるメールをスレッドごと抽出
// messages[][]
let messages = GmailApp.getMessagesForThreads(mailSearchResult).filter((e) => e[0] && e[0].match(appName));
// 指定したアプリ名がタイトルに含まれるメールがなかったら終わり
if(messages.length == 0) {
Logger.log(`${appName} がタイトルに含まれているメールはありませんでした`);
return;
}
// 最新のメールから未読のスレッドメッセージを取得
let unreadThreadMessages = messages[0].filter(e => e.isUnread());
// 未読がなかったら終わり
if(unreadThreadMessages.length == 0) {
Logger.log("未読のメッセージはありませんでした");
return;
}
// 最新の未読メッセージを取得
let latestAppleMessage = unreadThreadMessages.slice(-1)[0];
// Slack投稿用のペイロード作成
let payload = {
"username": `[${appName}] ${slackMessageUserName}`,
"icon_emoji": `${slackMessageIcon}`,
"channel": `${slackChannelName}`,
"text": `${latestAppleMessage.getSubject()}`
};
// Slackへ通知
let options = {
'method': 'post',
'contentType': 'Content-type: application/json; charset=utf-8',
'payload': JSON.stringify(payload).replace(/":"/g, "\"\:\"")
}
let postResult = UrlFetchApp.fetch(webhookUrl, options) || false;
if (!postResult || postResult.getResponseCode() != 200) {
Logger.log("Slackへのポストに失敗しました");
return;
}
// スレッドの未読を既読に変更
unreadThreadMessages.forEach(e => e.markRead());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment