前提・実現したいこと
同じ送信先から送られる定型メール
宛先:メールアドレスA
宛先:メールアドレスB
(2つともGmailにエイリアスとしてアカウント登録したもの)
ここからそれぞれの宛先用のスプレッドシート
メールアドレスA用のスプレッドシート
メールアドレスB用のスプレッドシート
を作成し、それぞれのメールのデータを取り込めるようにしたい。
送られてくるメールは
・「メール本文中のABを特定できる文」
・宛先のメールアドレスAまたはB
・Gmail上で付けたラベル「ラベルA」「ラベルB」
で特定できます。
もちろんGmail上でラベルでフィルターすると間違っていないデータを対象にしています。
また、それぞれのメール(スレッド)は1通のみです。
起きている問題
ABそれぞれの内特定の2件程度のデータがAにもBにも重複して取り込まれてしまいます。
該当のソースコード
1//メールアドレスAのデータ抽出用シートのスクリプト 2 3var sheet = SpreadsheetApp.getActive().getSheetByName('指定シート'); 4var data = sheet.getRange(2, 1, sheet.getLastRow()).getValues(); 5 6 function mailListing() { 7 var query = '(to:メールアドレスA)' 8 + '("メール本文中のABを特定できる文")' 9 + '(label:メールアドレスA用のラベル)'; 10 11 var threads = GmailApp.search(query, 0, 50); 12 var messages = GmailApp.getMessagesForThreads(threads); 13 14 for(var i=0; i < messages.length; i++) { 15 for(var j=0; j < messages[i].length; j++) { 16 var id = messages[i][j].getId(); 17 if(!hasId(id)){ 18 var body = messages[i][j].getPlainBody(); 19 /* メール本文全体を取得し正規表現でデータを取得 */ 20 sheet.appendRow([ 21 id, 22 fetchData(body, '利用日', '\r'), 23 fetchData(body, 'お名前:', '様'), 24 ]); //メール本文の正規表現の部分指定 25 } 26 } 27 } 28} 29 30 /* メールIDによる複を回避 */ 31function hasId(id) { 32 var hasId = data.some(function(array, i, data) { 33 return (array[0] === id); 34 }); 35 return hasId; 36} 37 38 39 40//データの正規表現を定義するコード 41 42function fetchData(str, pre, suf) { 43 var reg = new RegExp(pre + '.*?' + suf); 44 var data = ''; 45 46 try{ 47 data = str.match(reg)[0] 48 .replace(pre, '') 49 .replace(suf, ''); 50 51 }catch(e){ 52 data = ''; 53 } 54 return data; 55} 56
試したこと
上記は宛先A用のコードですが、同じもコードでB用のものがあります。
最初の「query」の指定が間違っているかと思い、
to: deliveredto: label: -label:B用
などクエリの指定を様々な条件を試しましたが、解決されません。
エラーも発生せず動くのですが、どうしても原因が特定できません。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー