2011-01-27 11 views
0

「プレーンテキストMIMEメッセージ形式」の電子メールを含むファイルがあります。これがEML形式かどうかはわかりません。電子メールに添付ファイルが含まれているため、添付ファイルを抽出して再度作成したいとします。EML形式の電子メール添付ファイルを解析する適切なPHPの方法

... 
... 
Receive, deliver details 
... 
... 
From: sac ascsac <[email protected]> 

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

Message-ID: <[email protected]> 

Subject: Test attachments 

To: [email protected] 

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_gj5n2yx60ZyBmZyAKCjIKNDIzCnQ2Mwo=、間の部分は、最初の添付ファイルの内容であることがわかりますが - 取付部がどのように見えるかです。それらの添付ファイル(ファイル名と内容を解析してそれらのファイルを作成する)を解析したいと思います。

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

私は多くの場所で検索しましたが、ここではこれについては、Script to parse emails for attachments以外ではこれ以上議論が見つかりませんでした。私は検索中にいくつかの言葉を忘れているかもしれません。

は、あなたが情報

エンコード BASE64を抽出するためにboundriesを使用することができますしかし、私は境界があり、どのように正確な境界を使用することを確認していない - その答えではそれが言及されていますか?すでにいくつかのライブラリやこれを行うための明確な方法が必要です。私はここに車輪を再発明しようとすると、私は多くの間違いを犯すだろうと思う。

答えて

1

PHP Mailparse拡張機能がありますか?

手作業では、行ごとにメールを処理します。あなたの最初のContent-Typeヘッダ(あなたの例ではこのヘッダ)を打つと: Content-Type:multipart/mixed;境界= 20cf3054ac85d97721049a465e12

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

すべての部分は、ヘッダー、空白行、および内容で始まります。ヘッダーのコンテンツタイプを調べることで、どの添付ファイルか、そのタイプとファイル名を判断できます。 内容全体を読み、空白を取り除いて、それをbase64_decodeして、ファイルのバイナリ内容を取得しました。これは役に立ちますか?

+0

明らかに役立ちます。ありがとう、私はMailparse拡張を試しています。 –

+0

GoogleのPHP mimeメールパーサーはここで非常に役に立ちます。 http://code.google.com/p/php-mime-mail-parser/をご覧ください。 –

関連する問題