【问题标题】:How to intercept incoming email and retrieve message body in thunderbird如何在雷鸟中拦截传入的电子邮件并检索邮件正文
【发布时间】:2015-01-31 15:14:50
【问题描述】:

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

所以我写了一个mailListener 并将其添加到nsIMsgFolderNotificationService 的实例中。

监听器工作正常并在邮件到达时通知。我得到了已提取的nsIMsgDBHdr 对象,但我无法在mailListenermsgAdded 函数中为特定文件夹流式传输消息。它挂起,我什至看不到 Thunderbird 的消息窗格中的消息正文。

我认为用于从文件夹流式传输消息的 nsISyncStreamListener 等待 OnDataAvailable 事件,该事件尚未在 mailListenermsgAdded 函数内触发。

关于如何在收到新电子邮件时获取消息正文的任何​​输入?下面是我的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);

                }
            }
        }
    };

【问题讨论】:

    标签: email thunderbird thunderbird-addon


    【解决方案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");
    

    更多后续阅读可以找到 e. G。 here.

    【讨论】:

      猜你喜欢
      • 2012-01-11
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 2011-04-05
      • 2012-12-21
      • 1970-01-01
      相关资源
      最近更新 更多