前提・実現したいこと
ド初心者です。
メールフォームから来た未読メールをスプレッドシートに抽出・記入するシステムを改変し、
以下の助言の元、うまくいったと思いましたが、今度は未読のみならず、既読(抽出・記入済み)のものも抽出するようになってしまいました。
https://teratail.com/questions/225631
問題個所は私が改変した部分だとわかっているのですが、どう修正したものかと頭を抱えております。
どなたかご教授願います。。。
発生している問題
Gmailにて未読のみ抽出したいが、既読(抽出・記入済み)のものが追加で挿入されるようになってしまった。 例 AAAAA (メールフォームでBBBBBを送信) ↓ AAAAA AAAAA BBBBB (メールフォームでさらにCCCCCを送信) ↓ AAAAA AAAAA BBBBB AAAAA BBBBB CCCCC 理想形 AAAAA BBBBB CCCCC
###あたりを付けている修正箇所
>>>>><<<<<で囲っていますが、ここの部分をlengthのままの上で、resultArrとの値と一致させればいいと想定しています。
「returnData関数内でmsgs.length件数分resultArrへpushしている」ということから、returnData関数のmsgsにthreadないしはlength(変数)を紐づけて上げられればいいのかな?とも...
いかんせんド初心者なもので...申し訳ないです。
GAS
function getMailandInsert(){ var sheet = SpreadsheetApp.getActiveSheet(); // start potision var start = 0; // 取得するメールの最大件数 var max = 5; // スプレッドシートに挿入するデータ列数 var insertCol = 6; // 条件にマッチする受信メールを取得 var threads = GmailApp.search('is:unread from:(aaa@aaa.co.jp) subject:(wakaran)',start,max); // 条件にマッチしたスレッド数 var length = threads.length; // データ保存先となるシートの最終行。すなわち挿入開始位置 var row = sheet.getLastRow() + 1; // 取得したメール内容を格納する用の配列 var resultArr = new Array(); for( var n in threads ){ var the = threads[n]; // スレッド内のメールを取得 var msgs = the.getMessages(); // スレッド内のメールを解析して resultArr に格納 returnData(msgs, resultArr); // 取得したスレッドを既読にする the.markRead(); Utilities.sleep(1000); } if( length != 0 ){ sheet.getRange(row, 1, msgs.length, insertCol).setValues( resultArr ); // データ保存 //getRangeの中身は(最終行+1,1,スレッド数,6) //>>>>>>>>length->msgs.lengthに改変<<<<<これが問題。unreadを無視しているのが原因。lengthのまま、lengthの値とresultArrの値を一致させる必要。 } } function returnData(msgs, resArray) { for( m in msgs ){ try{ var tempArray = new Array(); var msg = msgs[m]; // メールの日付 var date = msg.getDate(); // メールの送信元アドレス var from = msg.getFrom(); // メールの件名 var subject = msg.getSubject(); // メール本文をPlainBodyで取得 var body = msg.getPlainBody(); // bodyをXMLパーサーで解析 var xml = XmlService.parse(body); // XML解析結果のルート要素を取得 var root = xml.getRootElement(); // XML内の各子要素を指定してその値を取得。 var hinichi = root.getChild("hinichi").getText(); var zzz = root.getChild("zzz").getText(); var xxx = root.getChild("xxx").getText(); var ddd = root.getChild("ddd").getText(); var vvv = root.getChild("vvv").getText(); var etc = root.getChild("etc").getText(); // 各値を配列に格納 tempArray[0] = hinichi; tempArray[1] = zzz; tempArray[2] = ddd; tempArray[3] = eisei; tempArray[4] = vvv; tempArray[5] = etc; // 配列をpushで末尾に追加 resArray.push(tempArray); }catch(e){ Logger.log("Error: " + e); } } }
補足情報(FW/ツールのバージョンなど)
chrome最新版
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/29 05:31
2019/11/29 05:46
2019/11/29 05:49 編集