8796 sujets

Développement web côté serveur, CMS

Bonjour et merci d'avance voici un script où je récupère une pièce jointe et des données via un formulaire, je reçois bien l'email avec le petit trombone mais ôh détresse la pièce jointe ne fait que qqs octets et se révèle... vide Smiley decu .

J'ai bien vérifié que la photo est récupérée avec son poids initial, les infos du formulaire sont ok aussi. Pour plus de compréhension j'ai laissé le code tel quel avec les commentaires que j'ai récupéré et les infos personnelles Smiley biggrin

et 1000 merci !!



<?

//----------------------------------
// Construction de l'entête
//----------------------------------
$boundary = "-----=".md5(uniqid(rand()));
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$header .= "\r\n";

//--------------------------------------------------
// Construction du message proprement dit
//--------------------------------------------------
$msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";

//---------------------------------
// 1ère partie du message
// Le texte
//---------------------------------
$msg .= "--$boundary\r\n";

$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$msg .= "Content-Transfer-Encoding:8bit\r\n";
$msg .= "\r\n";

$msg .= 'Prénom : '.htmlspecialchars(stripslashes($_POST['prenom']))."\n";

$msg .= 'Ville : '.htmlspecialchars(stripslashes($_POST['ville']))."\n";
$msg .= 'Fixe : '.htmlspecialchars(stripslashes($_POST['fixe']))."\n";
$msg .= 'Mobile : '.htmlspecialchars(stripslashes($_POST['mobile']))."\n";
$msg .= 'Email : '.htmlspecialchars(stripslashes($_POST['email']))."\n";
$msg .= "\r\n";

//---------------------------------
// 2nde partie du message
// Le fichier
//---------------------------------

$attachment = chunk_split(base64_encode($_FILES['photo']['name']));

// 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: '.$_FILES['photo']['type'].'; name="'.$_FILES['photo']['name'].'"'."\n";

// Et comment il sera codé
$msg .= "Content-Transfer-Encoding: base64\r\n";

// Bonus : si possible afficher le fichier dans le corps du mail
$msg .= "Content-Disposition: inline; filename=".$_FILES['photo']['name']."\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";

$destinataire = "julien.tessier@free.fr";
$expediteur   = "contact@dominique-claire-germain.com";
$reponse      = $expediteur;

if(mail($destinataire, "Trombinoscope : ".$_POST['prenom'], $msg,"Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header))
{
?><script language="javascript">alert("Vos informations ont bien été prises en compte.\nNous les insérerons dès que possible.\nMerci !\n\nAmicalement, Dominique-Claire Germain.");window.location.replace('http://www.dominique-claire-germain.com/trombinoscope.html');</script><?
}
else
{
?><script language="javascript">alert("Désolé mais il y a eu un problème. Contactez-moi au 06 99 00 82 19 ou par email à contact@dominique-claire-germain.com. Merci.");window.location.replace('http://www.dominique-claire-germain.com');</script><?
} 
?>

Hello,

J'ai jamais codé la gestion d'une pièce jointe en revanche je suis surpris par le nombre de frontière... est tu sûr de ton coup là ?

Pour moi il n'y a qu'une frontière entre le texte et la pièce jointe. (à confirmer)

@+

Edit: Alors en effet il faut bien mettre une limite à la fin aussi. J'ai trouvé ce lien qui j'espère pourra t'aider...
http://a-pellegrini.developpez.com/tutoriels/php/mail/
Modifié par AspiGeek (16 Jul 2009 - 01:16)
Bon ok trouvé chui pas un foudre de guerre alors il manquait la récupération de l'upload du fichier avec ces 3 lignes :


$fp = fopen($_FILES['photo']['tmp_name'], "rb");   // b c'est pour les windowsiens
$attachment = fread($fp, filesize($_FILES['photo']['tmp_name']));
fclose($fp);

$attachment = chunk_split(base64_encode($attachment));


à modifier, donc, la ligne qui ne comprend que le chunk_split.

Merci pour votre aide en tout cas et bonnes vacances !

Smiley biggrin