Проверка объекта на ключ более эффективна, чем поиск строки в массиве?
уСвидание а такжеТема от конкретных новых писем до новой строки Google Sheet.
Я применяю ярлык для новых почтовых отправлений с фильтром.скрипт обрабатывает эти помеченные письмаярлык снятПрименяется новый ярлык, чтобы эти письма не обрабатывались в следующий раз.проблема: Когда естьMyLabel электронная почта, скрипт обрабатывает все электронные письма в одной и той же ветке (например, с одной и той же темой и отправителем) независимо от их метки (даже папки «Входящие» и «Корзина»).
Вопрос: Как обрабатывать только новые письма, т. Е. С ярлыкомMyLabel - даже когда поток этих сообщений выходит за пределыMyLabel папка?
Мой текущий скрипт:
function fetchmaildata() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('mySheetName');
var label = GmailApp.getUserLabelByName('myLabel');
var threads = label.getThreads();
for (var i = 0; i < threads.length; i++)
{
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++)
{
var sub = messages[j].getSubject();
var dat = messages[j].getDate();
ss.appendRow([dat, sub])
}
threads[i].removeLabel(label);
threads[i].addLabel(newlabel);
}
}
Я взломал решение для своих целей, изменив мойfor
цикл к этому:
for (var j = messages.length-1; j > messages.length-2; j--)
Это говорит о том, что нужно обрабатывать только последнюю электронную почту в ветке, даже если вMyLabel папка. Как ни странно, скрипт все еще меняетЭтикетки из всехMyLabel сообщения электронной почты, но только последний из потока получаетнаписано в электронную таблицу, так что это работает для меня.
Мне пришлось внести еще одно изменение в код, потому что приведенный выше код не запускается как запланированная задача, запускаемая по времени. Я изменил код таким образом, и теперь он работает по расписанию!
//var ss = SpreadsheetApp.getActiveSpreadsheet();
var ss = SpreadsheetApp.openById("myGoogleSheetID");