【问题标题】:get message body using javascript (thunderbird)使用 javascript (thunderbird) 获取消息正文
【发布时间】:2014-11-26 21:16:14
【问题描述】:

我正在开发一个 Thunderbird 扩展,我想获取收到的消息的消息正文。
我用过这个功能,但是没用。。。 我怎样才能做到这一点?

 function getMessageBody() {

     let messageURI = GetLoadedMessage();

     let aMessageHeader = messenger.msgHdrFromURI(messageURI);

     // I try 
     // aMessageHeader = messenger.messageServiceFromURI(messageURI).messageURIToMsgHdr(messageURI); 
     // aMessageHeader = url.QueryInterface(Components.interfaces.nsIMsgMessageUrl).messageHeader;  
     // too

     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 = aMessageHeader.folder.getUriForMsg(aMessageHeader);
     messenger.messageServiceFromURI(uri)
         .streamMessage(uri, listener, null, null, false, "");
     let folder = aMessageHeader.folder;
     return folder.getMsgTextFromStream(listener.inputStream,
         aMessageHeader.Charset,
         65536,
         32768,
         false,
         true, {});
 }

【问题讨论】:

    标签: javascript thunderbird-addon


    【解决方案1】:

    您是否在拦截新传入电子邮件的 mailListener 中调用 getMessageBody()? 在那种情况下,我遇到了同样的问题,在 mailListener 的 msgAdded 方法中,要流式传输的消息尚不可用。我认为这是因为 nsISyncStreamListener 使用了阻塞流。看看我的问题:How to intercept incoming email and retrieve message body in thunderbird

    如果您尝试获取特定“文件夹”中已有邮件的消息正文(而不是拦截新收到的电子邮件),那么您需要先获取 nsIMsgDBHdr,然后从中获取 uri 以进行流式传输身体。以下代码对我有用,我在其中迭代特定文件夹的所有消息。

    for each (let aMessageHeader in fixIterator(folder.msgDatabase.EnumerateMessages(), Ci.nsIMsgDBHdr)){
    
                    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 = aMessageHeader.folder.getUriForMsg(aMessageHeader);
                        messenger.messageServiceFromURI(uri).streamMessage(uri, listener, null, null, false, "");
                        let folder = aMessageHeader.folder;
                        let messageBody = folder.getMsgTextFromStream(listener.inputStream,
                                           aMessageHeader.Charset,
                                           65536,
                                           32768,
                                           false,
                                           true,
                                           { });
                        alert("message body : " + messageBody); 
    }
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 2020-05-12
      • 2021-04-05
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 2013-06-18
      • 2010-12-15
      • 1970-01-01
      相关资源
      最近更新 更多