初心者です。
現在、Gmailの受信トレイから、特定の年月のメール内容をスプレッドシートに書き出すコードを書いています。
スレッドで複数やりとりしているものは、スレッドの1通目の内容を抽出する仕様です。
そこに、メールにつけたラベル(複数あればすべて)を書き出したいのですがうまくいきません。
下記コードも調べながらコピペしてなんとか対応したレベルなので、難しいことは分からないのですが、
.getLabelsでいけるのかと思ったらいけず、途方に暮れております。。。
アドバイスいただけますと幸いです。
GAS
1function searchContactMail() { 2 //期間指定してメールを抽出(A1に年度、B1に月の欄があり、参照) 3 var y_a = SpreadsheetApp.getActiveSheet().getRange(1,1).getValues(); 4 var m_a = SpreadsheetApp.getActiveSheet().getRange(1,2).getValues(); 5 var ad = new Date(y_a, m_a-1, 1); 6 var ad = Utilities.formatDate(ad,"Asia/Tokyo","yyyy/MM/dd"); 7 var bd = new Date(y_a, m_a, 0); 8 var bd = Utilities.formatDate(bd,"Asia/Tokyo","yyyy/MM/dd"); 9 var query = "after:" + ad + " before:" + bd; 10 const start = 3 11 const max = 500; 12 var valMsgs; 13 14 if(start-1<20000) { 15 valMsgs = []; 16 //スレッドからメッセージを取得し二次元配列に格納 17 const threads = GmailApp.search(query, start-1, max); 18 const messagesForThreads = GmailApp.getMessagesForThreads(threads) 19 const values = []; 20 const sheet = SpreadsheetApp.getActiveSheet(); 21 var lastRow = sheet.getRange(sheet.getMaxRows(), 2).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); 22 23 //F列のid列のデータを一次元配列化したものが、定数idsに格納 24 const ids = sheet.getRange(3, 7, lastRow).getValues().flat(); 25 //各スレッドのインデックス0(1番目)のメッセージの件名をログ出力 26 for(const messages of messagesForThreads){ 27 const message = messages[0]; 28 const id = message.getId(); 29 30 //配列ids内に、現在のメッセージIDが含まれているかどうか 31 if(!ids.includes(id)){ 32 const record = [ 33 message.getDate(), 34 message.getFrom(), 35 message.getSubject(), 36 message.getPlainBody().slice(0,1000), 37 message.getThread().getPermalink(), 38 message.getId(), 39 //ここにラベル情報の取得を追加したい!! 40 // message.getLabels(),←これができない。。。 41 42 43 ]; 44 values.push(record); 45 } 46 } 47 48 //B列最終行~貼り付け 49 if(values.length > 0){ 50 sheet.getRange(lastRow + 1, 2, values.length, values[0].length).setValues(values); 51 } 52 53 //受信日時順の昇順に並び替え 一回抽出したあと解除。 54 var lastRow = sheet.getRange(sheet.getMaxRows(), 2).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); 55 var range = sheet.getRange("B3:N" + lastRow); 56 range.sort({column: 2, ascending: true}); 57 } 58}
int32_tさんありがとうございます!
すいません、スレッドについているということで、getUserLabels等使用して試行錯誤しているものの、うまくできません。
おそらく、指定のメッセージIDが付随しているスレッドのラベルを取得できれば良いのだと思いますが、コードが書けないでおります。
どなたか追加でアドバイスいただけますと幸いです。
