質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

1回答

1784閲覧

GAS Gmailのラベル情報をスプレッドシートに書き出したい

yamamotomato

総合スコア0

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2022/03/02 23:46

初心者です。

現在、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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamamotomato

2022/03/03 01:30

int32_tさんありがとうございます! すいません、スレッドについているということで、getUserLabels等使用して試行錯誤しているものの、うまくできません。 おそらく、指定のメッセージIDが付随しているスレッドのラベルを取得できれば良いのだと思いますが、コードが書けないでおります。 どなたか追加でアドバイスいただけますと幸いです。
guest

回答1

0

投稿2022/03/02 23:57

int32_t

総合スコア21929

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問