Script do Google Apps - Etiquetar email com base no corpo do email [Otimizar código]
Eu pretendo fazer o seguinte:
É recebido um email que corresponde aos critérios a serem colocados na pasta Rótulo A.Um novo email é recebido.O corpo deste novo email é uma duplicata do primeiro recebido.Este novo email ignora a caixa de entrada e vai para a pasta Etiqueta B.Aqui está como eu o implementei:
Todos os novos e-mails são marcados como "Original"Quando o script é executado, ele compara o corpo do email com todos os anteriores.Se o corpo estiver duplicado, ele será rotulado como "Duplicado", movido para "Arquivar" e o rótulo "Original" será removido.O código é o seguinte:
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;
}
O código funciona bem. O problema está no loop aninhado 4, que aumenta exponencialmente o tempo de execução à medida que o número de emails "Originais" aumenta.
Existe uma maneira de otimizar esse código? Existe uma lógica mais inteligente para implementar essa idéia?
Qualquer ajuda seria apreciada.