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

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

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

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

Gmail

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

Google Apps Script

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

Q&A

解決済

1回答

1276閲覧

メールの内容をforEachで順番に取得したいが最新のメールの情報だけ取得される

Sou23

総合スコア38

Google スプレッドシート

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

Gmail

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

Google Apps Script

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

0グッド

0クリップ

投稿2022/09/04 08:41

編集2022/09/04 08:47

前提

GASでメールを取得、内容をスプレッドシートに転記するシステムを作っています。

発生している問題

複数のメールを読み込んだ際、タイムスタンプはそれぞれ正しいものを取得するがそれ以外は全て最新のもののみが取得される

該当のソースコード

GAS

1function myFunction() { 2 3var values = []; 4var now = new Date(); 5now.setHours(now.getHours()-10); 6 7//条件に当てはまる全スレッドを取得(veltra) 8 var threads = GmailApp.search('リクエスト' + ' after:' + Math.floor(now.getTime() / 1000).toString()); 9//各スレッド情報を取得 10 threads.forEach(function(thread){ 11 //スレッド内の全メッセージを取得 12 var messages = thread.getMessages(); 13 //各メッセージ情報を取得 14 messages.forEach(function(message){ 15 var plainbody = message.getPlainBody(); 16 values.push([plainbody]); 17 18 19//スプレッドシート情報 20 var ss = SpreadsheetApp.getActiveSpreadsheet(); 21 var sheet = ss.getSheetByName('sheet1'); 22 var raws = sheet.getLastRow()+1; 23 24var parsedText = values.toString(); 25 26var info = []; 27//情報取得 28var timestamp = message.getDate(); 29var status = '未選択'; 30var space = ''; 31var familyName= parsedText.match(/参加者名:\s([^\n]*)\n/)[1].split(/\s/).slice(-1)[0]; 32var fullName= parsedText.match(/参加者名:\s([^\n]*)\n/)[1]; 33var startDate = parsedText.match(/参加日時:(.*)/).toString().slice(6,17); 34var startTime= parsedText.match(/参加日時:(.*)/).toString().slice(-5); 35var numberOfPeople= parsedText.match(/数量:(.*)/).toString().split(/,/,1).toString(); 36var tel=parsedText.match(/携帯電話番号:\s(.*)/)[1]; 37var medium= 'a'; 38var payment = 'クレジット' 39 40 41info.push(timestamp,status,space,space,space,fullName,space,space,startDate,startTime,space,numberOfPeople,space,tel,payment,space,space,medium); 42 Logger.log(info); 43 //sheet.appendRow(info); 44 }) 45 }) 46}

試したこと

valuesに複数の要素が入っているのに、その下のコードでは最新のものにしかアクセスできていないということまではわかりました。
どうやってvalues[0],values[1]と進めていくか考えています。

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

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

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

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

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

guest

回答1

0

自己解決

parsedTextをplainbodyに変えたらいけました

投稿2022/09/04 08:55

Sou23

総合スコア38

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問