Envoyer un email au format txt et html

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Inscription: 20 Sep 2007

Envoyer un email au format txt et html

Message le Dim Nov 07, 2010 15:34

Salut,

J'ai ce sript php ci-dessous qui envoie un email au format text et html mais lorsque je reçois l'email au format html les liens ne sont pas surlignés (cliquables) dans l'email, c'est comme si les balises html <a href...> n'étaient pas prises en compte, voyez-vous une erreur dans mon code ?

$boundary = "-----=" . md5( uniqid ( rand() ) );

$destinataire = "email@destinataire.com";
$email_expediteur = "contact@mon-site.com";
$email_reply = "contact@mon-site.com";
$mon_site = "http://www.mon-site.com";

$headers = "From: \"Mon site\"<$email_webmaster>\n";
$headers .= "Reply-To: ".$email_reply."\n";
$headers .= "Return-Path: ".$email_webmaster."\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/alternative; boundary=\"$boundary\"";

$sujet='Essai email';

$message_texte='Bonjour,'."\n\n".'Voici un message au format texte un e-mail $email_expediteur est envoyé par un script PHP et mon site est $mon_site';

$message_html="<html><body>'Voici un message au format html un e-mail <a href=\"mailto:$email_expediteur\">$email_expediteur</a> est envoyé par un <i>script PHP</i> et mon site est <a href=\"$mon_site\">$mon_site</a>.</body></html>";

$message_email = "This is a multi-part message in MIME format.\n\n";
$message_email .= "--" . $boundary . "\n";
$message_email .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$message_email .= "Content-Transfer-Encoding: quoted-printable\n\n";
$message_email .= $message_texte;
$message_email .= "\n\n";
$message_email .= "--" . $boundary . "\n";
$message_email .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$message_email .= "Content-Transfer-Encoding: quoted-printable\n\n";
$message_email .= $message_html;
$message_email .= "\n\n";
$message_email .= "--" . $boundary . "--\n";

if(mail($destinataire,$sujet,$message_email,$headers))
{
echo 'Le mail a été envoyé';
}
else
{
echo 'Le mail n\'a pu être envoyé';
}


Merci pour votre aide.


spout
WRInaute accro
WRInaute accro
 
Messages: 4378
Inscription: 14 Mai 2003

Re: Envoyer un email au format txt et html

Message le Dim Nov 07, 2010 15:37

spout a écrit:Une solution: la plus simple, essayer d'envoyer le mail avec PHPMailer ou SwiftMailer

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Inscription: 20 Sep 2007

Re: Envoyer un email au format txt et html

Message le Dim Nov 07, 2010 16:16

spout a écrit:
spout a écrit:Une solution: la plus simple, essayer d'envoyer le mail avec PHPMailer ou SwiftMailer

Peut-on envoyer un email au format html et text (multipart/alternative) assez simplement avec PhpMailer afin que le destinataire puisse le lire en fonction du paramétrage de son logiciel d'email (affichage en text/plain ou en text/html des messages qu'il reçoit) ?


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Re: Envoyer un email au format txt et html

Message le Dim Nov 07, 2010 16:19

Oui, il y a tout ce qu'il faut dans la classe pour faire ça : http://www.askapache.com/php/phpfreaks-eric-rosebrocks-phpmailer-tutorial.html (paragraphe Alternate Text Bodies For HTML Mail)

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Inscription: 20 Sep 2007

Re: Envoyer un email au format txt et html

Message le Dim Nov 07, 2010 16:33

Ca m'a l'air d'être top ce PhpMailer mais faut-il encore bien le paramétrer au départ, c'est pas trop technique ? J'ai pas de grandes connaissances dans tout ce qui touche aux techniques d'envoi d'emails ?


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Re: Envoyer un email au format txt et html

Message le Dim Nov 07, 2010 16:44

Y'a des tutos FR très bien fait, et non il n'y a qu'à inclure la classe, les paramétrages sont vraiment minimaux : http://stephaneey.developpez.com/tutoriel/php/phpmailer/

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Inscription: 20 Sep 2007

Re: Envoyer un email au format txt et html

Message le Lun Nov 08, 2010 10:50

C'est quand même dingue parce qu'on ne trouve jamais un code entier phpmailer pour envoyer un email au format html et text (multipart/alternative) il faut faire 36 forums pour bidouiller le code... alors qu'envoyer en email sous cette forme devrait (doit) être la règle ! C'est à croire que personne n'utilise le multipart/alternative :(

J'essaie ce code ci-dessous mais ça marche pas :

$mail = new PHPmailer();

$mail->$htmlBody='<html><body><head><style>.entete{background-color:#0000FF;color:#FFFFFF;border:solid 3px;font-size:25px}';
$mail->$htmlBody.='.ligne{color:#0000FF;border:solid 1px;text-align:center;font-size:23px}</style></head>';
$mail->$htmlBody.='<center><table><tr><td class="entete">Voici un exemple d\'e-mail au format HTML. <a href=\'mailto:mon@email.com\'>mon@email.com</a> envoyé par un <i>script PHP</i> <a href=\'http://www.mon-site.com\'>www.mon-site.com</a>.</td></tr>';
$mail->$htmlBody.='<tr><td class="ligne">Ceci est un tableau HTML</td></tr></table></center></body></html>';

$mail->$textBody='Voici un exemple d\'e-mail au format text. mon@email.com envoyé par un script PHP http://www.mon-site.com.';
$mail->$textBody.='Ceci est un essai.';

$mail->Body($htmlBody);
$mail->isHTML(true);
$mail->AltBody($textBody);

$mail->AddAddress('mon@email.com');
$mail->AddReplyTo($email_webmaster);
$mail->Subject='Essai email';

if(!$mail->Send()){ //Teste si le return code est ok.
echo $mail->ErrorInfo; //Affiche le message d'erreur (ATTENTION:voir section 7)
}
else{
echo 'L\'email a été envoyé avec succès';
}
unset($mail);



UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Re: Envoyer un email au format txt et html

Message le Lun Nov 08, 2010 11:04

Et tu as quoi comme message d'erreur ? Pour info, avoir du CSS dans un mail, ce n'est pas conseillé car très mal supporté en fonction des clients de messagerie et webmail.

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Inscription: 20 Sep 2007

Re: Envoyer un email au format txt et html

Message le Lun Nov 08, 2010 11:15

J'ai ce message d'erreur :
Code: Tout sélectionner
Fatal error: Cannot access empty property in


J'ai viré le css dans mon email mais j'ai toujours cette erreur :(


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Re: Envoyer un email au format txt et html

Message le Lun Nov 08, 2010 11:39

Tu t'es mélangé les pinceaux entre les méthodes et les variables de la classe.

Entre autre :

Code: Tout sélectionner
$mail->Body($htmlBody);
$mail->isHTML(true);
$mail->AltBody($textBody);


qui devrait être :

Code: Tout sélectionner
$mail->Body = $htmlBody;
$mail->isHTML(true);
$mail->AltBody = $textBody;


Mais j'imagine que tu as un numéro de ligne concernant ton erreur ?

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Inscription: 20 Sep 2007

Re: Envoyer un email au format txt et html

Message le Lun Nov 08, 2010 13:14

Lorsque j'essaie ce code ci-dessous j'ai une erreur Fatal error: Cannot access empty property in sur la ligne 20, la ligne qui correspond à $mail->$htmlBody.='<html><body><center>....

Code: Tout sélectionner
$mail = new PHPmailer();

$mail->AddAddress('mon@email.com');
$mail->AddReplyTo($email_webmaster);
$mail->Subject='Essai email';

$mail->$htmlBody.='<html><body><center><table><tr><td class="entete">Voici un exemple d\'e-mail au format HTML. <a href=\'mailto:mon@email.com\'>mon@email.com</a> envoyé par un <i>script PHP</i> <a href=\'http://www.mon-site.com\'>www.mon-site.com</a>.</td></tr>';
$mail->$htmlBody.='<tr><td class="ligne">Ceci est un tableau HTML</td></tr></table></center></body></html>';

$mail->$textBody='Voici un exemple d\'e-mail au format text. mon@email.com envoyé par un script PHP http://www.mon-site.com.';
$mail->$textBody.='Ceci est un essai.';

$mail->Body = $htmlBody;
$mail->isHTML(true);
$mail->AltBody = $textBody;

if(!$mail->Send()){ //Teste si le return code est ok.
echo $mail->ErrorInfo; //Affiche le message d'erreur (ATTENTION:voir section 7)
}
else{
echo 'L\'email a été envoyé avec succès';
}
unset($mail);



UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Re: Envoyer un email au format txt et html

Message le Lun Nov 08, 2010 13:17

Ca existe pas $mail->$htmlBody.
Code: Tout sélectionner
$mail->Body($htmlBody);
par contre, oui.


spout
WRInaute accro
WRInaute accro
 
Messages: 4378
Inscription: 14 Mai 2003

Re: Envoyer un email au format txt et html

Message le Lun Nov 08, 2010 13:23


toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Inscription: 20 Sep 2007

Re: Envoyer un email au format txt et html

Message le Lun Nov 08, 2010 14:13

UsagiYojimbo a écrit:Ca existe pas $mail->$htmlBody.
Code: Tout sélectionner
$mail->Body($htmlBody);
par contre, oui.


C'était presque ça UsagiYojimbo :D

En fait, il fallait juste enlever le $mail->$htmlBody et le $mail->$textBody ce qui donne le code mise à jour :

Code: Tout sélectionner
$mail = new PHPmailer();

$mail->AddAddress('mon@email.com');
$mail->AddReplyTo($email_webmaster);
$mail->Subject='Essai email';

$htmlBody='<html><body><center><table><tr><td class="entete">Voici un exemple d\'e-mail au format HTML. <a href=\'mailto:mon@email.com\'>mon@email.com</a> envoyé par un <i>script PHP</i> <a href=\'http://www.mon-site.com\'>www.mon-site.com</a>.</td></tr>';
$htmlBody.='<tr><td class="ligne">Ceci est un tableau HTML</td></tr></table></center></body></html>';

$textBody='Voici un exemple d\'e-mail au format text. mon@email.com envoyé par un script PHP http://www.mon-site.com.';
$textBody.='Ceci est un essai.';

$mail->Body = $htmlBody;
$mail->isHTML(true);
$mail->AltBody = $textBody;

if(!$mail->Send()){ //Teste si le return code est ok.
echo $mail->ErrorInfo; //Affiche le message d'erreur (ATTENTION:voir section 7)
}
else{
echo 'L\'email a été envoyé avec succès';
}
unset($mail);


Et là ça marche parfaitement !

Une question : quels sont les avantages-inconvénients d'utiliser le smpt ou pas pour envoyer les emails ?

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Inscription: 20 Sep 2007

Re: Envoyer un email au format txt et html

Message le Lun Nov 08, 2010 17:10

Je suis entrain de voir comment il faut faire pour paramétrer correctement la langue des éventuels messages d'erreurs lors de l'envoi d'un email mais je trouve pas grand chose comme aide :?

Dans le code php ci-dessous on trouve ErrorInfo qui renvoi normalement le texte des éventuelles erreurs d'envoie, c'est en langue anglaise par défaut mais on a une version française qui est dans un répertoire language/ comment indiquer à phpmailer d'utiliser le fichier français des erreurs (qui est dans language/phpmailer.lang-fr.php) ?

Code: Tout sélectionner
if(!$mail->Send()){
echo $mail->ErrorInfo;
}
else{
echo 'L\'email a été envoyé avec succès';
}

Envoyer un email au format txt et html

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité