0

パイプを使用して、スクリプトに電子メールを送信するようにプログラムしています。このスクリプトを使用すると、電子メール全体を.txtファイルとしてサーバーに保存できます。あとは、メールに添付されている添付ファイルを保存する方法を理解するだけです。(このメールアドレスは1つの信頼できるソースにのみ付与されるため、セキュリティは問題になりません)

電子メール全体を.txtファイルとして保存する作業コード:

$fd = fopen("php://stdin", "r");
$email = ""; // This will be the variable holding the data.
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
/* Saves the data into a file */
$fdw = fopen("/home/lmshost22/public_html/pipemail.txt", "w+");
fwrite($fdw, $email);
fclose($fdw);

添付ファイルを抽出して(常に.csvファイルになります)サーバーに保存するコードを教えてもらえますか?

.txtファイルが添付ファイルに対して表示するコードは次のとおりです。

------=_NextPart_000_0133_01CE0E98.061E7400
Content-Type: application/vnd.ms-excel;
    name="leads.csv"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
    filename="leads.csv"

ApplicationDetailId,DateCreated,VehicleInfoId,FirstName,MiddleName,LastNa=
me,Suffix,Street,City,State,ZipCode,Email,HomePhoneArea,HomePhonePrefix,H=
omePhoneSuffix,CellArea,CellPrefix,CellSuffix,WorkPhoneArea,WorkPhonePreF=
ix,WorkPhoneSuffix,AmountBorrow,IsVehiclePaidOff,IsVehicleSalvaged,OweAmo=
unt,TitleOwnership,IsInBankruptcy,IsInCreditCounseling,HearOfUs,VehicleIn=
foId,Year,Make,Model,Trim,Miles,Engine,DriveTrain,Transmission,Options,Bo=
ok,ClassCode,Door,FuelType,BodyStyle
4523,2/18/2013 2:56:33 PM,4524,James,,Pruitt,,7900 =
Carmelita,Atascadero,CA,93422,,702,=3D"353",=3D"9760",=3D"",=3D"",=3D"",=3D=
"",=3D"",=3D"",=3D"2500.0000",True,False,0.0000,No =
one,False,False,Google,4524,2001,=3D"Toyota",Tacoma =
Xtracab,PreRunner,200000,V6  3.4 =
Liter,2WD,Automatic,199443~199448~199471~199480~199508~4234190~,0.0000,1,=
0,Gas,Pickup

------=_NextPart_000_0133_01CE0E98.061E7400--
4

1 に答える 1

1
  1. 添付ファイルは、メッセージがMIME / Multipartでありboundary、さまざまなメッセージ部分を区切るヘッダーセットがあることを意味します。例えば:

    Content-Type: multipart/mixed;
        boundary="b1_bb1b331cd6dafa1dc6a19e3b2e090b07"
    

    したがって、最初に次のような方法でそれを見つけたいと思います。

    preg_match('/boundary="(.*)"/', $message, $matches);
    
  2. メッセージは--、境界と連結され、その部分に固有のヘッダー、空白行、およびデータが続くことによって分割されます。例えば:

    --b1_bb1b331cd6dafa1dc6a19e3b2e090b07
    Content-Type: application/pdf; name="Invoice-37272.pdf"
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment; filename="Invoice-37272.pdf"
    
    // base64 data here //
    

    そして、メッセージは'--' . $boundary . '--'、例えば:で終了します。--b1_bb1b331cd6dafa1dc6a19e3b2e090b07--

したがって、これらの2ビットの情報を使用して、メッセージを構成要素に分割し、添付ファイルを検索/保存できます。

于 2013-02-19T18:20:05.023 に答える