Как фильтровать заголовки Gmail и останавливаться в ярлыках

Я пробовал несколько способов отфильтровать тип электронной почты по ярлыку, но фильтр не работает.

Я использовал Google, чтобы найти скрипт для перемещения таких писем в СПАМ, но для меня эти письма не являются СПАМом. Вместо этого я просто хочу изменить сценарий, чтобы переместить эти электронные письма на определенный ярлык.

Это скрипт, который я нашел:

var threads = GmailApp.getInboxThreads(0, 5);

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];
        var body=message.getRawContent();

        if(body.indexOf("X-Forwarded-For: [email protected] [email protected]")>-1)
        {
            GmailApp.moveThreadToSpam(threads[i]);
        }

        Utilities.sleep(1000);
        }
    }
}

X-Forwarded-For: [email protected] [email protected] — это адрес электронной почты, который я нахожу в опции «Показать оригинал» в раскрывающемся меню.

Не могли бы вы помочь мне изменить сценарий, чтобы помещать эти определенные типы писем в ярлыки, а не в спам?


person Lyubomir Georgiev    schedule 24.07.2015    source источник
comment
хорошо, вы нашли скрипт в Интернете, но теперь вам нужно прочитать документацию, попробовать свои модификации и показать нам, что не работает.   -  person Zig Mandel    schedule 24.07.2015


Ответы (3)


Изменить:

Скрипт перемещает сообщения в папку со спамом из-за этой строки: GmailApp.moveThreadToSpam(threads[i]);

Если вы хотите пометить сообщения, а не помечать их как спам, вы можете использовать threads[i].addLabel(label). А чтобы заархивировать сообщения, чтобы они перемещались из папки «Входящие», вы можете использовать threads[i].moveToArchive().

Вот обновленный пример для вас:

var threads = GmailApp.getInboxThreads(0, 5);

var label = GmailApp.getUserLabelByName("LABEL NAME GOES HERE");

if (label == null) 
{
    var label = GmailApp.createLabel(label);
}

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];
        var body=message.getRawContent();

        if(body.indexOf("X-Forwarded-For: [email protected] [email protected]")>-1)
        {
            threads[i].moveToArchive();                
            threads[i].addLabel(label);
        }

        Utilities.sleep(1000);
        }
    }
}

Эта модифицированная версия позволяет указать имя метки вверху. Если метка еще не существует, она будет создана. И затем, вместо того, чтобы перемещать сообщение в спам, он заархивирует его и вместо этого применит к нему выбранный вами ярлык.

person Calcolat    schedule 24.07.2015

Идеально! Это работает, спасибо Calcolat! Если я могу побеспокоить вас еще об одном, можно ли добавить функцию «Пропустить папку «Входящие» (архивировать)», чтобы электронное письмо попадало прямо на ярлык и не складывалось в мой почтовый ящик?

person Lyubomir Georgiev    schedule 25.07.2015
comment
Рад, что это работает. Да, вы тоже можете это сделать. Я только что обновил свой ответ выше с некоторыми изменениями, которые применят ярлык и заархивируют электронную почту для вас. Также просто быстрый совет, но если у вас есть какие-либо комментарии или дополнительные вопросы, лучше всего щелкнуть ссылку «Добавить комментарий» под моим ответом и ответить таким образом. Если вы публикуете комментарии или вопросы в качестве ответа, подобные этому, они могут быть удалены, если их увидит модератор. - person Calcolat; 26.07.2015

Отличный сценарий - спасибо. Я немного изменил id, чтобы использовать идентификатор X_Binding, потому что обнаружил, что маркетинговые сообщения (в этом примере Королевский Альберт-холл) имеют идентификатор xbinding, а письма с подтверждением заказа — нет! Я установил ежедневный таймер, чтобы убрать мусор!

function FilterVia() {
var threads = GmailApp.getInboxThreads(0, 5);
var label = GmailApp.getUserLabelByName("CIRCULARS");
if (label == null) 
{
    var label = GmailApp.createLabel(label);
}
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];
    var body=message.getRawContent();

    if(body.indexOf("X-Binding-ID: RoyalAlbertHallMarketing")>-1)
     {
        threads[i].moveToArchive();                
        threads[i].addLabel(label);
     }

         Utilities.sleep(1000);
     }
    }
}
person L Postgate    schedule 22.09.2016