如何拦截传入的电子邮件并在雷鸟中检索邮件正文

时间:2014-12-03 06:42:28

标签: email thunderbird thunderbird-addon

在我的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);

                }
            }
        }
    };

1 个答案:

答案 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