2014-12-03 3 views
1

В моем дополнении Thunderbird я хочу слушать новые входящие сообщения и обрабатывать тело сообщения.Как перехватить входящую почту и получить тело сообщения в thunderbird

Так что я написал mailListener и добавил его к примеру nsIMsgFolderNotificationService.

Слушатель прекрасно работает и уведомляет о поступлении почты. Я получаю объект nsIMsgDBHdr, который был извлечен, но я не могу передать сообщение для конкретной папки в функции msgAdded моего mailListener. он зависает, и я даже не вижу тело сообщения в панели сообщений Thunderbird.

Я думаю, что nsISyncStreamListener используется для потоковой передачи сообщения из папки ждет для OnDataAvailable события, которое еще не сработавшие внутри msgAdded функций mailListener «s.

Любые входные данные о том, как получить тело сообщения при появлении нового сообщения? Ниже приведен код для моего 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 от 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 до чтения можно найти е. г. here.