Это не работает, потому что фильтры (и текущая версия FiltaQuilla) видят только текстовое представление кода HTML при фильтрации, если таковые имеются, потому что для некоторых папок (автономные папки IMAP) они видят только заголовки сообщений.
Я действительно не знаю, почему фильтры по умолчанию в Thunderbird не позволяют пользователям фильтровать необработанное тело, я думаю, это потому, что никто не запрашивал его. Кроме того, я не знаю, почему сложные плагины, такие как FiltaQuilla, не предоставляют доступ к сырому телу "из коробки". Опять же, возможно, это отсутствие интереса пользователя.
Итак, я могу рассказать вам, как это сделать с FiltaQuilla, но вам это не понравится. Это грязный, хакерский, медленный, хрупкий и совсем не удобный для пользователя. Но это возможно. Это работает на моем компьютере. Это должно работать в вашем. Если, конечно, Thunderbird не выйдет из строя и не испортит ваш почтовый ящик (как это случилось однажды здесь, когда я тестировал это, он никогда больше не работал в этой папке). Удивительно, но он работал безупречно с моими папками IMAP. Так что думайте об этом как об эксперименте, а не как об окончательном решении.
Если у вас уже есть FiltaQuilla, включите Javascript на вкладке «Условия поиска» в окне «Настройки» (перезапустите Thunderbird).
Теперь создайте фильтр как обычно, в списке «что искать» ищите Javascript. В следующем списке выберите Matches. Там будет значок редактирования, выберите его и вставьте следующий код (Примечание: этот код основан на некоторых тестах, включенных в исходный код Thunderbird):
let mylist = ["emv3.com", "_blank", "tumblr.com", "xxxx"];
var matchfound = -1;
const MAX_MESSAGE_LENGTH = 10240;
let msgFolder = message.folder;
let msgUri = msgFolder.getUriForMsg(message);
let messenger = Cc["@mozilla.org/messenger;1"].createInstance(Ci.nsIMessenger);
let streamListener = Cc["@mozilla.org/network/sync-stream-listener;1"].createInstance(Ci.nsISyncStreamListener);
messenger.messageServiceFromURI(msgUri).streamMessage(msgUri, streamListener, null, null, false, "", false);
let sis = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
sis.init(streamListener.inputStream);
let rawbody = sis.read(MAX_MESSAGE_LENGTH);
for (let listidx = 0; listidx < mylist.length; listidx++) {
//Components.utils.reportError("Checking " + mylist[listidx] + " in " + message.subject);
matchfound = rawbody.search(mylist[listidx]);
if (matchfound>0) {
Components.utils.reportError("Matched " + matchfound + " " + mylist[listidx] + " in " + message.subject);
break;
}
}
(matchfound>0)
Вы видите строку "let mylist ="? Это массив Javascript. Вы можете заполнить его текстовыми строками для поиска. Вы видите MAX_MESSAGE_LENGTH = 10240? вот как далеко от начала сообщения этот код будет искать. Обычно 10K достаточно, так как спам-сообщения больше, чем изображения или другие вложения.
Закройте окно редактирования с помощью OK.
Определите ваши действия (переместить, удалить, пометить и т.д.).
Попробуйте запустить его.
Если вы включили консоль отладки в Thunderbird, вы можете увидеть список совпадений (это не обычный журнал фильтра).
И последнее замечание: этот скрипт не декодирует кодировку Base64 (или любую другую). Сообщение в кодировке Base64 не будет ничего совпадать.
Другое замечание: кратко просматривая исходный код Thunderbird, я думаю, что байесовский фильтр имеет доступ к необработанному телу сообщения, однако я не знаю, означает ли это что-то для вас.
Итак, для лучшего ответа, ваши варианты:
- Напишите плагин самостоятельно.
- Попросите автора плагина добавить поддержку необработанного доступа к телу (автор FiltaQuilla кажется хорошим человеком, вы можете спросить об этом на форумах FiltaQuilla).