在我的Thunderbird插件中,我想收听新收到的电子邮件并处理邮件正文。
所以我写了mailListener
并将其添加到nsIMsgFolderNotificationService
的实例。
听众工作正常,并在邮件到来时通知。我获取了被提取的nsIMsgDBHdr
对象,但我无法为msgAdded
mailListener
函数中的特定文件夹传输消息。它挂起,我甚至无法在Thunderbird的消息窗格中看到消息正文。
我认为用于从文件夹中流式传输邮件的nsISyncStreamListener
会等待OnDataAvailable
mailListener
函数内尚未触发的msgAdded
事件
有关如何在新邮件到来时获取邮件正文的任何输入?以下是我的mailListener
var newMailListener = {
msgAdded: function(aMsgHdr) {
if( !aMsgHdr.isRead ){
let folder = aMsgHdr.folder;
if(aMsgHdr.recipients == "myemail+special@gmail.com"){
let messenger = Components.classes["@mozilla.org/messenger;1"]
.createInstance(Components.interfaces.nsIMessenger);
let listener = Components.classes["@mozilla.org/network/sync-stream-listener;1"]
.createInstance(Components.interfaces.nsISyncStreamListener);
let uri = aMsgHdr.folder.getUriForMsg(aMsgHdr);
messenger.messageServiceFromURI(uri).streamMessage(uri, listener, null, null, false, "");
let messageBody = aMsgHdr.folder.getMsgTextFromStream(listener.inputStream,
aMsgHdr.Charset,
65536,
32768,
false,
true,
{ });
alert("the message body : " + messageBody);
}
}
}
};
答案 0 :(得分:1)
我有类似的问题。我发现(不容易)的解决方案是使用mimemsg.js中的MsgHdrToMimeMessage
,因为Gloda尚不可用。这使用回调函数:
var newMailListener = {
msgAdded: function(aMsgHdr) {
if( !aMsgHdr.isRead ){
MsgHdrToMimeMessage(aMsgHdr, null, function (aMsgHdr, aMimeMessage) {
// do something with aMimeMessage:
alert("the message body : " + aMimeMessage.coerceBodyToPlaintext());
//alert(aMimeMessage.allUserAttachments.length);
//alert(aMimeMessage.size);
}, true);
}
}
};
不要忘记包含必要的模块:
Components.utils.import("resource:///modules/gloda/mimemsg.js");
可以找到更多的阅读内容。 G。 here