2010-06-07 5 views
0

J'ai créé un formulaire qui contient un fichier de zone de téléchargement et d'autres champs de texte. J'utilise php pour envoyer les données du formulaire par e-mail et joindre le fichier.Joindre un fichier à un courrier électronique à l'aide de php

Ceci est le code que j'utilise mais il ne fonctionne pas correctement. Le fichier est normalement attaché au message mais le reste des données n'est pas envoyé.

$body="bla bla bla"; 

$attachment = $_FILES['cv']['tmp_name']; 
$attachment_name = $_FILES['cv']['name']; 
if (is_uploaded_file($attachment)) { 
    $fp = fopen($attachment, "rb"); 
    $data = fread($fp, filesize($attachment)); 
    $data = chunk_split(base64_encode($data)); 
    fclose($fp); 
} 

$headers = "From: $email<$email>\n"; 
$headers .= "Reply-To: <$email>\n"; 
$headers .= "MIME-Version: 1.0\n"; 
$headers .= "Content-Type: multipart/related; type=\"multipart/alternative\"; boundary=\"----=MIME_BOUNDRY_main_message\"\n"; 
$headers .= "X-Sender: $first_name $family_name<$email>\n"; 
$headers .= "X-Mailer: PHP4\n"; 
$headers .= "X-Priority: 3\n"; 
$headers .= "Return-Path: <$email>\n"; 
$headers .= "This is a multi-part message in MIME format.\n"; 
$headers .= "------=MIME_BOUNDRY_main_message \n"; 
$headers .= "Content-Type: multipart/alternative; boundary=\"----=MIME_BOUNDRY_message_parts\"\n"; 

$message = "------=MIME_BOUNDRY_message_parts\n"; 
$message .= "Content-Type: text/html; charset=\"utf-8\"\n"; 
$message .= "Content-Transfer-Encoding: quoted-printable\n"; 
$message .= "\n"; 
$message .= "$body\n"; 
$message .= "\n"; 
$message .= "------=MIME_BOUNDRY_message_parts--\n"; 
$message .= "\n"; 
$message .= "------=MIME_BOUNDRY_main_message\n"; 
$message .= "Content-Type: application/octet-stream;\n\tname=\"" . $attachment_name . "\"\n"; 
$message .= "Content-Transfer-Encoding: base64\n"; 
$message .= "Content-Disposition: attachment;\n\tfilename=\"" . $attachment_name . "\"\n\n"; 
$message .= $data; //The base64 encoded message 
$message .= "\n"; 
$message .= "------=MIME_BOUNDRY_main_message--\n"; 

$subject = 'bla bla bla'; 
$to="[email protected]"; 
mail($to,$subject,$message,$headers); 

Pourquoi les données $ body ne sont-elles pas envoyées? Pouvez-vous m'aider à le réparer?

Répondre

1

Eh bien, je suggère d'utiliser le paquet PEAR Mail_Mime ... Il abstracts tout de suite ... que

Quant à votre question précise, je suppose que c'est parce que vous avez deux frontières différentes et deux Content- Saisissez les en-têtes dans la section d'en-tête. Essayez de générer quelque chose comme ceci:

MIME-Version: 1.0 
Content-Type: multipart/mixed; boundary="------=MIME_BOUNDARY_MESSAGE_PARTS" 

------=MIME_BOUNDARY_MESSAGE_PARTS 
Content-Type: text/html charset="utf-8" 

$body 

------=MIME_BOUNDARY_MESSAGE_PARTS 
Content-Type: application/octet-stream;name="filename" 
Content-Transfer-Encoding: base64 
... 
$data 

------=MIME_BOUNDARY_MESSAGE_PARTS 
+0

Oui, une bibliothèque de courrier aide vraiment. J'utilise mailer rapide. – gunnx

Questions connexes