Email 如何在thunderbird中截获传入电子邮件并检索邮件正文

Email 如何在thunderbird中截获传入电子邮件并检索邮件正文,email,thunderbird,thunderbird-addon,Email,Thunderbird,Thunderbird Addon,在我的Thunderbird插件中,我想收听新收到的电子邮件并处理邮件正文 因此,我编写了一个mailstener,并将其添加到nsIMsgFolderNotificationService的实例中 侦听器工作正常,并在收到邮件时发出通知。我获取了提取的nsIMsgDBHdr对象,但我无法在我的mailstener的msgAdded函数中为特定文件夹流式传输消息。它挂起了,我甚至无法在Thunderbird的消息窗格中看到消息正文 我认为用于从文件夹中传输消息的nsISyncStreamList

在我的Thunderbird插件中,我想收听新收到的电子邮件并处理邮件正文

因此,我编写了一个
mailstener
,并将其添加到
nsIMsgFolderNotificationService
的实例中

侦听器工作正常,并在收到邮件时发出通知。我获取了提取的
nsIMsgDBHdr
对象,但我无法在我的
mailstener
msgAdded
函数中为特定文件夹流式传输消息。它挂起了,我甚至无法在Thunderbird的消息窗格中看到消息正文

我认为用于从文件夹中传输消息的
nsISyncStreamListener
会等待
OnDataAvailable
事件,该事件在
mailstener
msgAdded
函数中尚未触发

在收到新邮件时,有没有关于如何获取邮件正文的信息?下面是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);

                }
            }
        }
    };

我也有类似的问题。我发现的解决方案(不容易)是使用来自的
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、