3
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 3 years have passed since last update.

【GAS】Gmailへの特定のメールを正規表現を使いながらスプレッドシートに転記する

Last updated at Posted at 2020-04-08

Qiita初投稿です。ノンプログラマですが、いつも記事を楽しく読んでいます。
プログラミングの知識が不足しており、汚いかもしれませんが、ご容赦ください。

コード

qiita.js
//シートを取得する。
var sheet = SpreadsheetApp.getActiveSheet();

function getMail() {
  
  // メール検索する文字列:今回は件名の【HP問合せ】
  var str = "HP問合せ";
  
  // 上記の文字列に合致するスレッドを取得(とりあえず100件取得します)
  var threads = GmailApp.search(str,0,100);
  
  // メッセージを取得する
  var messages = GmailApp.getMessagesForThreads(threads);
  
  for(var i = 0; i < messages.length; i++){
    for(var j = 0; j < messages[i].length; j++){
      
      //メッセージIDを取得(重複を防ぐため)
      var messageId = messages[i][j].getId();
      
      //もし、スプレッドシートに存在したら実行しない
      if(!hasId(messageId)){
       //メール受信日時を取得
       var mailDate = messages[i][j].getDate();

       // メッセージの本文をプレーンテキストで取得
       var body = messages[i][j].getPlainBody();
           
       //正規表現をつくる
       var regName = new RegExp('氏名 :' + '.*?' + '\r' );
       var regMail = new RegExp('メールアドレス :' + '.*?' + '\r' );
       var regTel = new RegExp('電話番号 :' + '.*?' + '\r' );
       var regMemo = new RegExp('備考 :' + '.*?' + '\r' );
      
       //正規表現をマッチさせたうえで、転記するときに、
       //セルに"お名前:"などが入らないように、正規部分を削る
       var Name = body.match(regName)[0].replace("氏名:","");
       var Mail = body.match(regMail)[0].replace("メールアドレス :","");
       var Tel = body.match(regTel)[0].replace("電話番号 :","");
       var Memo = body.match(regMemo)[0].replace("備考 :","");

       //セルに行を追加する(ID、日時、氏名、アドレス、電話番号、備考)
       sheet.appendRow([messageID,mailDate,Name,Mail,Tel,Memo]);
       }
     }
  }      
}

// 同じIDのメールは転記しないようにするため、すでにIDがあるかどうか調べる関数
function hasId(id){  
   //今回は1列目にメールIDを入れていくので1列目から探す
    var data = sheet.getRange(1, 1,sheet.getLastRow(),1).getValues();
    var hasId = data.some(function(value,index,data){
   //コールバック関数
    return (value[0] === id);
  });
  return hasId;
}

一旦、出来上がりました。
1日に2回発動するようにトリガーも設定しました。
トリガーの設定は以下のようなものです
【GAS】トリガーの設定

##参照したもの

書籍
Google AppScript完全入門
関数の意味などを調べる用に辞書的に使いました。
作者の高橋さんは、日本のGASリテラシー向上に最も貢献している人に違いない。

GAS勉強しようと思ったとき、おそらくこの本が一番情報量が多いです。

ただ、一からこれ見て勉強するやり方よりも、自分がやりたいことの似たような例をググりながら、辞書的にこの本を参照するのが一番良いと思います。

ブログ
GASでフォーム送信メールからデータを取得してスプレッドシートに蓄積するツールの完全版
同じメールを転記しないようにするためのコードで参照しました。
Google AppScript完全入門の作者の高橋さんのブログ、
GASで分からないことがあってググったら、彼のブログはほぼ確実に出てくる。

【GAS】正規表現を使ってGmailの本文から文章を抜き出す
本文中の文言を項目ごとに別のセルに転記したかったので、
メール本文の特定の文言を抽出するために、
正規表現についてはこの記事を参考にしました。

どこかの企業のブログですが、筆者が同じノンプログラマだったので、分かりやすかったです。

以上です。

このメールからシートへの転記の作業ですが、
社内でも私以外に似たような作業をしている人はいそうなので、手伝いにいきたいなと思います。

3
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
3
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?