2013-09-30 4 views
0

Я использую методЧтение электронной почты с помощью Thunderbird расширения в формате HTML

function MsgHdrToMimeMessage(aMsgHdr, aCallbackThis, aCallback, 
          aAllowDownload, aOptions) { 

от http://mxr.mozilla.org/comm-central/source/mailnews/db/gloda/modules/mimemsg.js#171 читать выбранную электронную почту через ThunderBird расширения. Этот метод работает нормально, и единственная проблема заключается в том, что он дает текстовое сообщение, удаляя все html из сообщения.

Как получить html-версию сообщения вместо этого?

ответ

1

Как я знаю, вы не можете получить доступ ко всему телу (с помощью тэгов почты и html). У вас есть функции и атрибуты интерфейса сценария XPCOM nsIMsgDbHdr. У меня есть надстройка, которая отправляет почту. Я прочитал весь почтовый ящик с помощью следующего фрагмента кода. Как вы можете видеть, я прочитал всю почту с диска и загрузил ее содержимое в переменную. Вы также можете использовать его для чтения полного почтового тела.

function SendMailNow(aMsgDBHdr) { 
    var aMsgURI = aMsgDBHdr.folder.getUriForMsg(aMsgDBHdr); 

    var msgWindow = Components.classes["@mozilla.org/messenger/msgwindow;1"] 
      .createInstance(); 
    msgWindow = msgWindow.QueryInterface(Components.interfaces.nsIMsgWindow); 

    var msgStream = Components.classes["@mozilla.org/network/sync-stream-listener;1"] 
      .createInstance(); 
    msgStream = msgStream.QueryInterface(Components.interfaces.nsIInputStream); 

    var aMsgService = messenger.messageServiceFromURI(aMsgURI); 

    var scriptInputStream = Components.classes["@mozilla.org/scriptableinputstream;1"] 
      .createInstance(); 
    scriptInputStream = scriptInputStream 
      .QueryInterface(Components.interfaces.nsIScriptableInputStream); 

    scriptInputStream.init(msgStream); 

    try { 
     aMsgService.streamMessage(aMsgURI, // uri of message to stream 
     msgStream, // a stream listener listening to the message 
     msgWindow, // a nsIMsgWindow for progress and status feedback 
     null, // a nsIUrlListener that is notified when url starts and stops 
     false, // it will create a stream converter from message rfc2822 to 
     null // Header added to the URI. e.g., header=filter 
     ); 
    } catch (ex) { 
    } 

    // Creating content 
    var content = ""; 
    while (scriptInputStream.available()) { 
     content = content + scriptInputStream.read(512); 
     if (content.match(/\r\n\r\n/) || content.match(/\n\n/)) { 
      if (sendMail(content, aMsgDBHdr.messageId)) { 
       log("SEND_DONE\t" + aMsgDBHdr.messageId + "\t" 
         + aMsgDBHdr.subject); 
      } else { 
       log("SEND_FAILED\t" + aMsgDBHdr.messageId + "\t" 
         + aMsgDBHdr.subject); 
      } 
     } 
    } 
} 

Надеюсь, это поможет!

+0

Этот код работает, но печатает много данных заголовка. есть ли способ печати, начиная с тела сообщения? – Vik

+0

Я не знаю никакой магии, чтобы сделать это. Вы сами разбираете контент с помощью манипуляции с строкой Javascript [functions] (http://w3schools.com/jsref/jsref_obj_string.asp), например 'replace()', 'match()' и т. Д. Как я вижу [ здесь] (http://stackoverflow.com/questions/1672144/parsing-email-conversations-with-regular-expressions) для этого вы можете найти полезные регулярные выражения. –

+0

Хорошо, что было бы обходным путем, чтобы вычеркнуть текст и получить желаемые результаты. Мое намерение состояло в том, чтобы узнать, есть ли какой-либо другой метод или способ, который дает только тело – Vik

 Смежные вопросы

  • Нет связанных вопросов^_^