Email 如何在thunderbird中截获传入电子邮件并检索邮件正文
在我的Thunderbird插件中,我想收听新收到的电子邮件并处理邮件正文 因此,我编写了一个Email 如何在thunderbird中截获传入电子邮件并检索邮件正文,email,thunderbird,thunderbird-addon,Email,Thunderbird,Thunderbird Addon,在我的Thunderbird插件中,我想收听新收到的电子邮件并处理邮件正文 因此,我编写了一个mailstener,并将其添加到nsIMsgFolderNotificationService的实例中 侦听器工作正常,并在收到邮件时发出通知。我获取了提取的nsIMsgDBHdr对象,但我无法在我的mailstener的msgAdded函数中为特定文件夹流式传输消息。它挂起了,我甚至无法在Thunderbird的消息窗格中看到消息正文 我认为用于从文件夹中传输消息的nsISyncStreamList
mailstener
,并将其添加到nsIMsgFolderNotificationService
的实例中
侦听器工作正常,并在收到邮件时发出通知。我获取了提取的nsIMsgDBHdr
对象,但我无法在我的mailstener
的msgAdded
函数中为特定文件夹流式传输消息。它挂起了,我甚至无法在Thunderbird的消息窗格中看到消息正文
我认为用于从文件夹中传输消息的nsISyncStreamListener
会等待OnDataAvailable
事件,该事件在mailstener
的msgAdded
函数中尚未触发
在收到新邮件时,有没有关于如何获取邮件正文的信息?下面是mymailListener的代码
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);
}
}
}
};
我也有类似的问题。我发现的解决方案(不容易)是使用来自的msghdrtomemessage
,因为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");
更多后续阅读可在e。g、