Envoit d'e-mail vide avec php

[Résolu/Fermé]
Signaler
-
 stevie21 -
Bonjour,

je veux offrir la possibilité au usagé de mon site de récupérer leur mot de passe via leur e-mail lorsque ceux-ci l'on oublié.

En inscrivant leur pseudo et leur adresse e-mail, je fais une requête dans ma BD et j'obtiens le mot de passe et je l'envoi sur leur courriel.

Je suis en mesure de bien récupérer le mot de passe et d'envoyer le courriel. Cependant, le e-mail est vide. Je suis en mesure d'insérer le mot de passe dans l'objet du courriel, mais je ne suis pas en mesure d'insérer quoi que ce soit dans le contenu du courriel, quoi que je fasse, il est vide.

donc voici mon code:


$email_expediteur='mon.adresse@email.com';
$email_reply='mon.adresse@email.com';

$message_texte='Bonjour,'."\n\n".'Voici votre mot de passe demandé';
$message_html='<html>
<head>
<title>Titre</title>
</head>
<body>Mot de passe oublié</body>
</html>';

//-----------------------------------------------
//GENERE LA FRONTIERE DU MAIL ENTRE TEXTE ET HTML
//-----------------------------------------------

$frontiere = '-----=' . md5(uniqid(mt_rand()));

//-----------------------------------------------
//HEADERS DU MAIL
//-----------------------------------------------

$headers = 'From: "Admin" <'.$email_expediteur.'>'."\n";
$headers .= 'Return-Path: <'.$email_reply.'>'."\n";
$headers .= 'MIME-Version: 1.0'."\n";
$headers .= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"';

//-----------------------------------------------
//MESSAGE TEXTE
//-----------------------------------------------
$message = 'This is a multi-part message in MIME format.'."\n\n";

$message .= '--'.$frontiere.'--'."\n";
$message .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n";
$message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
$message .= $message_texte."\n\n" . $mdp;

//-----------------------------------------------
//MESSAGE HTML
//-----------------------------------------------
$message .= '--'.$frontiere.'--'."\n";
$message .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
$message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
$message .= $message_html."\n\n";

$message .= '--'.$frontiere.'--'."\n" .$mdp;

$sujet = 'Votre mot de passe est : ' . $mdp;

if(mail($email_destinataire, $sujet, $message, $headers))
{
echo 'Le courriel a été envoyé avec votre mot de passe ';
}
else
{
echo 'Le courriel n\'a pu être envoyé, veuillez réessayer plus tard.';
}



je vous remercie de votre réponse

2 réponses

Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
269
bonjour,

tu ferme la boundary au lieu de l'ouvrir avant le message

pour Content-Transfer-Encoding met plutôt quoted-printable et tu ecris le mot de passe après la fermeture du message !

as tu vraiment compris le principe des boundary?

<?php

$email_expediteur='mon.adresse@email.com';
$email_reply='mon.adresse@email.com';

$message_texte='Bonjour,'."\n\n".'Voici votre mot de passe demandé';
$message_html='<html>
<head>
<title>Titre</title>
</head>
<body>Mot de passe oublié  '.$mdp.'</body>
</html>';

//-----------------------------------------------
//GENERE LA FRONTIERE DU MAIL ENTRE TEXTE ET HTML
//-----------------------------------------------

$frontiere = '-----=' . md5(uniqid(mt_rand()));

//-----------------------------------------------
//HEADERS DU MAIL
//-----------------------------------------------

$headers = 'From: "Admin" <'.$email_expediteur.'>'."\n";
$headers .= 'Return-Path: <'.$email_reply.'>'."\n";
$headers .= 'MIME-Version: 1.0'."\n";
$headers .= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"';

//-----------------------------------------------
//MESSAGE TEXTE
//-----------------------------------------------

$message .= '--'.$frontiere.'\n';
$message .= 'Content-Type: text/plain; charset="iso-8859-1"'."\n";
$message .= 'Content-Transfer-Encoding: quoted-printable'."\n\n";
$message .= $message_texte."\n\n" . $mdp;

//-----------------------------------------------
//MESSAGE HTML
//-----------------------------------------------
$message .= '--'.$frontiere.'\n"';
$message .= 'Content-Type: text/html; charset="iso-8859-1"'."\n";
$message .= 'Content-Transfer-Encoding: quoted-printable'."\n\n";
$message .= $message_html."\n\n";

$message .= '--'.$frontiere.'--'."\n";

$sujet = 'Votre mot de passe est : ' . $mdp;

if(mail($email_destinataire, $sujet, $message, $headers)) echo 'Le courriel a été envoyé avec votre mot de passe ';
else echo 'Le courriel n\'a pu être envoyé, veuillez réessayer plus tard.';

?>


voilà ton code il devrait marcher, je ne l'ai pas testé...

pour la boundary pour un mail sans pièce jointe; tu la déclare dans le header

ensuite à la fin du header et avant la déclaration de message tu en ouvre une en mettant -- suivie de la boundary

et tu ouvres pour chaques séparations que tu as a faire

tu ne ferme qu'a la fin pour indiqué la fin de message

--boundary //ouverture
declaration message texte
message texte

--boundary //ouverture
déclaration message html
message html

--boundary-- //fermeture
Excellent, tout fonctionne très bien maintenant.

Merci beaucoup !!!