2012-01-03 14 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, }); 
} 

[編集]上記のコードは添付ファイルを保存しますが、[名前を付けて保存]ダイアログを開きます。静かにできますか?電子メール本文はネイティブのEML形式に保存できますか?ありがとうございました! [/ EDIT]

答えて

4

私は上記の例を書いています。あなたはほとんど完了しており、あなたは最も難しい部分を見つけました。ここであなたの質問に答える方法を見つけました。

  1. 私はhttp://mxr.mozilla.org/comm-central/source/mail/base/content/msgHdrViewOverlay.js#1643
  2. saveがnsIMessengerのためだけの代理で判明:: http://mxr.mozilla.org/comm-central/source/mailnews/base/public/nsIMessenger.idl#81
  3. で定義saveAttachmentが、それはまたがあることが判明した時に定義されることが判明しAttachmentInfoのMXRの検索を実行しました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(恐らく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を参照してください。あなた自身の関数をフックして、すべてがうまくいったことを確認してください)。

私はこのコードを試しませんでしたが、私はガイドラインが健全であると確信しています。

関連する問題