Google Apps Scriptを試してみる...

 メール からフィルタリング(検索)したメール(複数)の本文からある特定の文字を取得してログ出力なり、ファイル出力(スプレッドシート等)したいという事案があり、たまたまGMailを使っていたということもあり、GAS(Google Apps Script)でメール本文から必要な情報を取り出す処理を書いてみた。


まずは、GMailから対象となるメールをフィルタリングするのコマンドを使用

GmailApp.search(”GMailでフィルタリグ(検索)するときの文字列”);

このコマンドにより対象となるメールのスレッドが取得できるので変数に格納し、その後スレッドからメッセージを取得、メッセージより本文を取得、取得した本文から必要な部分を取得という流れ... 必要な部分は本文より正規表現で切り出した。


具体的には以下のコードの通り


function myFunction() {    

    var query = "subject:([CodeZine News 2020/) after:2020/5/6 before:2020/7/7";

    var threads = GmailApp.search(query);

    for(var i = 0; i < threads.length; i++) {

        var thread = threads[i]; 

        var messages = thread.getMessages();

        for(var j = 0; j < messages.length; j++) {

            var message = messages[j];

            var body = message.getPlainBody()    

            if (body.match(/http.*?\r/g)) {

                console.log(body.match(/http.*?\r/g).toString().replace('\r',''));

            }

        }

    }

}



上記では、取得した本文(getPlainBody)より、httpで始まるURLを抜出し、改行コード(\r)を空文字へ置換しているが、

置換の際に、body.match(/http.*?\r/g).toString().replace('\r',''));

toString()をしている(数字など文字以外のものが混ざっている場合必要)

これがないと body.match(/http.*?\r/g).replace('\r',''));
エラー(TypeError: body.match(...).replace is not a function)になる。not functionなので関数がない、スペルミスなり引数の書き方なのかと思ったりするかもしれないがそうではない、TypeErrorとでているじゃありませんか!!

慣れないとエラーが少々わかりづらいような気もするが慣れてしまえば・・・Google Apps Scriptを使うにあたり、スクリプトで必要な OAuth (権限)スコープやその他事前に知っておくべきことなどある程度慣れてくればリファレンスをもとにいろいろと使えそう。


Han The World

お出かけ、食、読書、システム構築やプログラミングに関する徒然なるブログ

0コメント

  • 1000 / 1000