УХ ТЫ. Достигну ли я когда-нибудь этого уровня удивительности?
емлюсь сделать следующее:
Полученное электронное письмо, соответствующее критериям, будет помещено в папку «Метка А.».Новое письмо получено.Тело этого нового электронного письма является копией первого полученного.Это новое электронное письмо пропускает почтовый ящик и переходит в папку Label B.Вот как я это реализовал:
Все новые письма помечены как «Оригинальные»Когда скрипт запускается, он сравнивает тело письма со всеми предыдущими.Если тело является дубликатом, оно помечается как «Дубликат», перемещается в «Архив» и метка «Оригинал» удаляется.Код выглядит следующим образом:
function emailLabeling() {
var DUPLICATE = _getLabel();
var labels = GmailApp.getUserLabelByName("Original");
if(labels != null){
var threads = labels.getThreads();
for (var i = 0; i < threads.length; i++){
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++){
var message = messages[j];
for (var k = i; k < threads.length; k++){
var messages_check = threads[k].getMessages();
for (var l = j; l < messages_check.length; l++){
var message_check = messages_check[l];
if(message_check.getPlainBody() == message.getPlainBody()){
if(i != k || j != l){
Logger.log(i +""+ j +""+ k +""+ l);
DUPLICATE.addToThread(threads[i]);
labels.removeFromThread(threads[i]);
GmailApp.moveThreadToArchive(threads[i]);
}
}
}
}
}
}
}
else{
Logger.log("Label Not Found!");
}
}
function _getLabel() {
var label_text = "Duplicates";
var label = GmailApp.getUserLabelByName(label_text);
if (label == null) {
var label = GmailApp.createLabel(label_text);
}
return label;
}
Код работает отлично. Проблема заключается в 4-х вложенном цикле, который экспоненциально увеличивает время выполнения по мере увеличения количества «оригинальных» электронных писем.
Есть ли способ оптимизировать этот код? Есть ли более разумная логика для реализации этой идеи?
Любая помощь будет оценена.