2

カスタムアドインを使用してJavaScriptから電子メール本文とその添付ファイルを保存しようとしていますが、 http://forums.mozillazine.org/viewtopic.php?f = 19&tで説明されているように保存できません。= 2030903何か提案はありますか?電子メールの本文をネイティブEML形式で保存できますか?ありがとうございました!

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形式で保存できますか?ありがとうございました![/編集]

4

1 に答える 1

4

上記の例を書きました。これで、最も難しい部分を把握できました。これが、あなたの質問に答える方法を理解するために私がしたことです。

  1. http://mxr.mozilla.org/comm-central/source/mail/base/content/msgHdrViewOverlay.js#1643で定義されていることが判明した AttachmentInfo で mxr 検索を実行しました。
  2. saveこれは、http://mxr.mozilla.org/comm-central/source/mailnews/base/public/nsIMessenger.idl#81 で定義されている nsIMessenger::saveAttachment の単なるプロキシであることが判明しました
  3. そこにメソッドがあることも判明saveAttachmentToFile!おそらくあなたが必要とするもの。定義を読むと、良い候補のようですhttp://mxr.mozilla.org/comm-central/source/mailnews/base/src/nsMessenger.cpp#614

おそらく、既に開いている nsIFile (良い参考資料があるのでhttps://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIFileuriを参照してください) と、添付ファイルの 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を参照してください。おそらく、独自の関数をそこにフックする必要があります。すべてがうまくいったことを確認します)。

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

于 2012-04-04T21:31:42.300 に答える