前提
GASでGmailからシートにデータを書き込みたいのですが、シートへの書き込みまでは出来ましたがGASのラベルごとの取り込み指定がうまくできません
ご存知の方いらっしゃいましたらお教えいただければと思います。
先ず、Gmailでのラベルの階層、検索で取得したいラベルは階層的になっており、
という感じになっています
実現したいこと
- GASでラベルを取得して、ラベルごとにスプレッドシートの各タブに未読メールを記載し既読にする
- ラベルの数は結構多い(分けたいサブラベルは6つで親ラベルは08_ZOOM相談予約)
以下のリストはサブラベル
・01_無料予約
・02_卒業予約
・03_fp有料相談予約 ←ここからさらにサブラベルが追加
|-・01_三原
|-・02_三原:老後のお金
|-・03_柴田
|-・04_田島
|-・05_渡辺
という感じでラベルはついている
- Gmailの自動振り分けは済みで、各予約ラベルに入るようになっています
- 画像の赤枠のメールだけを取得したい
発生している問題・エラーメッセージ
GASでラベル指定、完全一致など試したが、他のメールもシートに記載されてしまうので必要なメールのみ記載がしたい
調べて、Gmailの検索窓で、ラベルが、「08_zoom相談予約」の中のサブラベルが「01_無料予約」の場合、
・label:08_zoom相談予約-01_無料予約
とGmail検索窓と同じ様にGASに書けばいいと書いてあったので記述していますが、実行してみるとメール取得はするのですが対象のメール以外も取得してしまいます
添付画像のラベルの「08_zoom相談予約-02_卒業予約」
も一緒に取得して、書き出してしまいます
該当のソースコード
function savedata() { //シート const ss_id = "●●"; //スプレッドシートのIDを指定 const sh_name = "無料相談"; //スプレッドシートのシート名を指定 const sh = SpreadsheetApp.openById(ss_id).getSheetByName(sh_name); //ID、シート名を変数で指定 // 検索条件に該当する未読スレッド一覧を取得 const query = 'is:unread label:08_zoom相談予約-01_無料予約' ←ここが指定できない const threads = GmailApp.search(query, 0, 30); // // スレッドを一つずつ取り出す threads.forEach(function(thread) { // スレッド内のメール一覧を取得 const messages = thread.getMessages(); // メールを一つずつ取り出す messages.forEach(function(message) { // メールIDを取得 const MessagId = message.getId(); // 受信日時 const strDate = message.getDate(); // メール本文を取得 const plainBody = message.getPlainBody(); // フォーム部分を取り出す const fname = new RegExp('フォーム名:' + '.*?' + '\r'); const formname = plainBody.match(fname)[0].replace('フォーム名:', '').replace('\r', ''); console.log( formname ); // 予約日時部分を取り出す const zmday = new RegExp('日時:' + '.*?' + '\r'); const zmdate = plainBody.match(zmday)[0].replace('日時:', '').replace('\r', ''); console.log( zmdate ); // 名前部分を取り出す const nam = new RegExp('名前:' + '.*?' + '\r'); const username = plainBody.match(nam)[0].replace('名前:', '').replace('\r', ''); console.log( username ); // ふりかな部分を取り出す const firikana = new RegExp('フリガナ:' + '.*?' + '\r'); const kana = plainBody.match(firikana)[0].replace('フリガナ:', '').replace('\r', ''); console.log( kana ); // メールアドレス部分を取り出す const usermail = new RegExp('メールアドレス:' + '.*?' + '\r'); const user_mail = plainBody.match(usermail)[0].replace('メールアドレス:', '').replace('\r', ''); console.log( user_mail ); // 電話番号部分を取り出す const usertel = new RegExp('電話番号:' + '.*?' + '\r'); const user_tel = plainBody.match(usertel)[0].replace('電話番号:', '').replace('\r', ''); console.log( user_tel ); //シートへ書き込み sh.appendRow([strDate, formname, zmdate, username, kana, user_mail, user_tel, plainBody, MessagId ]); }); }); }

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