如何拦截接收邮件并在雷鸟中检索邮件正文 [英] How to intercept incoming email and retrieve message body in 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,);
让messageBody = aMsgHdr.folder.getMsgTextFromStream(listener.inputStream,
aMsgHdr.Charset,
65536,
32768,
false,
true,
{});
alert(message body:+ messageBody);
}
}
}
};
我也有类似的问题。我发现(不容易)的解决方案是使用 MsgHdrToMimeMessage /gloda/modules/mimemsg.jsrel =nofollow> mimemsg.js ,因为Gloda尚不可用。这使用回调函数:
var newMailListener = {
msgAdded:function(aMsgHdr){
if (!aMsgHdr.isRead){
MsgHdrToMimeMessage(aMsgHdr,null,function(aMsgHdr,aMimeMessage){
//使用aMimeMessage执行某些操作:
alert(消息体:+ aMimeMessage。 coerceBodyToPlaintext());
//alert(aMimeMessage.allUserAttachments.length);
//alert(aMimeMessage.size);
},true);
}
}
};
不要忘记包含必要的模块:
Components.utils.import(resource:///modules/gloda/mimemsg.js);
更多的阅读可以找到e。 G。 here 。
In my Thunderbird add-on I want to listen to new incoming emails and process the message body.
So I have written a mailListener
and added it to an instance of nsIMsgFolderNotificationService
.
The listener works fine and notifies when a mail comes. I get the nsIMsgDBHdr
object which was fetched, but I cannot stream the message for the particular folder in the msgAdded
function of my mailListener
. it hangs, and I cannot even see the message body in the Thunderbird's message pane.
I think the nsISyncStreamListener
used to stream the message from the folder waits for OnDataAvailable
event which is not yet triggered inside the mailListener
's msgAdded
function.
Any inputs on how to fetch message body when a new email comes? Below is the code for my 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);
}
}
}
};
I had a similar problem. The solution I found (not easily) is to use MsgHdrToMimeMessage
from mimemsg.js as Gloda is not available yet. This uses the callback function:
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);
}
}
};
And do not forget to include the necessary module:
Components.utils.import("resource:///modules/gloda/mimemsg.js");
More folow up reading can be found e. g. here.
这篇关于如何拦截接收邮件并在雷鸟中检索邮件正文的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!