5

Можно ли написать собственные фильтры для Thunderbird, мне все равно, какой язык используется.

Я хочу быть в состоянии сделать полный анализ электронной почты (заголовки и текст) и предпринять определенные действия на основе содержимого.

Бонусные баллы, если я могу сравнить текущее письмо с более ранними полученными сообщениями (в основном, для удаления повторяющихся сообщений журнала)

4 ответа4

4

На самом деле это выполнимо с 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);
  }
}
4

Нет, это не представляется возможным.

Такую обработку, вероятно, проще всего выполнить на почтовом сервере с такими вещами, как procmail, Courier maildrop, amavisd-new и т.д.

Amavisd-new специально разработан для передачи почты внешним программам обработки перед доставкой, обычно антивирусным и антиспамовым демонам.

Если вы не можете сделать это на стороне сервера, вам нужно написать расширение, но это, вероятно, слишком много работы.

Наконец, возможно, вы сможете удовлетворить большую часть своих потребностей с помощью расширения FiltaQuilla , которое поддерживает регулярные выражения, запуск внешних программ и действия javascript. Вы можете найти больше информации на странице автора.

Лично, если бы у меня не было доступа к почтовому серверу, и если FiltaQuilla не удовлетворяла мои потребности, я бы предпочел настроить локальный почтовый сервер Postfix / IMAP, получающий почту от провайдера и обрабатывающий ее перед доставкой с помощью моего скрипты. Это должно быть намного проще, чем написание расширения ТБ. Но это может быть излишним для ваших нужд.

2

Вы можете найти прокси POP3/IMAP, который обладает необходимыми возможностями фильтрации с помощью сценариев. Это может быть прокси, который работает на том же компьютере, что и Thunderbird.

1

С расширением:http://mesquilla.com/extensions/filtaquilla/

вы можете создавать JavaScript и / или внешние файлы для выполнения, так что это выглядит как "возможно"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .