如何拦截接收邮件并在雷鸟中检索邮件正文 [英] How to intercept incoming email and retrieve message body in thunderbird

查看:403
本文介绍了如何拦截接收邮件并在雷鸟中检索邮件正文的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



所以我写了一个 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屋!

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