8

これは珍しい宝石のようです。AppleMailの.emlxファイルの構造(およびそれらの部分的な変形、およびディレクトリ構造の意味)に関するドキュメントを見つける場所です。ドキュメントはAppleのサイトに存在していないようであり、Googleを介してそれについての合理的な言及を見つけることもできません。

これのポイントは、bash / ruby​​ / python / insert-script-langauge-hereスクリプトを作成して、これらのファイルの混乱をMaildirやMboxなどの使用可能/柔軟なものに変換することです。最終的な目標は、ユーザーの/ Library / Mailストアのスナップショットを、Maildirの形式を使用する既存のDovecotセットアップに移行することです。

はい、私はこのプログラムを知っていますが、それは私が求めている解決策に対応していません。20個のメールボックスを手動で変換し、既存のインストールに手動で挿入すると、メッセージを別の場所にダイジェストして自動的に保存するスクリプトを作成するよりも時間がかかります。この手順を必要とするユーザーが潜在的に6人以上いることを忘れないでください。ですから、それをスクリプト化するのは私の時間の価値があります。

この質問を閉じることに投票するのではなく、削除が保留されている間にこの質問の重複を閉じるように投票してください。何らかの理由で、Chromeをブラウザとして使用すると、投稿に不具合が発生することがあります。

フォローアップ:フォーマットは実際には文書化されておらず、ほとんどのソースがリバースエンジニアリングしているようです。時間があれば、自分でそうしようと思います。成功した場合は、調査結果の詳細を記載した2回目のフォローアップを投稿します。

4

5 に答える 5

3

emlx 形式に関するいくつかの追加情報。

メッセージは次のように構成されます。

  • 最初の行のメッセージのバイト数
  • メッセージの MIME ダンプ
  • XML plist

XML plist には、次のような特定のコードが含まれています。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>date-sent</key>
        <real>1362211252</real>
        <key>flags</key>
        <integer>8590195713</integer>
        <key>original-mailbox</key>
        <string>imap://****@127.0.0.1:143/mail/2013/03</string>
        <key>remote-id</key>
        <string>252</string>
        <key>subject</key>
        <string>Re: Foobar</string>
</dict>

フラグは jwz によって記述されており、30 ビット整数を表します。

0      read                      1 << 0
1      deleted                   1 << 1
2      answered                  1 << 2
3      encrypted                 1 << 3
4      flagged                   1 << 4
5      recent                    1 << 5
6      draft                     1 << 6
7      initial (no longer used)  1 << 7
8      forwarded                 1 << 8
9      redirected                1 << 9
10-15  attachment count          3F << 10 (6 bits)
16-22  priority level            7F << 16 (7 bits)
23     signed                    1 << 23
24     is junk                   1 << 24
25     is not junk               1 << 25
26-28  font size delta           7 << 26 (3 bits)
29     junk mail level recorded  1 << 29
30     highlight text in toc     1 << 30
31     (unused)

ファイルの完全なデータ構造を確認できるように、自分自身に簡単なメッセージを送信し、詳細をいくつか削除しemlxます。

875       
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on ******.*********.***
X-Spam-Level: 
X-Spam-Status: No, score=-3.2 required=4.2 tests=BAYES_00,RP_MATCHES_RCVD,
        SPF_PASS,TVD_SPACE_RATIO autolearn=ham version=3.3.2
Received: from [127.0.0.1] (******.*********.*** [***.**.**.**])
        by ******.*********.*** (8.14.5/8.14.5) with ESMTP id r2TN8m4U099571
        for <****@*********.***>; Fri, 29 Mar 2013 19:08:48 -0400 (EDT)
        (envelope-from ****@*********.***)
Subject: very simple
From: Karl Dubost <****@*********.***>
Content-Type: text/plain; charset=us-ascii
Message-Id: <4E83618E-BB56-404F-8595-87352648ADC7@*********.***>
Date: Fri, 29 Mar 2013 19:09:06 -0400
To: Karl Dubost <****@*********.***>
Content-Transfer-Encoding: 7bit
Mime-Version: 1.0 (Apple Message framework v1283)
X-Mailer: Apple Mail (2.1283)

message Foo
-- 
Karl Dubost
http://www.la-grange.net/karl/
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>date-sent</key>
        <real>1364598546</real>
        <key>flags</key>
        <integer>8590195713</integer>
        <key>original-mailbox</key>
        <string>imap://********@127.0.0.1:11143/mail/2013/03</string>
        <key>remote-id</key>
        <string>41147</string>
        <key>subject</key>
        <string>very simple</string>
</dict>
</plist>
于 2013-03-29T23:19:26.767 に答える
3

ruby の emlx2mbox コンバーターは次のとおりです: Mailbox Converter

仕様のドキュメントから書かれたものではないと思いますが、複数の更新が行われたため、形式の癖の少なくともいくつかを処理するように進化したことを願っています. ソース コードの長さは約 250 行で、読みやすく、コメントも充実しています。

于 2009-05-19T19:12:14.193 に答える
1

mailcore2 を使用して .eml メッセージを解析しています。これを .emlx で機能させるには、最初の行 (数字を含む) を削除する必要がありました。メッセージ自体にはメッセージの長さが備わっているため、最後の XML ブロックを削除する必要はありません。

Objective-c/cocoa で行った方法は次のとおりです (MCOMessageParser は mailcore2 フレームワークから来ています)。

-(Documents *)ParseEmlMessageforPath: (NSString*)fullpath filename:(NSString*)filename{
NSLog(@"fullpath = %@", fullpath);
NSError * error;
error = nil;
NSData *fileContents = [NSData dataWithContentsOfFile:fullpath options:NSDataReadingMappedIfSafe error:&error];
if (error) { 
     [[NSApplication sharedApplication] presentError:error];
}
MCOMessageParser * parser;
if (fileContents) {
    if ([[fullpath pathExtension] isEqualToString:@"emlx"]) {
        NSData * linefeed = [(NSString*)@"\n" dataUsingEncoding:NSUTF8StringEncoding ];
        NSInteger filelength = [fileContents length];
        NSRange  xx = NSMakeRange(0, 20); 
        NSRange pos = [fileContents rangeOfData:linefeed options:0 range:xx] ;
        if (pos.location != NSNotFound) {
            NSData *subcontent = [fileContents subdataWithRange:(NSRange){pos.location+1, filelength-(pos.location)-1}];
            parser = [MCOMessageParser messageParserWithData:subcontent];
        } else {
            return nil;
        }

    } else {
        parser = [MCOMessageParser messageParserWithData:fileContents];

    }

そして、そこに行きます....

于 2013-07-27T12:16:25.473 に答える
0

元の emlx2mbox ruby​​ スクリプトは、かなり前に作成されました。最新の Ruby 環境で動作するように更新しました。https://github.com/imdatsolak/elmx2mboxで確認してください。

于 2021-12-02T11:48:22.143 に答える