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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

Q&A

解決済

2回答

1370閲覧

【GAS】Gmailのスレッドにラベルを付けたいです。

_Na

総合スコア2

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

0グッド

1クリップ

投稿2023/05/14 06:01

実現したいこと

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/ツールのバージョンなど)

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

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

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

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

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

y_waiwai

2023/05/14 09:38

うまくいかないとはどういうふうにうまくいかないのかを詳しく説明しよう
YellowGreen

2023/05/21 03:47 編集

SS.処理済み というラベルは作成済みですか? あるいは、作成済みのラベル名がスクリプトと一致してますか?半角全角、大文字小文字、ドット・カンマなど。 ラベルを手動で作成または修正した後の話になりますが、 forEach()の中で毎回ラベルを取得 var label = GmailApp.getUserLabelByName(...) するのではなく、 スクリプトの冒頭で1度取得しておけばよいのではないでしょうか? 例えば、 スクリプトの冒頭を // ラベルを取得(なければ作成) var labelName = 'SS.処理済み'; var label = GmailApp.getUserLabelByName(labelName) ?? GmailApp.createLabel(labelName); としておいて forEachの中は、 // スレッドに処理済みラベルを付ける thread.addLabel(label);//この行のみとする とするではどうでしょう?
_Na

2023/05/21 03:40

YellowGreenさん: ご回答ありがとうございます はい、ラベルは作成済みです。 やってみます。
_Na

2023/05/21 03:42

y_waiwaiさん: ラベル付けがうまくいかない=ラベルがつかないという意味です
YellowGreen

2023/05/21 03:44

上にお示しした方法だと、万が一ラベル名が半角・全角、スペースの有無などで異なっていたとしてもスクリプトで設定したラベル名を付加しますので、処理後にラベルが増えていたらGmailとスクリプトのラベルの文字のどこかが違っていたということです。
guest

回答2

0

自己解決

ありがとうございます‼
いろいろやったら出来ましたmm

投稿2023/06/16 03:15

_Na

総合スコア2

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

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

0

var label = GmailApp.getUserLabelByName('SS.処理済み');

これの下に

console.log(label):

で本当にlabelの値が取れているか確認してみてください。

投稿2023/05/14 13:55

kzy53

総合スコア32

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問