特定のメールに対して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();
}
}
似たような処理や使い方で、他の使い方にも応用出来るかと思います。
とりあえず、初めてにしてはぼちぼち上手いことできたかな〜という感じです。