2012-01-03 81 views
2

我正在尝试使用自定义插件从javascript保存电子邮件正文及其附件,而且我无法按照http://forums.mozillazine.org/viewtopic.php?f=19&t=2030903中的说明执行操作有什么建议么?电子邮件正文是否可以保存为原生EML格式?谢谢!保存来自Thunderbird的电子邮件正文及其附件

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

[编辑]上面的代码不会保存附件,但会打开SaveAs对话框。它可以安静地完成吗?电子邮件正文是否可以保存为原生EML格式?谢谢! [/编辑]

回答

4

我写了上面的例子。你快完成了,你想出了最难的部分。这就是我刚才所做的,以弄清楚如何回答你的问题。

  1. 我跑AttachmentInfo的MXR搜索果然在http://mxr.mozilla.org/comm-central/source/mail/base/content/msgHdrViewOverlay.js#1643
  2. 被定义原来save仅仅是nsIMessenger :: saveAttachment代理,在http://mxr.mozilla.org/comm-central/source/mailnews/base/public/nsIMessenger.idl#81
  3. 定义它也证明,有一个那里有saveAttachmentToFile方法!可能你需要什么。阅读的定义,它似乎是一个不错的人选http://mxr.mozilla.org/comm-central/source/mailnews/base/src/nsMessenger.cpp#614

你可能需要通过功能已经打开nsIFile(见https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIFile因为有很好的参考材料有),以及附件的URI(可作为在你的代码uri),该消息的URI(可能是一些沿msgHdr.folder.getUriForMsg(msgHdr)线),内容类型(att.contentType这里),并实施nsIUrlListener监听器(这里定义:http://mxr.mozilla.org/comm-central/source/mailnews/base/public/nsIUrlListener.idl#48,看到https://github.com/protz/GMail-Conversation-View/blob/master/modules/message.js#L1492一个非常准系统实施 - 你应该勾上你自己的功能来检查一切正常)。

我没有试过这段代码,但我非常有信心这些指导方针很有用。

相关问题