2013-02-19 7 views
0

Я использую программу для отправки электронной почты в скрипт. Используя этот скрипт, я могу успешно сохранить всю электронную почту в виде 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-- 

ответ

1
  1. Вложения подразумевают, что сообщение MIME/многослойный, установивший 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--

Таким образом, вы можете использовать эти два бита информации, чтобы разбить ваши сообщения на составные части и найти/сохранить крепление.

+0

Сообщение действительно многокомпонентное/смешанное. MIME-версия: 1.0 Content-Type: multipart/mixed; \t border = "---- = _ NextPart_000_0133_01CE0E98.061E7400" X-Mailer: Microsoft Outlook 14.0 – user1789437

Смежные вопросы