envoi plusieurs pieces jointes dans mail
Posté : 06 nov. 2006, 16:45
Salut,
J'ai un petit soucis avec un script qui envoi 2 PJ via un formulaire ci joint le code
Une idee ??
Merci de votre aide
J'ai un petit soucis avec un script qui envoi 2 PJ via un formulaire ci joint le code
//Piece joint Lettre motivation
$name_file = $_FILES['lm']['name'];
$source=$_FILES['lm']['tmp_name'];
move_uploaded_file($source, $name_file);
//Piece joint CV
$name_file2 = $_FILES['cv']['name'];
$source2=$_FILES['cv']['tmp_name'];
move_uploaded_file($source2, $name_file2);
//Routine d'envoi
$boundary = "-----=".md5(uniqid(rand()));
// Version du format MIME utilisé
$header = "MIME-Version: 1.0\r\n";
// Boundary = Frontière en Anglais
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$header .= "\r\n";
//--------------------------------------------------
// Construction du message
//--------------------------------------------------
$msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";
// Chaque partie du message est séparé par une frontière
$msg .= "--$boundary\r\n";
// Et pour chaque partie on en indique le type
$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
// Et comment il sera codé
$msg .= "Content-Transfer-Encoding:8bit\r\n";
// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
$msg .= "\r\n";
// Enfin, vous pouvez écrire votre Message ici
// Je vais vous expliquer comment faire votre description plus bas
$msg .= "\n*** Resultat du formulaire ***\n";
if(count($HTTP_POST_VARS)){
while (list($key, $val) = each($HTTP_POST_VARS)){
$msg .="$key : $val\n";
}
}
if(count($HTTP_GET_VARS)){
while (list($key, $val) = each($HTTP_GET_VARS)){
$msg .="$key : $val\n";
}
}
$msg .="*************************\n";
$msg .= "\r\n";
// Tout d'abord lire le contenu du fichier
$file = "$name_file";
$fp = fopen($file, "rb"); // b c'est pour les windowsiens
$attachment = fread($fp, filesize($file));
fclose($fp);
// puis convertir le contenu du fichier en une chaîne de caractère
// certe totalement illisible mais sans caractères exotiques
// et avec des retours à la ligne tout les 76 caractères
// pour être conforme au format RFC 2045
$attachment = chunk_split(base64_encode($attachment));
// Ne pas oublier que chaque partie du message est séparé par une frontière
$msg .= "--$boundary\r\n";
// Et pour chaque partie on en indique le type
$msg .= "Content-Type: image/gif; name=\"$file\"\r\n";
$msg .= "Content-Transfer-Encoding: base64\r\n";
// Petit plus pour les fichiers joints
// Il est possible de demander à ce que le fichier
// soit si possible affiché dans le corps du mail
$msg .= "Content-Disposition: inline; filename=\"$file\"\r\n";
// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
$msg .= "\r\n";
// C'est ici que l'on insère le code du fichier lu
$msg .= $attachment . "\r\n";
$msg .= "\r\n\r\n";
// voilà, on indique la fin par une nouvelle frontière
$msg .= "--$boundary--\r\n";
//on fait la seconde piece
$file2 = "$name_file2";
$fp2 = fopen($file2, "rb"); // b c'est pour les windowsiens
$attachment2 = fread($fp2, filesize($file2));
fclose($fp2);
// puis convertir le contenu du fichier en une chaîne de caractère
// certe totalement illisible mais sans caractères exotiques
// et avec des retours à la ligne tout les 76 caractères
// pour être conforme au format RFC 2045
$attachment2 = chunk_split(base64_encode($attachment2));
// Ne pas oublier que chaque partie du message est séparé par une frontière
$msg .= "--$boundary\r\n";
// Et pour chaque partie on en indique le type
$msg .= "Content-Type: image/gif; name=\"$file2\"\r\n";
$msg .= "Content-Transfer-Encoding: base64\r\n";
// Petit plus pour les fichiers joints
// Il est possible de demander à ce que le fichier
// soit si possible affiché dans le corps du mail
$msg .= "Content-Disposition: inline; filename=\"$file2\"\r\n";
// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
$msg .= "\r\n";
// C'est ici que l'on insère le code du fichier lu
$msg .= $attachment2 . "\r\n";
$msg .= "\r\n\r\n";
// voilà, on indique la fin par une nouvelle frontière
$msg .= "--$boundary--\r\n";
$subject = "Prise de contact sur le site optilib.com ";
$destinataire = "[email protected]";
$expediteur = $_POST['email'];
$reponse = $expediteur;
echo "Ici, vous mettez le message qui doit être affiché après l'envoie du courriel!";
mail($destinataire, "$subject", $msg,"Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header);
Le pb c'est que je ne recoit que la 1ere piece et pas la seconde.Une idee ??
Merci de votre aide
