お世話になっております。
GoogleAppScriptを使い、Gmailに届いたメールをスプレッドシートに転記するスクリプトを作成しています。
参照:https://tonari-it.com/gas-contact-chatwork-notice-task/
スクリプト
function fetchContactMail() { /* Gmailから特定条件のスレッドを検索しメールを取り出す */ var strTerms = '(is:unread from:mail@mail)'; var myThreads = GmailApp.search(strTerms, 0, 10); //条件にマッチしたスレッドを取得 var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納 var valMsgs = []; /* 各メールから日時、送信元、件名、内容を取り出す*/ for(var i = 0;i < myMsgs.length;i++){ valMsgs[i] = []; valMsgs[i][0] = myMsgs[i][0].getDate(); /* メール送信日時*/ valMsgs[i][1] = myMsgs[i][0].getReplyTo(); /* メール返信先*/ valMsgs[i][2] = myMsgs[i][0].getSubject(); valMsgs[i][3] = myMsgs[i][0].getPlainBody().slice(6,25); /* 日時*/ valMsgs[i][4] = myMsgs[i][0].getPlainBody().slice(38,400); /* URL*/ valMsgs[i][5] = 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通目が指定されてしまうようでうまくいっていません。
よろしくおねがいいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/11 08:27