見出し画像

特定のメールに対してSlackのチャンネルに通知を入れる方法

手法としては丸々この記事のままです。
こういう記事書いてくれてる方、ほんまに神〜!!

ようするに、
・有料プランで利用しているならSlackアプリで連携
・無料プランなら外部サービス(Zapier)で連携
という事になります。

「じゃあコレでいいじゃん」となるんですが、Zapierで連携を考える場合はZaiperのサービスで作成したアドレス宛に転送やメール送信をして、それをトリガーに通知を送る事になります。

ということは、外部サービスにメールを送ることになるわけで、メール内容が丸々残る転送で対応するのはちょっとためらう…ので、別の対応を挟む必要が出ました。
(「Gmailだって外部サービスですけど」とは思いますが、まあなんとなく気持ちはわかりますよね)

要するに、特定のメールが届いた場合に、転送以外の方法でZapierへメールを送信する必要があります。
ちょっと検討してみたのですが、Thunderbirdでは転送以外の方法ができなさそうでした。

というわけで、ここの下りに関しては
(1)通知対象のメールをGmailでも受信できるようにする
(2)Google apps Scriptで受信メールを検知し、定形メールをZapierへ送るようにする
という形で実現することにしました。

GASに関しては初めて利用する感じでしたが、いくつかの記事を参考になんとか作成出来ました。

それぞれ、メールの検索・メールの送信(定型文)・メールの既読化に参考にしています。

最終的には下記のようなコードを作りました。
(あんまキレイじゃないですが、ご勘弁ください…💦)

/* 定型文でのメール送信処理 */
function mailSend() {

//送信先、最終的にZapierのアドレスになります
 var recipient = '******@abcd.com'; 
 var subject = '通知タイトル';
 var body = `通知本文`;
 var options = {name: '送信者名'};

 GmailApp.sendEmail(recipient, subject, body, options);

}

/* 該当メールの既読化処理 */
function markReadAll() {
 
 var MRAsearchTerm = ('subject:対象タイトル is:unread');
 var MRAThreads = GmailApp.search(MRAsearchTerm, 0, 500);
 
 for (i=0; i<Threads.length; i++){
   MRAThreads[i].markRead();
 }
 
}

/* メールサーチ + 送信・既読処理 */
function main() {
 
 var searchTerms =  ('subject:対象タイトル is:unread');
 var myThreads = GmailApp.search(searchTerms);
 var myMsgs = GmailApp.getMessagesForThreads(myThreads);
 
 if(0 < myMsgs.length){
   mailSend();
   markReadAll();
 }
 
}

似たような処理や使い方で、他の使い方にも応用出来るかと思います。
とりあえず、初めてにしてはぼちぼち上手いことできたかな〜という感じです。

いいなと思ったら応援しよう!