前提・実現したいこと
営業をやっています。問い合わせフォームからくる資料請求や打合せ希望のメールをスプレッドシートに転載し、営業メンバの方が共有できるようにリスト化するという作業が毎日発生しています。
Gmailに送られてくるこれらのお問合せのメールを、GASを用い、スプレッドシートに自動で転載できるようにできれば少しでも後輩の仕事が減ると思い、3日ほど前からGASの勉強をし始めました。
発生している問題・エラーメッセージ
エラーは発生していないのですが、期待しているようにデータがスプレッドシートに反映されず困っています。
反映したい問合せメールは以下の通りです。
ーーーーーーーーーーーーーーーーーーーーーーー
件名:【資料請求申し込み】
本文:
下記のお問い合わせがありました。
【会社名】
XXXXXXX株式会社
【部署名】
XXX部
【氏名】
XXX XXX
【メールアドレス】
XXXXXXXXXXXX@XXXXXXXXX
【電話番号】
XXXXXXXXXXXX
【お問合せ内容】
XXXXXXXXX
yyyyyyyyy
~
【デモンストレーション希望】
XXX
【知ったきっかけ】
XXX
【関心のあるテーマ】
XXX,yyy,ccc
【社員数】
1000名以上~
【検討状況】
XXXXXXXXX
yyyyyyyyy
~
ーーーーーーーーーーーーーーーーーーーーーーー
上記のメールをA~M列に以下のようにデータを反映したいです。
日付 件名 会社名 部署 。。。。。検討状況
しかし、私がいろいろ調べて作ったものだと日付と件名しか反映されませんでした。
また、本当に勉強不足で恐縮なのですが、調べて組み合わせたものだとそのスレッドの1番目のものしか抽出することができません。
お力をお借りできないでしょうか。
●改善したいこと
1.日付と件名だけでなく本文の内容も各項目に合わせてスプレッドシートに反映させたい。
2.該当スレッドの1通目の内容だけでなく、問い合わせフォームから24時間以内に送られてきたメールを1日1回全件スプレッドシートに反映させたい。(現状だと24時間以内に送られてきた該当スレッドの1通名のみ)
※なお、以下の記述コードで【お問合せ内容】や【検討状況】が複数行にわたる場合、正しく反映されるか現段階では判別がついていません。複数行にわたる文章の場合以下のコードでは対応できない場合それも合わせてご教示いただけると大変助かります。。。
該当のソースコード
GAS
1function fetchContactMail() { 2 3 /* Gmailから特定条件のスレッドを検索しメールを取り出す */ 4 var query = 'from:"xxx@gmail.co.jp" newer_than:1d'; //検索条件 5 var myThreads = GmailApp.search(query); //条件にマッチしたスレッドを取得 6 var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納 7 8 var valMsgs = []; 9 10 /* 各メールから日時、送信元、件名、内容を取り出す*/ 11 for(var i = 0;i < myMsgs.length;i++){ 12 13 valMsgs[i] = []; 14 valMsgs[i][0] = myMsgs[i][0].getDate(); 15 valMsgs[i][1] = myMsgs[i][0].getSubject(); 16 var plainBody = myMsgs[i][0].getBody(); 17 var company = /【会社名】\n.*?/; 18 valMsgs[i][2] = plainBody.match(company); 19 20 var department = /【部署名】\n.*?/; 21 valMsgs[i][3] = plainBody.match(department); 22 23 var name = /【氏名】\n.*?/; 24 valMsgs[i][4] = plainBody.match(name); 25 26 var email = /【メールアドレス】\n.*?/; 27 valMsgs[i][5] = plainBody.match(email); 28 29 var tel = /【電話番号】\n.*?/; 30 valMsgs[i][6] = plainBody.match(tel); 31 32 var demo = /【デモンストレーション希望】\n.*?/; 33 valMsgs[i][7] = plainBody.match(demo); 34 35 var contents = /【お問合せ内容】\n.*?/; 36 valMsgs[i][8] = plainBody.match(contents); 37 38 var channel = /【知ったきっかけ】\n.*?/; 39 valMsgs[i][9] = plainBody.match(channel); 40 41 var needs = /【関心のあるテーマ】\n.*?/; 42 valMsgs[i][10] = plainBody.match(needs); 43 44 var background = /【検討状況】\n.*?/; 45 valMsgs[i][11] = plainBody.match(background); 46 47 var employees = /【社員数】\n.*?/; 48 valMsgs[i][12] = plainBody.match(employees); 49 } 50 51 /* スプレッドシートに出力 */ 52 if(myMsgs.length>0){ 53 54 var sheet = SpreadsheetApp.getActive().getSheetByName('問合せ転記'); 55 var maxRow=sheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得 56 sheet.getRange(maxRow+1, 1, i, 13).setValues(valMsgs); //シートに取得したメッセージのデータを追加 57 58 } 59}
試したこと
補足情報(FW/ツールのバージョンなど)
HTML、CSS、簡単なマクロの知識程度しかないです。HTMLを見てfomrをいじったりができる程度で、jsやGASはこれから自分のスキルアップのために学ぼうとしているところです。
初歩的なところがわからず大変お手数をおかけしますが、ご指導いただけると嬉しいです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/04 09:18