2010-06-17 5 views
1

J'ai besoin d'envoyer du courrier en utilisant un serveur smtp en php.Envoyer un smtp mail en php avec une page HTML jointe en tant que texte

Maintenant, je suis en mesure d'envoyer le courrier en utilisant smtp pour un texte brut.

mais j'ai une exigence où je dois joindre une page HTML, qui comprend un ensemble d'images.

Maintenant, pour que je tente le code suivant:

<?php 
require_once "Mail.php"; 
$to  = '[email protected]'; 
$from = '[email protected]'; 
$subject = $_POST['subject']; 
$body = $_POST['message']; 

$fileatt  = $_FILES['fileatt']['tmp_name']; 
$fileatt_type = $_FILES['fileatt']['type']; 
$fileatt_name = $_FILES['fileatt']['name']; 

$headers = array ('From' => $from, 
    'To' => $to, 
    'Subject' => $subject); 

if (is_uploaded_file($fileatt)) { 
    echo("<p>Inside 1</p>"); 
    $file = fopen($fileatt,'rb'); 
    $data = fread($file,filesize($fileatt)); 
    fclose($file); 

    // Generate a boundary string 
    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

    array_push(&$headers, 'MIME-Version: 1.0'); 
    array_push(&$headers, 'Content-Type: multipart/mixed;'); 
    array_push(&$headers, " boundary=\"{$mime_boundary}\""); 

    echo("<p>Inside 2</p>"); 

    $body = "This is a multi-part message in MIME format.\n\n" . 
      "--{$mime_boundary}\n" . 
      "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . 
      "Content-Transfer-Encoding: 7bit\n\n" . 
    $body . "\n\n"; 

    echo("<p>Inside 3</p>"); 

    $data = chunk_split(base64_encode($data)); 

    echo("<p>Inside 4</p>"); 

    $body .= "--{$mime_boundary}\n" . 
       "Content-Type: {$fileatt_type};\n" . 
       " name=\"{$fileatt_name}\"\n" . 
       "Content-Transfer-Encoding: base64\n\n" . 
    $data . "\n\n" . 
       "--{$mime_boundary}--\n"; 

    echo("<p>Inside 5</p>"); 
} 
$host = "[email protected]"; 
$username = "[email protected]"; 
$password = "user"; 
$smtp = Mail::factory('smtp', 
    array ('host' => $host, 
    'auth' => true, 
    'username' => $username, 
    'password' => $password)); 

$mail = $smtp->send($to, $headers, $body); 
if (PEAR::isError($mail)) { 
    echo("<p>" . $mail->getMessage() . "</p>"); 
} else { 
    echo("<p>Message successfully sent!</p>"); 
} 
?> 

Maintenant, ce code fonctionne bien pour moi, et il est d'envoyer le courrier à l'adresse e-mail cible.

Mais quand j'ouvre cet e-mail dans la boîte de réception, il me montrant le texte suivant dans la boîte aux lettres:

This is a multi-part message in MIME format. 

--==Multipart_Boundary_x368d72fe1ff44518e90537abdb4bf029x 
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

test 1011 

--==Multipart_Boundary_x368d72fe1ff44518e90537abdb4bf029x 
Content-Type: text/html; 
name="mailing.html" 
Content-Transfer-Encoding: base64 

PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFs 
Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25h 
bC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhl 
YWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsg 
Y2hhcnNldD11dGYtOCIgLz4NCjx0aXRsZT5QZWVrYWJvb0JlYW5zPC90aXRsZT4NCjxzdHlsZSB0 
eXBlPSJ0ZXh0L2NzcyI+DQo8IS0tDQpib2R5IA0KYTpsaW5rIHsNCgl0ZXh0LWRlY29yYXRpb246 
IG5vbmU7DQp9DQphOnZpc2l0ZWQgew0KCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCn0NCmE6aG92 
ZXIgew0KCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCn0NCmE6YWN0aXZlIHsNCgl0ZXh0LWRlY29y 
YXRpb246IG5vbmU7DQp9DQotLT4NCjwvc3R5bGU+PC9oZWFkPg0KDQo8Ym9keSBzdHlsZT0ibWFy 
Z2luLWxlZnQ6IDBweDsNCgltYXJnaW4tdG9wOiAwcHg7DQoJbWFyZ2luLXJpZ2h0OiAwcHg7DQoJ 
bWFyZ2luLWJvdHRvbTogMHB4OyI+DQo8dGFibGUgd2lkdGg9IjEwMjQiIGJvcmRlcj0iMCIgYWxp 
Z249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBiZ2NvbG9yPSIjNjUy 
QzhBIj4NCiAgPHRyPg0KICAgIDx0ZCB3aWR0aD0iMTAyNCIgaGVpZ2h0PSI3NjIiICBhbGlnbj0i 
Y2VudGVyIiB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzY1MkM4QSI+PGltZyBzcmM9ImltYWdlcy9z 
dWJzY3JpYmVyLWh0bWxfMDEuanBnIiB3aWR0aD0iMTAyNCIgaGVpZ2h0PSI3NjIiIGFsdD0iIj48 
L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRkIHdpZHRoPSIxMDI0IiBoZWlnaHQ9Ijk1IiBh 
bGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiID48aW1nIHNyYz0iaW1hZ2VzL3N1YnNjcmliZXItaHRt 
bF8wMi5qcGciIHdpZHRoPSIxMDI0IiBoZWlnaHQ9Ijk1IiBhbHQ9IiI+PC90ZD4NCiAgPC90cj4N 
CiAgPHRyPg0KICAgIDx0ZCB3aWR0aD0iMTAyNCIgaGVpZ2h0PSI2NCJhbGlnbj0ibGVmdCIgdmFs 
aWduPSJ0b3AiID48aW1nIHNyYz0iaW1hZ2VzL3N1YnNjcmliZXItaHRtbF8wMy5qcGciIHdpZHRo 
PSIxMDI0IiBoZWlnaHQ9IjY0IiBhbHQ9IiI+PC90ZD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0 
ZD48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRk 
aW5nPSIwIj4NCiAgICAgIDx0cj4NCiAgICAgICAgPHRkIHdpZHRoPSI2NTEiIGhlaWdodD0iNDEi 
IGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PGltZyBzcmM9ImltYWdlcy9zdWJzY3JpYmVyLWh0 
bWxfMDQuanBnIiB3aWR0aD0iNjUxIiBoZWlnaHQ9IjQxIiBhbHQ9IiI+PC90ZD4NCiAgICAgICAg 
PHRkIHdpZHRoPSIyNjgiIGhlaWdodD0iNDEiIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PGEg 
aHJlZj0iaHR0cDovL3d3dy5wZWVrYWJvb2JlYW5zLmNvbS9hYm91dC5odG1sIj48aW1nIHNyYz0i 
aW1hZ2VzL3N1YnNjcmliZXItaHRtbF8wNS5qcGciIGFsdD0iIiB3aWR0aD0iMjY4IiBoZWlnaHQ9 
IjQxIiBib3JkZXI9IjAiPjwvYT48L3RkPg0KICAgICAgICA8dGQgd2lkdGg9IjEwNSIgaGVpZ2h0 
PSI0MSIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiA+PGltZyBzcmM9ImltYWdlcy9zdWJzY3Jp 
YmVyLWh0bWxfMDYuanBnIiB3aWR0aD0iMTA1IiBoZWlnaHQ9IjQxIiBhbHQ9IiI+PC90ZD4NCiAg 
ICAgIDwvdHI+DQogICAgPC90YWJsZT48L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRkIHdp 
ZHRoPSIxMDI0IiBoZWlnaHQ9IjM4IiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjxpbWcgc3Jj 
PSJpbWFnZXMvc3Vic2NyaWJlci1odG1sXzA3LmpwZyIgICBhbHQ9IiI+PC90ZD4NCiAgPC90cj4N 
CiAgPHRyPg0KICAgIDx0ZD48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNp 
bmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4NCiAgICAgIDx0cj4NCiAgICAgICAgPHRkIHdpZHRoPSI1 
MSIgaGVpZ2h0PSI0NiIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48aW1nIHNyYz0iaW1hZ2Vz 
L3N1YnNjcmliZXItaHRtbF8wOC5qcGciIHdpZHRoPSI1MSIgaGVpZ2h0PSI0NiIgYWx0PSIiPjwv 
dGQ+DQogICAgICAgIDx0ZCB3aWR0aD0iMTY2IiBoZWlnaHQ9IjQ2IiBhbGlnbj0ibGVmdCIgdmFs 
aWduPSJ0b3AiID48YSBocmVmPSJodHRwOi8vd3d3LnBlZWthYm9vYmVhbnMuY29tL3Rlc3RpbW9u 
aWFscy5odG1sIj48aW1nIHNyYz0iaW1hZ2VzL3N1YnNjcmliZXItaHRtbF8wOS5qcGciIGFsdD0i 
IiB3aWR0aD0iMTY2IiBoZWlnaHQ9IjQ2IiBib3JkZXI9IjAiPjwvYT48L3RkPg0KICAgICAgICA8 
dGQgd2lkdGg9IjU2MiIgaGVpZ2h0PSI0NiIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48aW1n 
IHNyYz0iaW1hZ2VzL3N1YnNjcmliZXItaHRtbF8xMC5qcGciIHdpZHRoPSI1NjIiIGhlaWdodD0i 
NDYiIGFsdD0iIj48L3RkPg0KICAgICAgICA8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48 
YSBocmVmPSJodHRwOi8vd3d3LnBlZWthYm9vYmVhbnMuY29tL3NwaWxsX3RoZV9iZWFucy5odG1s 
Ij48aW1nIHNyYz0iaW1hZ2VzL3N1YnNjcmliZXItaHRtbF8xMS5qcGciIGFsdD0iIiB3aWR0aD0i 
MjA4IiBoZWlnaHQ9IjQ2IiBib3JkZXI9IjAiPjwvYT48L3RkPg0KICAgICAgICA8dGQgd2lkdGg9 
IjM3IiBoZWlnaHQ9IjQ2IiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiID48aW1nIHNyYz0iaW1h 
Z2VzL3N1YnNjcmliZXItaHRtbF8xMi5qcGciIHdpZHRoPSIzNyIgaGVpZ2h0PSI0NiIgYWx0PSIi 
PjwvdGQ+DQogICAgICA8L3RyPg0KICAgIDwvdGFibGU+PC90ZD4NCiAgPC90cj4NCiAgPHRyPg0K 
ICAgIDx0ZCB3aWR0aD0iMTAyNCIgaGVpZ2h0PSIxMTgiIGFsaWduPSJsZWZ0IiB2YWxpZ249InRv 
cCI+PGltZyBzcmM9ImltYWdlcy9zdWJzY3JpYmVyLWh0bWxfMTMuanBnIiB3aWR0aD0iMTAyNCIg 
aGVpZ2h0PSIxMTgiIGFsdD0iIj48L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRkIGFsaWdu 
PSJsZWZ0IiB2YWxpZ249InRvcCI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxz 
cGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+DQogICAgICA8dHI+DQogICAgICAgIDx0ZCBhbGln 
bj0ibGVmdCIgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MTQiIGhlaWdodD0iMzkiID48aW1nIHNyYz0i 
aW1hZ2VzL3N1YnNjcmliZXItaHRtbF8xNC5qcGciIHdpZHRoPSI0MTQiIGhlaWdodD0iMzkiIGFs 
dD0iIj48L3RkPg0KICAgICAgICA8dGQgd2lkdGg9IjM2NSIgaGVpZ2h0PSIzOSIgYWxpZ249Imxl 
ZnQiIHZhbGlnbj0idG9wIiA+PGltZyBzcmM9ImltYWdlcy9zdWJzY3JpYmVyLWh0bWxfMTUuanBn 
IiB3aWR0aD0iMzY1IiBoZWlnaHQ9IjM5IiBhbHQ9IiI+PC90ZD4NCiAgICAgICAgPHRkIHdpZHRo 
PSIyNDUiIGhlaWdodD0iMzkiIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PGltZyBzcmM9Imlt 
YWdlcy9zdWJzY3JpYmVyLWh0bWxfMTYuanBnIiB3aWR0aD0iMjQ1IiBoZWlnaHQ9IjM5IiBhbHQ9 
IiI+PC90ZD4NCiAgICAgIDwvdHI+DQogICAgPC90YWJsZT48L3RkPg0KICA8L3RyPg0KICA8dHI+ 
DQogICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PHRhYmxlIHdpZHRoPSIxMDAlIiBi 
b3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+DQogICAgICA8dHI+DQog 
ICAgICAgIDx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIHdpZHRoPSI0MTQiIGhlaWdodD0i 
NjAiID48aW1nIHNyYz0iaW1hZ2VzL3N1YnNjcmliZXItaHRtbF8xNy5qcGciIHdpZHRoPSI0MTQi 
IGhlaWdodD0iNjAiIGFsdD0iIj48L3RkPg0KICAgICAgICA8dGQgYWxpZ249ImxlZnQiIHZhbGln 
bj0idG9wIiB3aWR0aD0iNjEwIiBoZWlnaHQ9IjYwIj48aW1nIHNyYz0iaW1hZ2VzL3N1YnNjcmli 
ZXItaHRtbF8xOC5qcGciIHdpZHRoPSI2MTAiIGhlaWdodD0iNjAiIGFsdD0iIj48L3RkPg0KICAg 
ICAgPC90cj4NCiAgICA8L3RhYmxlPjwvdGQ+DQogIDwvdHI+DQogIDx0cj4NCiAgICA8dGQ+PHRh 
YmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0i 
MCI+DQogICAgICA8dHIgYmdjb2xvcj0iIzY1MkM4QSI+DQogICAgICAgIDx0ZCB3aWR0aD0iMjIx 
IiBoZWlnaHQ9IjYyIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjxpbWcgc3JjPSJpbWFnZXMv 
c3Vic2NyaWJlci1odG1sXzE5LmpwZyIgd2lkdGg9IjIyMSIgaGVpZ2h0PSI2MiIgYWx0PSIiPjwv 
dGQ+DQogICAgICAgIDx0ZCB3aWR0aD0iODEiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIw 
IiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPg0KICAgICAgICAgIDx0cj4NCiAgICAg 
ICAgICAgIDx0ZCB3aWR0aD0iODEiIGhlaWdodD0iNDIiIGFsaWduPSJsZWZ0IiB2YWxpZ249InRv 
cCI+PGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL3BlZWthYm9vYmVhbnMvIj48aW1nIHNyYz0i 
aW1hZ2VzL3N1YnNjcmliZXItaHRtbF8yMC5qcGciIGFsdD0iIiB3aWR0aD0iODEiIGhlaWdodD0i 
NDIiIGJvcmRlcj0iMCI+PC9hPjwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgICA8dHI+ 
DQogICAgICAgICAgICA8dGQgd2lkdGg9IjgxIiBoZWlnaHQ9IjIxIiAgYWxpZ249ImxlZnQiIHZh 
bGlnbj0idG9wIiA+PGltZyBzcmM9ImltYWdlcy9zdWJzY3JpYmVyLWh0bWxfMjUuanBnIiB3aWR0 
aD0iODEiIGhlaWdodD0iMjEiIGFsdD0iIj48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAg 
IDwvdGFibGU+PC90ZD4NCiAgICAgICAgPHRkIHdpZHRoPSIzNDAiIGhlaWdodD0iNjMiIGFsaWdu 
PSJsZWZ0IiB2YWxpZ249InRvcCI+PGltZyBzcmM9ImltYWdlcy9zdWJzY3JpYmVyLWh0bWxfMjEu 
anBnIiB3aWR0aD0iMzQwIiBoZWlnaHQ9IjYzIiBhbHQ9IiI+PC90ZD4NCiAgICAgICAgPHRkIHdp 
ZHRoPSI2OSIgaGVpZ2h0PSI2MyIgPjxpbWcgc3JjPSJpbWFnZXMvc3Vic2NyaWJlci1odG1sXzIy 
LmpwZyIgd2lkdGg9IjY5IiBoZWlnaHQ9IjYzIiBhbHQ9IiI+PC90ZD4NCiAgICAgICANCiAgICAg 
ICAgPHRkIHdpZHRoPSI0NyIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGFibGUgd2lkdGg9 
IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4NCiAgICAg 
ICAgICA8dHI+DQogICAgICAgICAgICA8dGQgd2lkdGg9IjQ3IiBoZWlnaHQ9IjQ4IiBhbGlnbj0i 
bGVmdCIgdmFsaWduPSJ0b3AiPjxhIGhyZWY9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tL3BhZ2Vz 
L1BlZWthYm9vLUJlYW5zLzE2ODgyMDU5NTA0MD9yZWY9c2VhcmNoJnNpZD02OTE4MDMxMTcuMTA3 
ODQ2MDQ5NC4uMSI+PGltZyBzcmM9ImltYWdlcy9zdWJzY3JpYmVyLWh0bWxfMjMuanBnIiBhbHQ9 
IiIgd2lkdGg9IjQ3IiBoZWlnaHQ9IjQ4IiBib3JkZXI9IjAiPjwvYT48L3RkPg0KICAgICAgICAg 
IDwvdHI+DQogICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkICB3aWR0aD0iNDciIGhlaWdo 
dD0iMTUiIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PGltZyBzcmM9ImltYWdlcy9zdWJzY3Jp 
YmVyLWh0bWxfMjYuanBnIiB3aWR0aD0iNDciIGhlaWdodD0iMTUiIGFsdD0iIj48L3RkPg0KICAg 
ICAgICAgIDwvdHI+DQogICAgICAgIDwvdGFibGU+PC90ZD4NCiAgICAgICAgPHRkIHdpZHRoPSIy 
NjYiIGhlaWdodD0iNjIiIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PGltZyBzcmM9ImltYWdl 
cy9zdWJzY3JpYmVyLWh0bWxfMjQuanBnIiB3aWR0aD0iMjY2IiBoZWlnaHQ9IjYyIiBhbHQ9IiI+ 
PC90ZD4NCiAgICAgIDwvdHI+DQogICAgPC90YWJsZT48L3RkPg0KICA8L3RyPg0KPC90YWJsZT4N 
CjwvYm9keT4NCjwvaHRtbD4NCg== 


--==Multipart_Boundary_x368d72fe1ff44518e90537abdb4bf029x-- 

Alors, il me montrant clairement les données codées. Alors, que devrait-on modifier pour envoyer la bonne page html qui devrait être visible dans la boîte de réception du courriel ciblé?

+0

Inclure les en-têtes de l'e-mail dans la question, s'il vous plaît. N'utilisez pas non plus runtime par référence, il a longtemps été déprécié et sera probablement supprimé dans la prochaine version de PHP en raison de problèmes de sécurité. 'array_push' reçoit déjà le premier argument par référence. – Artefacto

+0

Il serait utile si vous pouviez montrer les données brutes complètes de votre email tel que reçu, y compris les en-têtes. – kasperjj

+0

A propos de votre édition: nous ne voulons plus de données codées en base64 pour la deuxième partie, nous voulons les en-têtes de message. – Artefacto

Répondre

1

Pourquoi voulez-vous réinventer la roue? Il y a beaucoup de différentes implémentations qui vous permettent d'envoyer du courrier HTML avec des pièces jointes, à savoir. Zend_Mail, PHPMailer, .... Utilisez l'un d'entre eux, et sauvez-vous des maux de tête.

Questions connexes