0

着信メールをシェル アカウントにパイプし、その結果、メールを解析する PHP スクリプトにパイプする .forward.postix があります。

今のところ、オンラインで見たすべてのものに基づいて、このexplode('From: ', $email);アプローチを使用して、すべてをデータベースに必要な vars に分割しています。

添付ファイルを入力してください。同じアプローチを使用して、jpg 添付ファイルを取り出すためにこれを実行していますが、すべての電子メール クライアントが生のソースを同じようにフォーマットするわけではなく、頭痛の種になっています。

$contentType1 = explode('Content-type: image/jpg;', $email); //start ContentType
$contentType2 = explode("--Boundary_", $contentType1[1]); //end ContentType

$jpg1 = explode("\n\n", $contentType2[0]); //double return starts base64 blob
$jpg2 = explode("\n\n", $jpg1[1]); //double return marks end of base64 blob

$image = base64_decode($jpg2[0]); //decode base64 blob into jpg raw

ここに私の問題があります: すべてのメール クライアント (たとえば GMail など) が添付ファイルを としてリストするわけではありません'Content-type: image/jpg'。GMail は!'Content-Type: IMAGE/JPEG'として入れて送信することもあります。'Content-Type: image/jpeg'私の爆発と一致しない...

私の質問:誰かが base64 ブロブの境界を見つけるより良い方法を知っていますか? または、大文字と小文字を区別しない爆発の方法で、何に一致するかを'Content-Type:'試したり、確認したりできimage/jpgますか?image-jpeg

4

1 に答える 1

1

を使用して文字列を分割してみることができますpreg_split()。たぶん、このようなもの

$pattern = '#content-type: image/jpe?g#i';
$split_array = preg_split($pattern, $email);
于 2012-11-30T20:08:38.503 に答える