GASでGmail本文の一部を抽出してスプレッドシートに書き出す方法

今回の記事ではGoogleAppsScriptを使い、
Gmailの本文を抜き出して、スプレッドシートに出力する方法を紹介します。

目次

Gmail本文の一部を抽出してスプレッドシートに出力するサンプル

次のようなメールの内容からそれぞれ、注文番号・商品・価格の値をとってみます。

注文番号:XXX
商品:YYY
価格:ZZZ

function myFunction(){
  var mailQuery = 'subject:テスト from:xxxxx@gmail.com after:2019/10/24';
  var threads = GmailApp.search(mailQuery);
  var messages = GmailApp.getMessagesForThreads(threads);
  var sheet = SpreadsheetApp.getActiveSheet();
  for(var i=0; i<messages.length; i++){
    var plainBody = messages[i][0].getPlainBody();
    sheet.appendRow([plainBody.match(/注文番号.*/)[0].replace('注文番号:', ''), plainBody.match(/商品.*/)[0].replace('商品:', ''), plainBody.match(/価格.*/)[0].replace('価格:', ''),])
  }
}

このサンプルを動かすと、特定の件名・メールアドレスから受信して、2019/10/24以降に受信したメールの内容から
XXX、YYY、ZZZを取ってきてスプレッドシートへと出力します。

順に解説していきたいと思います。

本文を抽出したいGmailを取ってくる

あなた宛てのGmailにはいろいろなメールが飛んできているかと思います。
特定のメールに対して処理をしたい場合には、GmailApp.searchを使って絞り込んであげる必要があります。

今回のサンプルでは、件名・送信元メールアドレス・受信日時を指定しています。

  var mailQuery = 'subject:テスト from:xxxxx@gmail.com after:2019/10/24';
  var threads = GmailApp.search(mailQuery);

他にも絞り込む方法やGmailApp.searchでの使い方の注意点をこちらにまとめています。

あわせて読みたい
【GAS】GmailApp.searchを使ってGmailをさまざまな条件で取得する使い方 今回の記事は、GoogleAppsScriptでGmailを取ってくるときに使う、GmailApp.searchの使い方についてまとめました。 【GmailApp.searchで日付を指定する】 GmailApp.searc...

正規表現を使って本文の一部を抽出する

本文の一部を抽出したい場合にはmatchを使ってあげる必要があります。
matchは条件に合致した部分の文字列を取ってくることができます。
取ってきたい文字列が固定であれば正規表現を使う必要はありませんが、
注文番号から始まる後ろの値が取りたいなど、何かしら固定されている後ろの文字列を
取ってきたい場合に正規表現が活躍します。

getPlainBody()で本文全文を取ってきてあげて、
plainBody.match()のところでとってきています。

    var plainBody = messages[i][0].getPlainBody();
    sheet.appendRow([plainBody.match(/注文番号.*/)[0].replace('注文番号:', ''), plainBody.match(/商品.*/)[0].replace('商品:', ''), plainBody.match(/価格.*/)[0].replace('価格:', ''),])

注文番号.となっていますがこれは注文番号と始まり改行までを取ってきてくれるといった書き方になります。
なので、plainBody.match(/注文番号.
/)[0]では「注文番号:XXX」が取得されます。
注文番号:という文字列が邪魔なので、replaceを使って消してあげています。

今回はサンプルなので、一例でしたが正規表現はいろいろありますので、こちらの記事を参考にしてください。

スプレッドシートに出力する

スプレッドシートに出力するには、getRange等を使ってやる方法もありますが、
今回はシンプルに最終行にひたすら追加していくappendRowを使用しています。

あわせて読みたい
GASで最終行に追加する方法 最終行に自動的に追加していくようなプログラムを書きたいがわからない getLastRowを使うのはわかるが、他の列のデータが邪魔してうまく動かない そんな疑問にお答えし...


この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメント一覧 (1件)

目次