5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RPA(ロボティック・プロセス・オートメーション)Advent Calendar 2022

Day 14

コストコ会員限定メールマガジンがgmailに届いたらLINEに通知する

Last updated at Posted at 2022-12-13

こんにちは!
PRAアドベントカレンダー2022の14日目記事です
我が家では12月に必ずコストコへ行きますので、コストコ会員限定メールマガジンの通知を自動化したことを無理やり記事にしてみました
これのどこがRPA?業務改善?1㍉ぐらいはかすってないですかね
ごめんなさい🙇先に謝っておきます。

やったこと

gmailに本日届いた「コストコ会員限定メールマガジン」を抽出して、本文内のリンクをLINENotifyに転送する

gmailからメールを抽出する

GASでGメールを検索するにはGmailApp.searchの引数に検索演算子を含めた検索条件を文字列で指定します
検索条件はこのようにGメールの画面でフィルタリングした文字列をそのまま使用できるので、
コーディング後の状態がイメージしやすくて助かります
image.png
Gメール標準の検索演算子はこちら

検索結果は2次元配列のメールスレッドに格納されているので、ループしながら1件ずつ読みこんでいきます

main.js
    const today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
    const query = `from:コストコ会員限定メールマガジン after:${today}`;
    const threads = GmailApp.search(query);
    threads.forEach(thread => {
        const gmails = thread.getMessages();
        gmails.forEach(gmail => {
            // LINEへ通知する処理
        });
    });

メール本文からURLを抽出する

メール本文から抽出したいセールのURLは本文の4行目あたりに記載されています
先頭から10行ほどをピックアップして該当行からURLを直接抜き出します
本来ならURL文字列を検索する正規表現を使って抽出すべきなんでしょうが、
なぜか抽出できなかったので今後の課題としています

image.png

main.js
    const today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
    const query = `from:コストコ会員限定メールマガジン after:${today}`;
    const threads = GmailApp.search(query);
    threads.forEach(thread => {
        const gmails = thread.getMessages();
        gmails.forEach(gmail => {
            const bodylist = gmail.getPlainBody().split('\r\n').slice(0, 9);
            // 3行目と4行目の条件が一致したらリンクを送信する
            const findIndex = bodylist.indexOf('画像付メルマガはこちらでご覧いただけます。');
            if (findIndex > -1) {
                const url = bodylist[findIndex + 1].replace(' (PC専用サイト)', '');
                SendNotify(gmail.getSubject(), url);
            }
        });
    });

LINEへ通知する

LINEへの通知先は自分だけなので、今回はLINENotifyを使用しています
LINENotifyのアクセストークンはスクリプトプロパティに格納しておきます

notify.js
function SendNotify(title, url) {

    let message = title + '\n' + url;

    const token = PropertiesService.getScriptProperties().getProperty('ACCESS_TOKEN');
    let options = {
        "method": "post",
        "headers": {
            "Authorization": "Bearer " + token
        },
        "payload": {
            "message": message
        }
    }
    UrlFetchApp.fetch(url, options)
}

まとめ

プライベートで必要なことをちょこっと作るのは気が楽でいいですね
今回は特定のメール受信とLINEへの通知を自動化したのですが、
Gメールの検索条件や連携内容、連携先などが入れ替えできるような仕組みにしておけば
他で応用ができるので便利ですね

最後まで読んでいただき、ありがとうございました

補記:コストコ会員限定メールマガジンとは

コストコ会員限定メールマガジンに登録すると今週と翌週のセール情報を見ることができます。
毎週日曜日と木曜日の12時頃に届きます。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?