前提・実現したいこと
Google Apps ScriptでGmailの特定のフィルターにマッチした受信メールのみ本文から一部情報を抽出し、スプレッドシートに転記するスクリプトを作成しようとしています。
発生している問題・エラーメッセージ
GmailApp.searchで検索するとスレッドに対して検索するため、スレッド内のいずれかのメールにクエリがマッチすると、スレッド内の同じメールを返却してしまい、同じ情報が延々とスプレッドシートに転記されてしまいます。
フィルターの設定は、「未読になっている特定の件名のメール」としています。
メールの送受信の流れが以下だった場合、
1.クライアントが特定の件名でメールを送信する。(TO:自分、CC:会社の同僚)
2.会社の同僚が1のメールに返信する。(TO:クライアント、CC:自分)
3.2のメールに対してクライアントが返信する。(TO:会社の同僚、CC:自分)
この状態で、「クライアントが自分宛てに送った未読になっている特定の件名」を検索すると、自分宛てではない会社の同僚が送ったメールや、クライアントからの返信も取得できてしまいます。
希望としては1のメールのみシートに転記し、2と3については除外したいです。
なお、自力でメール単位のフィルタをしたら良いのでは?と考えましたが、力不足で実装までは出来ていません。
この場合の解決方法などご存知の方いらっしゃいましたらアドバイスいただけますでしょうか。
よろしくお願いいたします。
該当のソースコード
gs
1function main() { 2 3 //Gmailから特定条件のスレッドを検索しメールを取り出す 4 //外部からの返信やチーム内での返信は除外する 5 var query = '(is:unread "問い合わせ")'; 6 query = ' OR (in:spam "問い合わせ")'; 7 query = ' OR (- "RE")'; 8 query = ' OR (- "Re")'; 9 query = ' OR (- "FWD")'; 10 query = ' OR (- "Fwd")'; 11 12 //条件にマッチしたスレッドを取得 13 var myThreads = GmailApp.search(query, 0, 1); 14 //スレッドからメールを取得する →二次元配列で格納 15 var myMsgs = GmailApp.getMessagesForThreads(myThreads); 16 for ( var i = 0 ; i < myMsgs.length ; i++ ) { 17 var msid = myMsgs[i][0].getId();//メッセージIDを取得 18 19 //受信日時、本文、パーマリンクの情報を取得 20 var date = myThreads[i].getMessages()[j].getDate(); 21 var mailBody = myMsgs[i][0].getPlainBody(); 22 var link = myThreads[i].getPermalink(); 23 24 // 正規表現マッチにより、メール本文から情報を抽出する。 25 var extractionInformation = new RegExp(' 抽出情報1' + '.*?' + '\r' ); 26 var eInformation = mailBody.match(extractionInformation)[0].replace(' 抽出情報1:', '').replace('\r', ''); 27 28 } 29 30 //メッセージを既読にする 31 myMsgs[i][0].markRead(); 32 33 } 34 35 //二次元配列で格納した情報をシートに転記 36 if(myMsgs.length>0){ 37 var objSheet = SpreadsheetApp.getActive().getSheetByName("シート名"); 38 var lastRow = objSheet.getDataRange().getLastRow(); 39 40 //シートの最終行に追加 41 objSheet.getRange(lastRow+1, 1).setValue(date); 42 objSheet.getRange(lastRow+1, 2).setValue(eInformation); 43 objSheet.getRange(lastRow+1, 3).setValue(link); 44 objSheet.getRange(lastRow+1, 4).setValue(msid); 45 46}

回答2件
あなたの回答
tips
プレビュー