发送消息后,在Thunderbird扩展中获取发件人和收件人 [英] Get sender and recipients in Thunderbird extension upon sending message

查看:240
本文介绍了发送消息后,在Thunderbird扩展中获取发件人和收件人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在四处尝试创建Thunderbird扩展程序,该扩展程序是自举式/无重启类型(我的意思是,javascript代码不是 从覆盖层运行.而是引发各种事件的监听器).

I'm playing around trying to create a Thunderbird extension, one of the bootstrapped/restartless type (I mean, javascript code is not run from overlays. Instead listeners fire for various events).

有时候,我想在用户决定发送邮件时检查发件人和收件人(收件人",抄送",密件抄送"),以便对它们进行一些检查.

At some point I'd like to check the sender and recipients (To, Cc, Bcc) when user decides to send the message, so to perform some checks on them.

我已经设置并工作了许多事件侦听器,其中包括一个compose-send-message事件侦听器,当用户确认发送消息后,该侦听器会正确触发.

I already have a number of event listeners set up and working, including one for compose-send-message event that gets properly fired when user confirms sending the message.

在这里,我找不到如何获取发件人电子邮件地址以及所有收件人的电子邮件地址.我都尝试过:

There, I'm not able to find how to get the sender email address as well as all recipients email addresses. I tried both with:

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设置.

but anyway fields.hasRecipients returns false, and e.g. fields.to is null (or empty, can't exactly recall). It looks like they're not being set by TB.

我当然也到处搜索了与覆盖扩展相关的TB线程,但是没有运气.在此处中有一个SO线程,看来并不能完全解决问题.问题,因为它仅与发件人有关.
其他参考:再次SO

Of course I searched around, also in TB threads related to overlays extensions, but with no luck. There's a SO thread here, which does not seem to completely answer the question as it's only about the sender.
Other references: SO again, MozillaZine, TB stdlib.

推荐答案

好,感谢人们对此

Well, thanks to the help from people on this mozilla.dev.apps.thunderbird thread and this mozilla.dev.extensions thread, I'm able to access both sender and recipients from within compose-send-message event listener.

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

Here's the relevant code... actually, a bit more: the juice is just within 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
  };

  // [...]

}

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

Again, thanks all on those groups for feedbacks.

这篇关于发送消息后,在Thunderbird扩展中获取发件人和收件人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆