0

「プレーンテキスト MIME メッセージ形式」の電子メールを含むファイルがあります。これが EML 形式かどうかはわかりません。電子メールには添付ファイルが含まれており、添付ファイルを抽出してそれらのファイルを再度作成したいと考えています。アタッチメント部分はこんな感じ~

...
...
Receive, deliver details
...
...
From: sac ascsac <sacsac@sacascsac.ascsac>

Date: Thu, 20 Jan 2011 18:05:16 +0530

Message-ID: <AANLkTimmSL0iGW4rA3tvSJ9M3eT5yZLTGsqvCvf2fFC3@mail.gmail.com>

Subject: Test attachments

To: ascsacsa@ascsac.com

Content-Type: multipart/mixed; boundary=20cf3054ac85d97721049a465e12



--20cf3054ac85d97721049a465e12

Content-Type: multipart/alternative; boundary=20cf3054ac85d97717049a465e10



--20cf3054ac85d97717049a465e10

Content-Type: text/plain; charset=ISO-8859-1



hello this is a test mail. It contains two attachments



--20cf3054ac85d97717049a465e10

Content-Type: text/html; charset=ISO-8859-1



hello this is a test mail. It contains two attachments<br>


--20cf3054ac85d97717049a465e10--

--20cf3054ac85d97721049a465e12

Content-Type: text/plain; charset=US-ASCII; name="simple_test.txt"

Content-Disposition: attachment; filename="simple_test.txt"

Content-Transfer-Encoding: base64

X-Attachment-Id: f_gj5n2yx60



aGVsbG8gd29ybGQKYWMgYXNj
...
encoded things here
...
ZyBmZyAKCjIKNDIzCnQ2Mwo=

--20cf3054ac85d97721049a465e12

Content-Type: application/x-httpd-php; name="oscomm_backup_code.php"

Content-Disposition: attachment; filename="oscomm_backup_code.php"

Content-Transfer-Encoding: base64

X-Attachment-Id: f_gj5n5gxn1



PD9waHAKCg ...
...
encoded things here
...
X2xpbmsoRklMRU5BTUVfQkFDS1VQKSk7Cgo/Pgo=
--20cf3054ac85d97721049a465e12--

X-Attachment-Id: f_gj5n2yx60と の間の部分ZyBmZyAKCjIKNDIzCnQ2Mwo=が最初の添付ファイルの内容であることがわかります。これらの添付ファイル (ファイル名と内容を解析し、それらのファイルを作成します) を解析したいと考えています。

PHP クラスで使用可能なDBX パーサークラスを使用して dbx 形式のファイルを解析した後、このファイルを取得しました。

私は多くの場所を検索しましたが、添付ファイルの電子メールを解析するためのスクリプト以外の SO で、これに関する議論はあまり見つかりませんでした。検索中にいくつかの用語を見逃した可能性があります。その答えでそれが言及されています-

境界を使用して、base64 でエンコードされた情報を抽出できます

しかし、どれが境界であり、境界を正確にどのように使用するのかわかりませんか? これを行うには、いくつかのライブラリまたは明確に定義された方法が既に存在する必要があります。ここで車輪を再発明しようとすると、多くの間違いを犯すと思います。

4

1 に答える 1

1

PHP Mailparse拡張機能がありますが、試しましたか?

手動の方法は、メールを1行ずつ処理することです。最初のContent-Typeヘッダー(この例ではこれ)をヒットしたとき:Content-Type:multipart / mixed; 境界=20cf3054ac85d97721049a465e12

あなたには境界があります。この文字列は、複数のパーツ間の境界として使用されます(そのため、マルチパートと呼ばれます)。行がダッシュとこの文字列で始まるたびに、新しい部分が始まります。あなたの例では:-20cf3054ac85d97721049a465e12

すべての部分は、ヘッダー、空白行、およびコンテンツで始まります。ヘッダーのコンテンツタイプを確認することで、添付ファイル、タイプ、ファイル名を判別できます。コンテンツ全体を読み取り、スペースを取り除き、base64_decodeすると、ファイルのバイナリコンテンツが得られます。これは役に立ちますか?

于 2011-01-27T14:23:36.783 に答える