Gmailの内容をスプレッドシートに抽出する方法について

1,852 views
Skip to first unread message

04 kapi

unread,
Jul 15, 2020, 10:29:07 PM7/15/20
to Google Apps API Japan
Gmailの内容をスプレッドシートに抽出する方法について、javascript初心者で自分で調べながら色々試したのですが、改行部分が上手く取り出せませんでした。

メール本文は以下のような形です。

--------------------------------------------------
○○からお問い合わせがありました。
※××××××
--------------------------------------------------
【URL】
https://example.com/aaa/
 
お名前:田中太郎
住所:東京都新宿区

 
自分で調べながら作ったコードが以下です。
function myFunction() {
  var threads = GmailApp.search(' subject:(お問い合わせ)');
  
  threads.forEach(function(thread) {
    var messages = thread.getMessages();
    messages.forEach(function(message) {
  // 日付を取得
      var date = message.getDate();
      
      // 件名を取得
      var subject = message.getSubject();
      
      // メール本文を取得
      var plainBody = message.getPlainBody();
      
      // 本文内URLを取得
      var URL = plainBody.match(/【掲載URL】[\\s\\S]*\//);
      
      // 本文内名前を取得
      var name = plainBody.match(/お名前:(.*)/);
      
      // 本文内住所を取得
      var post = plainBody.match(/住所:(.*)/);
      
      // 本文内※以降の文章を取得
      var object = plainBody.match(/※(.*)/);
      
      // 書き込むシートを取得
      var sheet = SpreadsheetApp.getActive().getSheetByName('お問い合わせ');
      
      // 最終行を取得
      var lastRow = sheet.getLastRow() + 1;
      
      // セルを取得して値を転記
      sheet.getRange(lastRow, 1).setValue(date);
      sheet.getRange(lastRow, 2).setValue(subject);
      sheet.getRange(lastRow, 3).setValue(URL[1]);
      sheet.getRange(lastRow, 4).setValue(name[1]);
      sheet.getRange(lastRow, 5).setValue(post[1]);
      sheet.getRange(lastRow, 6).setValue(object[1]);
    });
    
  });
}


これだと【URL】の部分がnullになってしまい、上手く取り出せません。
また、※以降の文章はメールによってある場合とない場合があります。
※以降がないメールだとエラーが出てしまうのですが、どのように修正すれば良いでしょうか?

知識がないためおかしい部分も多いかとは思いますが、ご回答いただけますと幸いです。

Tanaike

unread,
Jul 16, 2020, 8:08:13 PM7/16/20
to Google Apps API Japan
メールの内容が必ず上記の提供されたフォーマットであると仮定することができると、例えば、次のような変更をするとどのような結果を得ることができるでしょうか。今の場合、提供されたサンプルでは"【URL】"ですが、スクリプトで使用されている正規表現は"【掲載URL】"と、異なるため、どちらでも可能なようにしてみました。修正箇所は2つありますのでご注意ください。

From

var URL = plainBody.match(/【掲載URL】[\\s\\S]*\//);

To

var URL = plainBody.match(/【.*URL】([\s\S]*)お名前/);

And

From

sheet.getRange(lastRow, 3).setValue(URL[1]);

To

sheet.getRange(lastRow, 3).setValue(URL[1].trim());


2020年7月16日木曜日 11:29:07 UTC+9 skm...@gmail.com:

hikochang

unread,
Sep 20, 2020, 10:03:48 PM9/20/20
to Google Apps API Japan

掲載URLとURLの違いではないですか?

私は以下のページの処理でプリペイドカードの決済のたびに送付されてくるメールをスプレッドシートに集計してます。


2020年7月16日木曜日 11:29:07 UTC+9 04 kapi:
Reply all
Reply to author
Forward
0 new messages