2014-12-03 56 views
1

在我的Thunderbird附加組件中,我想收聽新收到的電子郵件並處理郵件正文。如何攔截傳入的電子郵件並檢索雷鳥中的郵件正文

所以我寫了一個mailListener並把它添加到nsIMsgFolderNotificationService一個實例。

監聽器正常工作,並通知郵件何時發送。我得到nsIMsgDBHdr被取回的對象,但我無法在我的mailListenermsgAdded函數中傳輸特定文件夾的消息。它會掛起,我甚至無法在Thunderbird的消息窗格中看到消息正文。

我想用來從文件夾中等待OnDataAvailable事件還未被觸發mailListenermsgAdded函數內流的消息nsISyncStreamListener

任何有關如何在新郵件發送時獲取郵件正文的輸入?下面是代碼爲我mailListener

var newMailListener = { 
     msgAdded: function(aMsgHdr) { 
      if(!aMsgHdr.isRead){ 
       let folder = aMsgHdr.folder; 
       if(aMsgHdr.recipients == "[email protected]"){ 
        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); 

       } 
      } 
     } 
    }; 

回答

0

我也有類似的問題。我發現(不容易)的解決方案是使用MsgHdrToMimeMessage from mimemsg.js,因爲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"); 

更多folow中了閱讀可以發現如G。 here

相關問題