7

我正在构建一个 Thunderbird 扩展,并希望将我自己的标题添加到所有外发电子邮件(例如 <myext-version: 1.0> )。知道怎么做吗?我知道这是可能的,因为这是在 OpenPGP Enigmail 扩展中完成的。谢谢!

4

2 回答 2

3

这是我正在处理的一个扩展的代码:

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 是必要的,因为我想进行用户交互,但您可能会忽略它。

于 2009-03-26T14:49:02.177 回答
1

我不知道答案,但只是一些想法......

我认为 Thunderbird 扩展通常只是 xul 和 js。从 enigmail 网站:

与大多数 Mozilla 附加组件不同,Enigmail 包含依赖于平台的部分:它依赖于 CPU、编译器、操作系统的库和它应该集成到的电子邮件应用程序。

查看 Enigmail 源代码,这可能是相关部分(用 c++ 编写)

因此,您可能需要将他们所做的事情翻译成 js(!) 或继续寻找不同的示例。

这是另一个可能有用的链接

于 2008-10-23T12:40:05.947 回答