#前提・実現したいこと
GAS(Google Apps Script)を使用して、「転記済み」ラベルの付いていないメールを取得したのち、スプレッドシートへ転記したい。
<前提>
・重複して転記することを防ぐため、「転記済み」ラベルの付いていないメールのみを抽出する。
・スレッド内のすべてのメールを転記すると煩雑になるため、最初のメールのみ転記する。
・メールは本文に以下のような内容が記載されているものとする。
(メール本文)
お名前:山田太郎
住所:東京都千代田区
#発生している問題
10件メールをスプレッドシートへ転記した後、11件目からは転記されない。
具体的には以下の状況が発生しています。
受信ボックスにはラベルの付いていない11件のメールがあります。
以下コードを実行すると、
10件のメールを取得し、スプレッドシートへ転記します。
転記したメール10件には「転記済み」ラベルが付き、転記していない1件にはラベルが付いていない状態です。
再度、コードを実行すると、残り1件は転記されず、「転記済み」ラベルも付きません。
何が問題なのでしょうか。
ご教示いただけますと幸いです。
#該当のソースコード
GAS
1function myFunction() { 2 3 const query = 'in:inbox -label:転記済み'; 4 const start = 0; 5 const max = 10; 6 7 const threads = GmailApp.search(query,start,max); 8 const messagesForThreads = GmailApp.getMessagesForThreads(threads); 9 10 const label = GmailApp.getUserLabelByName('転記済み') || GmailApp.createLabel('転記済み'); 11 12 const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('メール転記'); 13 14 const regName = new RegExp(/お名前:(.*)/); 15 const regAdress = new RegExp(/住所:(.*)/); 16 17 for (const messages of messagesForThreads) { 18 const message = messages[0]; 19 const from = message.getFrom(); 20 const date = message.getDate(); 21 const plainbody = message.getPlainBody(); 22 23 const Name = plainbody.match(regName); 24 const Adress = plainbody.match(regAdress); 25 26 // 名前・住所いずれかがマッチしない場合は、スキップする 27 if (Name == null || Adress == null) continue; 28 29 const lastrow = sheet.getLastRow() + 1; 30 sheet.getRange(lastrow,1).setValue(from); 31 sheet.getRange(lastrow,2).setValue(date); 32 sheet.getRange(lastrow,3).setValue(Name[1]); 33 sheet.getRange(lastrow,4).setValue(Adress[1]); 34 35 message.getThread().addLabel(label) 36 37 } 38}
回答1件
あなたの回答
tips
プレビュー