Как вы вставляете заголовки электронной почты с расширением Thunderbird?

Я создаю расширение Thunderbird и хотел бы добавить свой собственный заголовок ко всем исходящим сообщениям электронной почты (например, ‹myext-version: 1.0›). есть идеи как это сделать? Я знаю, что это возможно, так как это делается в расширении OpenPGP Enigmail. Спасибо!


person sgoel    schedule 02.10.2008    source источник
comment
Разве это не принадлежит superuser.com?   -  person Vasiliy Sharapov    schedule 01.06.2011
comment
Это уместно, так как он кодирует расширение. Если он ищет существующее расширение, оно будет принадлежать superuser.com.   -  person studgeek    schedule 27.10.2012


Ответы (2)


Вот код одного расширения, над которым я работаю:

function SendObserver() {
  this.register();
}

SendObserver.prototype = {
  observe: function(subject, topic, data) {

     /* thunderbird sends a notification even when it's only saving the message as a draft.
      * We examine the caller chain to check for valid send notifications 
      */
     var f = this.observe;
     while (f) {
       if(/Save/.test(f.name)) {
           print("Ignoring send notification because we're probably autosaving or saving as a draft/template");
           return;
       }
       f = f.caller;
     }

     // add your headers here, separated by \r\n
     subject.gMsgCompose.compFields.otherRandomHeaders += "x-test: test\r\n"; 
     }

  },
  register: function() {
    var observerService = Components.classes["@mozilla.org/observer-service;1"]
                          .getService(Components.interfaces.nsIObserverService);
    observerService.addObserver(this, "mail:composeOnSend", false);
  },
  unregister: function() {
    var observerService = Components.classes["@mozilla.org/observer-service;1"]
                            .getService(Components.interfaces.nsIObserverService);
    observerService.removeObserver(this, "mail:composeOnSend");
  }
};


/*
 * Register observer for send events. Check for event target to ensure that the 
 * compose window is loaded/unloaded (and not the content of the editor).
 * 
 * Unregister to prevent memory leaks (as per MDC documentation).
 */
var sendObserver;
window.addEventListener('load', function (e) {if (e.target == document) sendObserver = new SendObserver(); }, true);
window.addEventListener('unload', function (e) { if (e.target == document) sendObserver.unregister();}, true);

Поместите это в файл .js, который загружается окном создания (например, путем наложения chrome://messenger/content/messengercompose/messengercompose.xul).

Проверка в SendObserver.observe была необходима в моем случае, потому что я хотел выполнить взаимодействие с пользователем, но вы, вероятно, могли бы ее пропустить.

person gerhard    schedule 26.03.2009

Я не знаю ответа, просто некоторые мысли...

Я думаю, что расширения Thunderbird обычно представляют собой просто xul и js. С сайта enigmail:

В отличие от большинства надстроек Mozilla, Enigmail содержит части, зависящие от платформы: он зависит от процессора, компилятора, библиотек операционной системы и почтового приложения, в которое он должен интегрироваться.

Глядя на исходный код Enigmail, это может быть соответствующий раздел (написано на C++)

Так что вам может понадобиться либо перевести то, что они сделали, в js(!) либо продолжать искать другой пример.

Вот еще одна ссылка, которая может оказаться полезной

person Colin Pickard    schedule 23.10.2008