Initial Site

Initial Site

Initial Site

GASを使ってGmailから本文の一部を抜き出す

  • ヨシモト  2018/01/11 19:39
tokuige

営業部 ヨシモトです。

 

Google Apps Script(以下、GAS)については以前簡単にお話しました(期間が空いてしまいました)が、うまく扱うことができると便利です。

今回はGASを使って、Gmailから受信日時や本文の一部を抜き出しスプレッドシートに入力する方法をご紹介します。

メールから文章を抜き出すこともプログラマーさんならばいとも簡単ですが、
我々ノンプログラマーにとっては未知の領域です。

是非とも覚えてみましょう。

 

こんな時に使いたい

例えば、お問い合わせフォーム経由でいただいたお問い合わせ内容を下記のようなメールで受け取っているとします。

—————-

≪お客様≫からお問合せがありました。

内容は以下の通りです。

■ご用件:資料請求について
■お名前:ヨシモト
■ご連絡先電話番号:090-****-****
■ご連絡先メールアドレス:sample@example.com
■お問い合わせ内容:資料を送ってください。
■送信元:スマートフォン

—————-

そして、これまでに受け取ったお問い合わせから、

  • ・問い合わせの多い用件は何か
  • ・問い合わせはパソコン、スマートフォンそれぞれどれくらいの割合なのか

等を調べたい時に使いたいですね。

少数であれば1通1通開いても良いですが、数百件、数千件といった場合にこそ役に立ちます。

 

実践


function getMailToiawase(){
    var sheet = SpreadsheetApp.getActiveSheet();
    var serach = '("お問合せがありました")';
    var start = 0;
    var max = 100;
    var thds = GmailApp.search(serach,start,max);
    var row = 1;
    for(var n in thds){
        var thd = thds[n];
        var msgs = thd.getMessages();
        for(m in msgs){
            var msg = msgs[m];
            var date = msg.getDate();
            var body = msg.getBody();
            var bodys= body.replace('■ご用件:','')
              .replace('■送信元:','');

           // 改行を使って配列化する
         var ary = bodys.split("\n");
          
            // ご用件の行を取得し文字を抽出
            var yoken = ary[4].substring(0).replace('\r','');
    
            // 送信元の行を取得し文字を抽出
            var dvi = ary[9].substring(0).replace('\r','');
          
            sheet.getRange(row,1).setValue(date);
            sheet.getRange(row,2).setValue(yoken);
            sheet.getRange(row,3).setValue(dvi);
            row++;
        }
    }
  var range = sheet.getRange("A:C");
  range.sort({column: 1, ascending: true});
}

こんなふうにします。

 

すると

gasresult

できました!(本当に2件ならGASを使う必要がありません!)

 

解説

このスクリプトの中をいくつかピックアップして解説します。

 

var serach = ‘(“お問合せがありました”)’;
Gmailの中を「”お問合せがありました”」で検索します。

 

 

var ary = bodys.split(“\n”);

※↑のコードの¥マークは本来バックスラッシュですのでコピペの際はご注意ください。

本文を改行ごとに配列化します。
(本文を取得しただけでは文字の集合であるだけなので、ここから欲しい情報を指定する必要があります。
今回は改行毎に並べることで「*行目を取得」と指定できるようにします。)

 

replace(‘■ご用件:’,”)

「■ご用件:」はスプレッドシートの中に不要なので replace で空欄に置き換えています。

 

var yoken = ary[4].substring(0).replace(‘\r’,”);

ご用件はメールの5行目にあるのですが、1行目から[0]と数えるためary[4]で5行目と指定、抽出します。

※2018/02/15 追記
このままだと改行も含まれるため、用件を抽出と同時に改行を空欄に置き換えます。
sheet.getRange(row,1).setValue(date);
sheet.getRange(row,2).setValue(yoken);
sheet.getRange(row,3).setValue(dvi);

A列に日時
B列にご用件
C列に送信元が入力されるようにします。

 

var range = sheet.getRange(“A:C”);
range.sort({column: 1, ascending: true});

最後に「A列が昇順」になるようにA列からC列を並び替えています。
(trueをfalseに置き換えると降順にできます。)

 

その他の使い方

データの量がものすごく多い場合はこのスクリプトでデータベース用のシートを作成し、
必要な情報だけを別なシートで取得するといった使い方もできます。

その時はVLOOKUP関数やQUERY関数、ARRAYFORMULA関数を組み合わせて使うとより効率的でしょう。
ちなみにQUERY関数やARRAYFORMULA関数はエクセルにはなく、スプレッドシートならではの機能です。

次回はエクセルにはない、スプレッドシートの便利な関数をご紹介します。

 

それでは!!

 

※2018/1/25 更新

上記で取得したデータをCOUNTIF等で扱おうとした場合、このままでは取得できません。
パッと見ではわかりにくいですが後ろに改行が含まれています
こんな感じです→パソコン\r
ですので、Ctrl + Fで検索ウィンドウを開き「その他のオプション」で、
「正規表現を使用した検索」にチェックを入れ、
「\r」を検索し「(空欄)」に置換しましょう。

すると、これでCOUNTIF等で扱えるようになります。

改行について

 

※2018/02/15 更新

「\r」を空欄に置換する方法は煩わしいので、本文取得の際に「\r」もreplaceで空欄に置き換えられるようにスクリプトを更新しました。

これでそのままスプレッドシートで利用できます。

 

※2018/06/04 追記

行数を指定せずに抜き出す方法について新たに記事を書いたのでリンクを貼っておきます。

【GAS】正規表現を使ってGmailの本文から文章を抜き出す


この記事へのコメント

    • テレンスリー さん
      2018年1月24日 11:42 AM
    • 返信

    わかりやすい記事ですね!
    参考にさせていただきました。

      • ヨシモト さん
        2018年1月25日 4:11 PM

      テレンスリー さん
      コメントありがとうございます。
      今後もこのような内容を書きますので、よろしければご覧ください。

コメントをどうぞ

ツールの記事

  1. createSSAsan
    【簡単】GASでメールを送る
  2. Vimが辛い人
    Vimが使いにくい人はVimiumからはじめてみたらいいかもしれない
  3. 正規表現を使う
    【GAS】正規表現を使ってGmailの本文から文章を抜き出す
  4. webScraping_boy
    スプレッドシートを使って簡単なスクレイピングをしてみよう

おすすめ記事

  1. スギ花粉
    鼻がムズムズ目がカユカユな花粉症についてまとめてみた
  2. 『テレビ観ないんだよね…』と言うのがかっこいいと思っている人に告ぐ!
  3. 出典:無料壁紙:格闘技がテーマの写真やイラスト画像まとめ(格闘家・ブルースリー)
    ブルース・リーの出身地ってどこだかわかりますか?
  4. ハイビスカス
    ウチナーンチュが沖縄に帰った時に必ず行くお店10選+α
  5. イニシャルサイトコーポレートサイト
    コーポレートサイトをリニューアルしました
  6. なんでもQ
    相談Q&Aサイト「なんでもQ」開発中です!
  7. さんぽすフォトコンペ開催中
    今年もさんぽすフォトコンペ開催しました!

人気の記事

  1. クロックスの偽物と本物の違い
    クロックスの本物と偽物の違いを比べてみました
  2. ファミコン
    パズドラ、モンスト、白猫に続く次のゲームは…?
  3. konagaya_20150303
    日常でつい使ってしまう間違えやすい日本語
  4. konagaya20150513
    初心者でも気軽に登れて絶景が見れる山