0

I would like to save email attachments using thunderbird source code. I got the following code in your forums..but its not working

    alert("Messages selected: " + gFolderDisplay.selectedCount);
      let enumerator = gFolderDisplay.selectedMessages;
        for each (let msgHdr in fixIterator(enumerator, Ci.nsIMsgDBHdr)) {
          var messageID = msgHdr.messageId;
           alert("MessageID: " + messageID);
           var subject = msgHdr.mime2DecodedSubject;
          alert("Subject: " + subject);
            MsgHdrToMimeMessage(msgHdr, null, function (aMsgHdr, aMimeMsg) {
              try {
        alert("Size of the message: " + aMimeMsg.size);
            alert("Structure of the message:\n" + aMimeMsg.prettyString(true, undefined, true));
             let attachments = aMimeMsg.allUserAttachments || aMimeMsg.allAttachments;
             alert("Number of attachments: " + attachments.length);
                   for (let [index, att] in Iterator(attachments))
        {
            alert ("URL: " + att.url  + " Name: " + att.name);
            let ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);  
            let neckoURL = null;  
            neckoURL = ioService.newURI(att.url, null, null);  
            neckoURL.QueryInterface(Ci.nsIMsgMessageUrl);  
            let uri = neckoURL.uri;  
            let attInfo = new AttachmentInfo(att.contentType, att.url, att.name, uri, att.isExternal);
            attInfo.save();
        }
    } catch (err) {
        alert(err);
    }
}, true, { examineEncryptedParts: true, });
}

Using above code i can able to go through the selected messages.but not saving the attachments.its showing number of attachments. And also i would like to set my own labels for the selected mails. How i can i achieve this? Please help me out... Thanks in advance

Stephan
  • 7,360
  • 37
  • 46
madas
  • 73
  • 1
  • 5
  • 15
  • 1
    You should at least show that you've made some effort trying to understand the failure. Where is the code failing exactly? What are the values of "[index, att]" for each iteration of the loop? Which error messages do you get in the error console? – Jonathan Protzenko Apr 16 '13 at 12:51

1 Answers1

0

working code

      var enumerator = gFolderDisplay.selectedMessages;
        for each (var msgHdr in fixIterator(enumerator, Components.interfaces.nsIMsgDBHdr)) {
        msgHdr.setStringProperty("docuHive","dhivelabel");

            MsgHdrToMimeMessage(msgHdr, null, function (aMsgHdr, aMimeMsg) {
              try {
             var attachments = aMimeMsg.allUserAttachments || aMimeMsg.allAttachments;
                   for (var [index, att] in Iterator(attachments))
        {
            var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);  
            var neckoURL = null;  
            neckoURL = ioService.newURI(att.url, null, null);  
            neckoURL.QueryInterface(Components.interfaces.nsIMsgMessageUrl);  
            var uri = neckoURL.uri;  
            var attInfo = new AttachmentInfo(att.contentType, att.url, att.name, uri, att.isExternal); 
            // getting the chrome directory
            var file = Components.classes["@mozilla.org/file/directory_service;1"].
           getService(Components.interfaces.nsIProperties).
           get("AChrom", Components.interfaces.nsIFile);

           var msguri = msgHdr.folder.getUriForMsg(msgHdr);

    messenger = Components.classes["@mozilla.org/messenger;1"]
                       .createInstance(Components.interfaces.nsIMessenger);
                       alert(messenger);
        messenger.saveAttachmentToFolder(att.contentType,att.url,"attachmentname.extension",msguri,file);

        }
    } catch (err) {
        alert(err);
    }
}, true, { examineEncryptedParts: true, });
}
madas
  • 73
  • 1
  • 5
  • 15