在发送邮件时获取Thunderbird扩展的发件人和收件人
问题描述:
我在试图创建一个Thunderbird扩展,其中一个引导/无重启类型(我的意思是,JavaScript代码是而不是从覆盖层运行。各种活动)。在发送邮件时获取Thunderbird扩展的发件人和收件人
在某些时候,当用户决定发送消息时,我想检查发件人和收件人(收件人,抄送,密送),以便对他们执行一些检查。
我已经设置和工作的事件监听器的数量,其中包括一个用于确认发送消息时正确触发的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 again,MozillaZine,TB stdlib。
答
好吧,感谢来自mozilla.dev.apps.thunderbird thread和mozilla.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
};
// [...]
}
再次,感谢所有这些组进行反馈。
答
我已经做得更简单了。
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
在此期间,我得到一些提示从这个论坛:https://groups.google.com/forum/#!topic/mozilla.dev.apps.thunderbird/QH39UnH4YlE,https://开头groups.google.com/forum/#!topic/mozilla.dev.extensions/Lj93jF_2ZNU – superjos 2014-09-26 19:17:14