仕事でGoogle App Script(GAS)を使うケースが出てきそうなので、休日なれど、自主勉してみた。
やりたいことは、オンラインショップの注文メールの中から、必要な事項を取り出して、スプレッドシートに格納するというもの。
けどもGoogle先生に聞いてもなかなかよい答えを得られなかった。
そこで、自分で試行錯誤して作ってみた。
こちらのブログのコードをほとんど引用させていただいた。
ありがとうございます。
[Google Apps Script]メール情報をスプレッドシートに書き出す | Developers.IO
コードの最初の部分(スプレッドシートをクリア)と、最後の部分(match(/お名前(.+)/))だけは、私のオリジナル・・・。
function searchContactMail() {
// 書き込み先のスプレッドシートをクリア
var sheet = SpreadsheetApp.getActiveSheet();
sheet.clear();
/* Gmailから特定条件のスレッドを検索しメールを取り出す */
var strTerms = 'label:y寺田屋商店'; //メール検索条件
var numMailMax = 3; //取得するメール総数
var numMail = 3; //1度に取得するメール数
var myThreads; //条件にマッチしたスレッドを取得、最大500通と決まっている
var myMsgs; //スレッドからメールを取得する →二次元配列で格納
var valMsgs;
var i = SpreadsheetApp.getActiveSheet().getLastRow();
if(i<numMailMax) {
valMsgs = [];
myThreads = GmailApp.search(strTerms, i, numMail); //条件にマッチしたスレッドを取得、最大500通と決まっている
myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納
/* 各メールから日時、送信元、件名、内容を取り出す*/
for(var j = 0;j < myMsgs.length;j++){
valMsgs[j] = [];
valMsgs[j][0] = myMsgs[j][0].getFrom();
valMsgs[j][1] = myMsgs[j][0].getReplyTo();
valMsgs[j][2] = myMsgs[j][0].getTo();
valMsgs[j][3] = myMsgs[j][0].getDate();
valMsgs[j][4] = myMsgs[j][0].getSubject();
// 行を取り出したいときは、このやり方で
// var body = myMsgs[j][0].getPlainBody();
// var lines = body.split('\r\n');
// valMsgs[j][5] = lines[4]; //4行目をとってくる
// 正規表現でキーワード文字以降を取り出したいときは、このやり方で
valMsgs[j][5] = myMsgs[j][0].getPlainBody().match(/お名前(.+)/);
valMsgs[j][6] = myMsgs[j][0].getPlainBody().match(/ふりがな(.+)/);
valMsgs[j][7] = myMsgs[j][0].getPlainBody().match(/郵便番号(.+)/);
// キーワード文字自体を出力したくないときは、[slice]を使うらしいが、うまくいかない・・・
// valMsgs[j][5] = myMsgs[j][0].getPlainBody().match(/お名前(.+)/).slice(1);
// valMsgs[j][6] = myMsgs[j][0].getPlainBody().match(/ふりがな(.+)/).slice(1);
// valMsgs[j][7] = myMsgs[j][0].getPlainBody().match(/郵便番号(.+)/).slice(1);
}
/* スプレッドシートに出力 */
if(myMsgs.length>0){
SpreadsheetApp.getActiveSheet().getRange(i + 1, 1, j, 8).setValues(valMsgs); //シートに貼り付け
}
}
}
作るのに2時間かかった。
うれしさひとしお。
ただ、slice(1)にしたら3文字カットされるのは、なぜなのか、不明だ。課題。