8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'utilise ce script : http://www.commentcamarche.net/faq/sujet-2761-langages-envoyer-un-mail-avec-piece-jointe :


<?php
$boundary='didondinaditondelosdudosdodudundodudindon';
//En-têtes du mail
$headers="From: expediteur@domaine.fr\r\n
MIME-Version: 1.0\r\n
Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n\n";

//Corps du mail en commençant par le message principal
$body="--". $boundary ."\n
Content-Type: text/plain; charset=ISO-8859-1\r\n\n
Message principal du mail.\n\n";

/* Piece jointe, on va dire que notre fichier s'appele bidule.doc et qu'il se situe dans le repertoire courant */

$fichier=file_get_contents('./bidule.doc');
/* On utilise aussi chunk_split() qui organisera comme il faut l'encodage fait en base 64 pour se conformer aux standards */
$fichier=chunk_split( base64_encode($fichier) );

//Ecriture de la pièce jointe
$body = $body . "--" .$boundary. "\n
Content-Type: application/msword; name=\"nom_fichier\"\r\n
Content-Transfer-Encoding: base64\r\n
Content-Disposition: attachment; filename=\"nom_fichier\"\r\n\n
$fichier";

//Fermeture de la frontière
$body = $body . "--" . $boundary ."--";

//Envoi du mail
mail("destinataire@bidule.fr", "sujet", $body, $headers);
?>


Pas de problème pour le message lui-même, mais la pièce jointe est dans le texte avec la "frontière" ignorée et ressemble à ceci : Gl2LnRpdGxlLCBkaXYuaGVhZGVyLCBkaX etc., ce qui n'est guère satisfaisant. Smiley bawling

Quelqu'un peut-il m'aider à faire en sorte que
$body = $body . "--" .$boundary. "\n
soit pris en compte ?
Modérateur
Salut,

Je pense que c'est normal que cela ne fonctionne pas puisque ta variable $boudary est erronée.

Remplace ceci :

$boundary='didondinaditondelosdudosdodudundodudindon';


par :


$boundary=md5(uniqid(rand())); //génération de valeur aléatoire


Je l'ai fait de tête. Peut être que je me sois trompé de l'ordre.

++
Modifié par Nolem (09 Sep 2008 - 21:38)
Bien vue Nolem ! C'était peut-etre tout simplement ça !

Bon, je suis un peu juste en temps pour tester mais ça devrait le faire avec cette modif.

Dans l'intervalle, je suis parti sur autre script (pas de moi) qui fonctionne super bien pour faire la même chose :



<?php

$mime_boundary = "<<<--==+X[".md5(time())."]";

$headers .= "From: Bidule <destinataire@bidule.fr>\r\n";
$headers .= "To: Bidule <destinataire@bidule.fr>\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed;\r\n";
$headers .= " boundary=\"".$mime_boundary."\"";

$message .= "Message principal du mail.\r\n";
$message .= "\r\n";
$message .= "--".$mime_boundary."\r\n";
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n";
$message .= "\r\n";
$message .= "Bonjour \r\n";
$message .= "Voici le fichier demandé! \r\n";
$message .= "--".$mime_boundary."\r\n";
$message .= "Content-Type: application/msword;\r\n";
$message .= " name=\"bidule.doc\"\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n";
$message .= "Content-Disposition: attachment;\r\n";
$message .= " filename=\"bidule.doc\"\r\n";
$message .= "\r\n";

$myfile = file_get_contents("bidule.doc");
$fileContent = chunk_split( base64_encode($myfile) );

$message .= $fileContent;
$message .= "\r\n";
$message .= "--".$mime_boundary."\r\n";

$ok = mail("destinataire@bidule.fr", "Fichier word", $message, $headers);

if ($ok) echo "Parfait"; else echo "AIEEEEUH";

?>