Gmailメッセージをスプレッドシートにインポートするスクリプトを作成しました。受信トレイルールでGmailの「インポート待ち」のGmailラベルに移動し、スクリプトがメッセージを処理した後、このラベルを削除して「インポート済み」ラベルに追加します。スレッド内のすべてのメッセージのインポートを避ける
問題は、この「インポート待ち」ラベルに電子メールが受信されると、ラベルがスレッド全体に適用されているように見えることです。メッセージは以前にインポートされたメッセージと同じ件名を持つため、スレッド内の他のすべてのメッセージがインポートされます(これらはすでにインポートされています)。
は、ここに私のスクリプトです:
var importedCount = 0;
var label = GmailApp.getUserLabelByName('Monitor/AwaitingImport');
var threads = label.getThreads(0,50); // An array of threads (limit set to 50, this could be increased)
if (threads.length != 0) { // If a thread exists
for (var i = 0; i < threads.length; i++) { // for each thread in the label
var threadsubject = threads[i].getFirstMessageSubject();
if (threadsubject.match(/(Check In)/)) { // if the subject contains "Check In"
var messages = threads[i].getMessages(); // get ALL the messages
for (var j = 0; j < messages.length; j++) { // for each message
var body = messages[j].getPlainBody();
// Get key:value pairs from email into an array
var array = body.trim().split("\n");
var newArray = [];
for (k = 0; k < array.length; k++) {
newArray = newArray.concat(array[k].toString().split("="));
}
// Push other data to array that isn't in body of email
newArray.push("GmailMessageID", messages[j].getId());
newArray.push("MessageDate", messages[j].getDate());
// Create object
var newObj = {};
for (var l =0 ; l< newArray.length ; l++) {
if (l%2 == 0){
newObj[newArray[l]] = newArray[l+1];
}
}
// Now insert object as record into the spreadsheet
insertRecordWithAnyFieldsIntoAnySheet('Incoming Logs', newObj, true);
}
// Finally remove the label from this message, mark it as read, and update the importedCount (for logging)
threads[i].removeLabel(GmailApp.getUserLabelByName('Monitor/AwaitingImport'));
threads[i].addLabel(GmailApp.getUserLabelByName('Monitor/Imported'));
importedCount++;
}
}
}
SpreadsheetApp.getActiveSpreadsheet().toast(importedCount + ' messages imported');
どのように私は、インポートされることから、スレッド内のすべてのメッセージを防止し、ちょうどちょうど受け取ったものをインポートすることができますか?
は、私は、これはすでにシートにインポートされたメッセージの何千ものリソース集中型の検索を伴うだろうとして、すでにGmailのメッセージIDを使用して輸入したメッセージに対して、着信メッセージをチェックする必要はありません。
これは潜在的に
最後に、私は別のものを追加することで、未読メッセージのみをインポートしようとしたがインポートされていない他のメッセージを逃すので、私は、スレッド内でのみ最後のメッセージをインポートしません私のスクリプトは、読み取りとしてメッセージをマークします(上記のスニペットに示されていない)が、これはまだデフォルトのGmailの作品では、スレッド