Question

I am using the

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

method from http://mxr.mozilla.org/comm-central/source/mailnews/db/gloda/modules/mimemsg.js#171 to read the selected email via thunderbird extension. This method works fine and the only trouble is that it gives the plain text message by stripping all the html from the message.

How to get a html version of the message instead?

Was it helpful?

Solution

As I know you cannot access to the whole body (with mail and html tags). You have the functions and attributes of the XPCOM scriptable interface nsIMsgDbHdr. I have an add-on which sends mail. I read the whole mail body with the help of the following code snippet. As you can see I read the whole mail from the disk and loaded its content into a variable. You can also use it to read the full mail body.

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);
            }
        }
    }
}

I hope this will help you!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top