2012-01-03 124 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一個非常準系統實施 - 你應該勾上你自己的功能來檢查一切正常)。

我沒有試過這段代碼,但我非常有信心這些指導方針很有用。

相關問題