На самом деле это выполнимо с FiltaQuilla. (Пробовал FiltaQuilla 1.1.0, с Thunderbird 3.1.9).
Ниже приведен тестовый скрипт, помещенный под "действие javascript с телом", предоставленный FiltaQuilla. Он показывает все свойства заголовка и тело в консоли ошибок.
Как только эти поля данных станут доступны для кода, он должен пройти через папки и сообщения мессенджера, чтобы сравнить их. Возможно, использование свойства "threadParent" в hdr может упростить логику, для получения подсказки обратитесь к nsIMsgDBHdr в MDC. В коде могут быть установлены дополнительные свойства. Например, установите «hdr.myvar = '1234'» в коде для дублированных сообщений, затем в более позднем фильтре сопоставьте myvar с 1234 и выполните обычное действие для их удаления.
Поскольку этот сценарий является частью действия фильтра, часть условия фильтра должна соответствовать всем интересующим сообщениям. В этом тесте сценарий организуется после действия по копированию сообщения в локальную папку, что может или не может быть необходимым, но он загружает тело сообщения на локальный компьютер с учетной записью IMAP, поэтому у действия будет тело для доступ.
//FiltaQuilla filter action script:
for (let index = 0; index < msgHdrs.length; index++)
{ //get msg hdr:
let hdr = msgHdrs.queryElementAt(index, Ci.nsIMsgDBHdr);
//show subject: get it in two ways
let s = hdr.getStringProperty("subject");
if ( s != undefined && s.length != undefined && s.length > 0)
Cu.reportError(" flt log1: " + s.length + " " + s);
Cu.reportError(" flt log2: " + hdr.subject );
//show all properties of hdr: uncomment to show.
//let e = hdr.propertyEnumerator;
//while ( e.hasMore() ) Cu.reportError(" flt log3: " + e.getNext() );
//get body: from an example on MDC: getMessageBody(aMessageHeader)
//Actions configured in the filter: Without [1], it takes long long time.
// [1] copy msg to a local folder.
// [2] "Javascript Action with Body" with this script.
{ let messenger = Components.classes["@mozilla.org/messenger;1"]
.createInstance(Components.interfaces.nsIMessenger);
let listener = Components.classes["@mozilla.org/network/sync-stream-listener;1"]
.createInstance(Components.interfaces.nsISyncStreamListener);
let uri = hdr.folder.getUriForMsg(hdr);
messenger.messageServiceFromURI(uri)
.streamMessage(uri, listener, null, null, false, "");
let folder = hdr.folder;
let body = folder.getMsgTextFromStream(listener.inputStream,
hdr.Charset, 65536, 32768, false, true, { });
//show body:
Cu.reportError(" flt log4: " + body.length + " " + body);
}
}