実現したいこと
GAS(Google Apps Script)を使用して、Gmailをスプレッドシートへ転記したい。
前提
重複して転記することを避けるため、転記したメールにはラベルを付け、
ラベルの付いていないメールのみをスプレッドシートへ転記したいです。
発生している問題・エラーメッセージ
エラー Exception: Invalid argument: label (匿名) @ コード.gs:45 myFunction @ コード.gs:6
該当のソースコード
function myFunction() { // 検索条件に該当するスレッド一覧を取得 var threads = GmailApp.search('subject:[エキスパ]フォーム登録通知 sOD8e5 -label:SS.処理済み'); // スレッドを一つずつ取り出す threads.forEach(function(thread) { // スレッド内のメール一覧を取得 var messages = thread.getMessages(); // メールを一つずつ取り出す messages.forEach(function(message) { // メール本文を取得 var plainBody = message.getPlainBody(); // 登録日を取り出す var date = plainBody.match(/登録日時:(.*)/); // 氏名を取り出す var name = plainBody.match(/氏名:(.*)/); // ふりがなを取り出す var furigana = plainBody.match(/氏名ふりがな:(.*)/); // メールアドレスを取り出す var email = plainBody.match(/メールアドレス:(.*)/); // 質問を取り出す var question = plainBody.match(/ご質問内容:(.*)/); // 書き込むシートを取得 var sheet = SpreadsheetApp.getActive().getSheetByName('メールで質問する'); // 最終行を取得 var lastRow = sheet.getLastRow() + 1; // セルを取得して値を転記 sheet.getRange(lastRow,1).setValue(date[1]); sheet.getRange(lastRow,2).setValue(name[1]); sheet.getRange(lastRow,3).setValue(furigana[1]); sheet.getRange(lastRow,4).setValue(email[1]); sheet.getRange(lastRow,5).setValue(question[1]); }); // スレッドに処理済みラベルを付ける var label = GmailApp.getUserLabelByName('SS.処理済み'); thread.addLabel(label); }); }
試したこと
ネット上の情報をもとにコードを作成しました。
スプレッドシートへの転記までは希望通り動作しましたが、
スレッドへのラベル付けがうまくいきません。
ご教示ください。
補足情報(FW/ツールのバージョンなど)
うまくいかないとはどういうふうにうまくいかないのかを詳しく説明しよう
SS.処理済み
というラベルは作成済みですか?
あるいは、作成済みのラベル名がスクリプトと一致してますか?半角全角、大文字小文字、ドット・カンマなど。
ラベルを手動で作成または修正した後の話になりますが、
forEach()の中で毎回ラベルを取得 var label = GmailApp.getUserLabelByName(...) するのではなく、
スクリプトの冒頭で1度取得しておけばよいのではないでしょうか?
例えば、
スクリプトの冒頭を
// ラベルを取得(なければ作成)
var labelName = 'SS.処理済み';
var label = GmailApp.getUserLabelByName(labelName) ?? GmailApp.createLabel(labelName);
としておいて
forEachの中は、
// スレッドに処理済みラベルを付ける
thread.addLabel(label);//この行のみとする
とするではどうでしょう?
YellowGreenさん:
ご回答ありがとうございます
はい、ラベルは作成済みです。
やってみます。
y_waiwaiさん:
ラベル付けがうまくいかない=ラベルがつかないという意味です
上にお示しした方法だと、万が一ラベル名が半角・全角、スペースの有無などで異なっていたとしてもスクリプトで設定したラベル名を付加しますので、処理後にラベルが増えていたらGmailとスクリプトのラベルの文字のどこかが違っていたということです。

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