Как вставить заголовки электронной почты с расширением Thunderbird? - PullRequest
7 голосов
/ 02 октября 2008

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

Ответы [ 2 ]

3 голосов
/ 26 марта 2009

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

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 была необходима в моем случае, потому что я хотел сделать взаимодействие с пользователем, но вы, вероятно, могли бы его пропустить.

1 голос
/ 23 октября 2008

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

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

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

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

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

Вот еще одна полезная ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...