【问题标题】:Get sender and recipients in Thunderbird extension upon sending message发送消息时在 Thunderbird 扩展中获取发件人和收件人
【发布时间】:2014-09-23 07:57:44
【问题描述】:

我正在尝试创建一个 Thunderbird 扩展,它是自举/无重启类型之一(我的意思是,javascript 代码不是从叠加层运行。相反,侦听器会触发各种事件)。

在某些时候,当用户决定发送邮件时,我想检查发件人和收件人(收件人、抄送、密送),以便对他们执行一些检查。

我已经设置了许多事件侦听器并开始工作,其中一个用于compose-send-message 事件,当用户确认发送消息时会正确触发。

在那里,我无法找到如何获取发件人电子邮件地址以及所有收件人电子邮件地址。我都试过了:

let fields = components.classes["@mozilla.org/messengercompose/composefields;1"].
  createInstance(components.interfaces.nsIMsgCompFields)

并与:

let params = components.classes["@mozilla.org/messengercompose/composeparams;1"].
  createInstance(components.interfaces.nsIMsgComposeParams);

let fields = params.composeFields;

但无论如何 fields.hasRecipients 返回 false,例如fields.to 为空(或为空,无法准确回忆)。看起来它们不是由 TB 设置的。

当然,我四处搜索,也在与覆盖扩展相关的 TB 线程中搜索,但没有运气。有一个 SO 线程 here,它似乎并没有完全回答这个问题,因为它只是关于发件人。
其他参考:SO againMozillaZineTB stdlib

【问题讨论】:

标签: thunderbird-addon


【解决方案1】:

我用这个更简单了。

var win = Services.wm.getMostRecentWindow("msgcompose");
composeFields = {};
win.Recipients2CompFields(composeFields); 
// composeFields has more properties than this like cc and bcc but the
// below is what you asked for.
Components.utils.reportError(composeFields.to);  // Debug output.
var sender = document.getElementById("msgIdentity").description

【讨论】:

    【解决方案2】:

    好吧,感谢人们对 mozilla.dev.apps.thunderbird threadmozilla.dev.extensions thread 的帮助,我能够从 compose-send-message 事件侦听器中访问发件人和收件人。

    这是相关代码...实际上,还有一点:果汁就在onComposeSendMessage之内:

    var windowMediator = components.classes['@mozilla.org/appshell/window-mediator;1'].
      getService(components.interfaces.nsIWindowMediator);
    
    var listener = new Listener(windowMediator);
    windowMediator.addListener(listener);
    
    function Listener (windowMediator) {
    
      var self = this;
      var _mediator = windowMediator;
      var _compose = null;
    
      this.onOpenWindow = function (aWindow) {
        // [...]
    
        _compose = aWindow.docShell.
          QueryInterface(components.interfaces.nsIInterfaceRequestor).
          getInterface(components.interfaces.nsIDOMWindow);
    
        _compose.addEventListener('compose-send-message', self.onComposeSendMessage, true);
      };
    
      this.onComposeSendMessage = function (event) {
        event.currentTarget.removeEventListener(event.type, self.onComposeSendMessage, true);
    
        // event.currentTarget.gMsgCompose <--> _compose.gMsgCompose
    
        // Get sender
        log(_compose.gMsgCompose.identity.email); // DEBUG with custom log function
    
        // Get recipients
        log(_compose.gMsgCompose.compFields.to);  // DEBUG
        log(_compose.gMsgCompose.compFields.cc);  // DEBUG
        log(_compose.gMsgCompose.compFields.bcc);  // DEBUG
      };
    
      this.onCloseWindow = function () {
        _mediator.removeListener(self); // Remove itself, so to not receive message twice
      };
    
      // [...]
    
    }
    

    再次感谢所有这些小组的反馈。

    【讨论】:

      猜你喜欢
      • 2011-01-05
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多