質問: myMsgs[i][0].getPlainBody(); /* メール全文*/ myMsgs[i][0].markThreadRead(); //メッセージを既読にする } /* スプレッドシートに出力 */ if(myMsgs.length>0){ var mySheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート'); //シートを取得 var maxRow=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得 mySheet.getRange(maxRow+1, 1, i, 6).setValues(valMsgs); //シートに取得したメッセージのデータを追加 } } ``` ### 問題点 通常のメールにおいてはこちらで問題なく、動作しています。 ただし、同じ件名のメールが届いてしまった場合、2通目がスレッド配下にまとめられています。 その際、 myMsgs[i][0].markRead(); //メッセージを既読にする の動作が1通目にのみ適用され、2通目は未読のままになってしまいました。 その結果、トリガーが作動するたびにメールは未読のままで書き込みがずっと続く状態となっています。 参考先のコードでも1通目のみに適用するとなっているので、動作としては間違っていないのですが、メールをスレッド配下の2通目にも既読処理を行うように変更したいです。 2通目が書き込みされることは問題ありません。 当方、1からコードを書くことができないため、具体的なコードをご教授いただければ幸いです。 どうぞよろしくお願い致します。 ### 試したこと Gmailのスレッド表示解除や myMsgs[i][0].markThreadRead(); に変更してみたりしましたが、 myMsgs[i][0]にて1通目が指定されてしまうようでうまくいっていません。 よろしくおねがいいたします。
回答: myMessages[0][0] →1番目のスレッドの1番目のメール myMessages[0][1] →1番目のスレッドの2番目のメール myMessages[1][0] →2番目のスレッドの1番目のメール として格納されているようですので、 myMsgs[i][0].markThreadRead();の代わりに for(var j = 0;j < myMsgs[i].length;j++){ myMsgs[i][j].markRead(); } とすればよいかと