Aller au contenu

Envoi d'un E-mail en format Html


Elfy

Sujets conseillés

Bonjour à vous,

Alors voici, je découvre le développement Web depuis deux semaines, je suis en stage est une partie du projet est l'envoi d'un E-mail en format Html afin que cela soit plus agréable.

Mon environnement de travail est Ubuntu (que je découvre), PhpMyAdmin.

J'ai essayé plusieurs méthodes mais sans succès :

La première que je préfère est d'utiliser la liste de diffusion nommé Sympa. Alors j'ouvre ma boite mail Yahoo mail afin de copier le code (de la balise Html jusqu'à la balise /Html) dans le contenu, l'option texte riche, mais lors de la réception, cela affiche purement et simplement le code. j'ai essayé également différentes adresses de destinataire : AdresseUn (Yahoo mail), AdresseDeux (Evolution de Ubuntu), AdresseTrois (Sympa) mais cela n'affiche toujours que le code telle qu'il est. J'ai essayé également cette méthode en ouvrant ce coup ci ma boite mail Evolution, toujours à destination des trois meêmes adresses, mais le résultat est toujours le même.

Voici le code pour cette première méthode :

</html>

<head>

Test

</head>

<body>

<table border="2">

<tr>

<td>

Nouvel essais d'un mail en Html

</td>

</tr>

</table>

</body>

</html>

La seconde méthode est la création d'une page Html en local pour envoyer le mail. Jusqu'à la semaine dernière, j'arrivais a envoyer le mail en format texte, mais depuis le début de semaine, cela ne fonctionne plus du tout, je ne réceptionne plus aucun mail dans aucune de mes trois boites mails (ni dans en spam). Je ne comprends pas pourquoi soudainement cela ne fonctionne plus, aurais-je été bloqué en étant considéré comme Spammeur ?

Je vous remercie de m'éclairer.

Voici le code si cela peut vous être utile :

<html>
<body>

<?php
// Déclaration de l'adresse de destination
$mail = 'AdresseDestinataire.fr';

// O,n filtre les serveurs qui bugs
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail))
{
$passage_ligne = "\r\n";
}
else
{
$passage_ligne = "\n";
}

//=====Déclaration des messages au format texte et au format HTML
$message_txt = "Bonjour, voici un E-mail envoyé au format Texte.";
$message_html = "<html><head></head><body><b>Bonjour</b>, voici un E-mail envoyé en format <i>Html</i>.</body></html>";

//=====Création de la boundary
$boundary = "-----=".md5(rand());

//=====Définition du sujet
$sujet = "Sujet de l'E-mail";

//=====Création du header de l'E-mail
$header = "From: \"Nom de l'expediteur\"<MonAdresse.fr>".$passage_ligne;
$header.= "Reply-to: \"Nom du retour\" <MonAdresse.fr>".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;

//=====Création du message
$message = $passage_ligne.$boundary.$passage_ligne;

//=====Ajout du message au format texte
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;

$message.= $passage_ligne."--".$boundary.$passage_ligne;

//=====Ajout du message au format HTML
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;

$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;

//=====Envoi de l'E-mail
mail($mail,$sujet,$message,$header);

?>

</body>
</html>

Modifié par Elfy
Lien vers le commentaire
Partager sur d’autres sites

Pour l'envoi de mail via une liste de diffusion, je ne saurais te dire il faut voir la configuration de Sympa.

Pour la méthode PHP :

Tu voulais surement dire que tu as créer une page php dans un serveur web pour l'envoi de mail n'est-ce pas ? :)

Cela peut être du à un problème de header. Si cela fonctionnais auparavant et que tu n'as rien touché , peut-être que le mot de passe pour ton serveur STMP a changé (s'il y en avait un).

Je remarque aussi ceci


//=====Ajout du message au format texte
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;

Si tu veux que le html soit interprété par le client mail, le header content-type devrait être text/html je pense...

Voici un extrait simple d'un code sur le web

$Destinataire = "nom_AT_domaine.com";
$Sujet = "Sujet de votre mail";

$From = "From:nom_AT_domaine.com\n";
$From .= "MIME-version: 1.0\n";
$From .= "Content-type: text/html; charset= iso-8859-1\n";

$Message = "<b>Texte en Gras</b><u>Texte Souligné</u><i>Texte en Italique</i>";

mail($Destinataire,$Sujet,$Message,$From);

Lien vers le commentaire
Partager sur d’autres sites

Bonjour kent,

Je vous remercie de votre aide, je dois avouer que cela fait depuis le début de semaine que je suis bloqué, et que mon projet de stage ne peut plus avancer.

Oui, en effet, c'est bien cela que j'ai voulu écrire : j'ai créé une page .php mais cette page est en local (je préfère travailler en local dans un premier temps afin de ne pas perturber le site qui est en ligne).

Lien vers le commentaire
Partager sur d’autres sites

(Re)bonjour à vous,

Il n'y aurait vraiment personne afin de m'aider à résoudre ces problèmes que je rencontre s'il vous plait ?

Je suis vraiment bloqué, et j'avoue ne pas comprendre les raisons de ces soucis, j'apprécie toute aide afin de me débloquer de cette situation

Merci à vous

Lien vers le commentaire
Partager sur d’autres sites

Elfy,

La solution que je t'ai proposé ne fonctionne pas ?

Essaye de modifier ta variable $header dans le PHP, au lieu de text/plain mets text/html

Commence par un code simple tel que celui-ci :


$Destinataire = "nom_AT_domaine.com";
$Sujet = "Sujet de votre mail";

$From = "From:nom_AT_domaine.com\n";
$From .= "MIME-version: 1.0\n";
$From .= "Content-type: text/html; charset= iso-8859-1\n";

$Message = "<b>Texte en Gras</b><u>Texte Souligné</u><i>Texte en Italique</i>";

mail($Destinataire,$Sujet,$Message,$From);

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à vous Kent,

J'ai essayé cette solution en modifiant text/html au lieu de text/plain, mais le résultat est toujours le même, ou le non résultat est toujours présent devrais-je écrire.

Je ne sais pas si cela a un rapport, mais mon "Content-type: text/html" est dans ma variable $message, et non dans $header.

Et je précise bien que je travaille en local, j'ai créé ma page php que j'utilise en local pour envoyer un mail auprès de mes deux boites mail (Yahoo mail, Evolution (messagerie de Ubuntu)

Merci encore de votre aide Kent

Modifié par Elfy
Lien vers le commentaire
Partager sur d’autres sites

Bonjour à vous Kent,

J'ai essayé cette solution en modifiant text/html au lieu de text/plain, mais le résultat est toujours le même, ou le non résultat est toujours présent devrais-je écrire.

Je ne sais pas si cela a un rapport, mais mon "Content-type: text/html" est dans ma variable $message, et non dans $header.

Et je précise bien que je travaille en local, j'ai créé ma page php que j'utilise en local pour envoyer un mail auprès de mes deux boites mail (Yahoo mail, Evolution (messagerie de Ubuntu)

Merci encore de votre aide Kent

Mets le text/html dans ton header aussi et dis nous ce que ça donne

Lien vers le commentaire
Partager sur d’autres sites

J'ai alors essayé de placer le text/html dans le header, mais le résultat n'a pas changé

J'ai essayé également votre code simple :

$Destinataire = "MonNom_AT_yahoo.fr";
$Sujet = "Sujet de votre mail";

$From = "From: MonAutreNom_AT_Nom.fr";
$From .= "MIME-version: 1.0\n";
$From .= "Content-type: text/html; charset= iso-8859-1\n";

$Message = "<b>Texte en Gras</b><u>Texte Souligné</u><i>Texte en Italique</i>";

mail($Destinataire,$Sujet,$Message,$From);

if(mail($Destinataire,$Sujet,$Message,$From))
{
echo 'Le message 1 a bien ete envoye';
}
else
{
echo 'Le message 1 ne peut etre envoye';
}

Mais même ce code simple ne fonctionne pas, je suppose que cela ne vient donc pas du code. J'ai bien pour message "Le message a bien ete envoye" Mais aucune réception dans ma boite mail.

Lien vers le commentaire
Partager sur d’autres sites

(Re)bonjour à vous,

Et bien, voici un problème qui ne semble pas attirer de solution^^

Si vous pouvez m'offrir également des liens de documentations, ou de forums afin de trouver des solutions a mon problème n'hesitez pas, car j'avoue que cela est un peu frustrant d'etre bloqué plus d'une semaine sans trouver de solution. Etant en stage, je dois avouer que j'aimerais bien une solution au plus vite afin de pouvoir continuer mon projet et le terminer dans les temps

Merci a vous

Lien vers le commentaire
Partager sur d’autres sites

Si vous pouvez m'offrir également des liens de documentations, ou de forums afin de trouver des solutions a mon problème n'hesitez pas, car j'avoue que cela est un peu frustrant d'etre bloqué plus d'une semaine sans trouver de solution. Etant en stage, je dois avouer que j'aimerais bien une solution au plus vite afin de pouvoir continuer mon projet et le terminer dans les temps

C'est peut être frustrant de ne pas avoir la réponse sur un plateau, mais enfin si personne ne l'a ou n'a de liens à te donner c'est pas de chance mais c'est ainsi.

Si tu es en stage, par définition ton maitre de stage doit être plus compétent que toi, et donc c'est à lui de t'aider en premier lieu ! Les reproches faut les faire en priorité à lui et non ici. ;)

J'ai bien pour message "Le message a bien ete envoye" Mais aucune réception dans ma boite mail.

Au hasard, le problème ne se situerait-il pas au niveau de la configuration de la boite mail ? :wacko: Si on te dit qu'il est bien parti mais pas arrivé c'est peut être que tu n'arrives pas à le recevoir pour une autre cause... Mais qu'il est quelque part sur un serveur donc bien parti.

Au départ tu disais que tu les recevais... Mal soit, mais tu les recevais... Là tu les reçois plus ! ... Donc, le problème c'est certainement déplacé.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à vous Arlette,

Je préfère préciser que le sens n'était absolument pas à prendre négativement, et je suis désolé si vous l'avez senti ainsi, comme des reproches, car cela n'était pas ainsi. Il me semblait seulement solliciter toute aide, information, connaissance que vous sauriez m'offrir, c'est à dire élargir les critères afin que je trouve une solution à mon souci, ce qui montre que je n'attends pas une réponse sur un plateau, mais que je fais des efforts pour trouver une solution de mon coté, notamment en essayant d'abord d'autres solutions, puis en venant solliciter votre aide car je ne vois plus de solution de moi-même.

Concernant le sujet, oui, je pense aussi que le souci est entre l'envoi du mail, et la réception du mail, mais impossible de savoir plus si cela vient de ma boite mail ou avant.

Au début oui, il me semblait bien réceptionner le mail, puis soudainement, sans modification, je n'ai plus réceptionné le mail. Alors le mail semble être envoyé mais j'aimerais bien suivre son chemin afin de connaitre ce qu'il fait au moment il est est envoyé

Edit : Juste pour être certain, pour envoyer un E-mail depuis une page .php en localhost auprès d'une boite mail MonNom_AT_yahoo.fr, il suffit seulement d'un bloc note (pour écrire le code) ? je n'ai besoin de rien de plus que cela (en admettant que le pc soit vierge, qu'il y a seulement bloc note et PhpMyAdmin)

Modifié par Elfy
Lien vers le commentaire
Partager sur d’autres sites

Alors j'ai regardé diverses informations concernant la configuration de mon php.ini mais cela me semble être correcte :

; For Win32 only.
SMTP = localhost
smtp_port = 25

; For Win32 only.
;sendmail_from = MonAdresse_AT_yahoo.fr

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =

Et d'après ce que j'ai saisie, si le mail n'était pas envoyé pour n'importe quelle raison, j'aurais eu un message d'erreur, vous confirmez cela ?

J'ai essayé de chercher des informations afin de savoir comment je peux faire pour voir le chemin du départ de mon mail (MaPage.php) jusqu'à ma boite mail (MonAdresse_AT_yahoo.fr) mais je ne trouve pas d'information concernant cela. Peut être qu'il n'est pas possible de voir cela ?

Lien vers le commentaire
Partager sur d’autres sites

Encore faudrait-il que tu configures ton php.ini pour qu'il génère les erreurs :P

Tout ce que je sais, c'est que mes mails ne partent pas en local (alors que comme toi je n'ai aucun message d'erreur (vu que j'ai décidé de ne pas activer la gestion des erreurs) et que ça me met que le mail a bien été envoyé), alors qu'une fois en ligne, ça marche niquel ^^

Tu n'as pas moyen de mettre ta page sur un serveur le temps d'un test ?

Lien vers le commentaire
Partager sur d’autres sites

Je vous remercie énormément de m'avoir éclairé ainsi Elow, cela me permet de voir différemment le problème, j'essairai oui de faire des essais sur un serveur.

Je vous tiens informé de cela, et merci encore

Lien vers le commentaire
Partager sur d’autres sites

(Re)bonjour à vous,

Cela ne fonctionne toujours pas... . J'ai essayé avec une autre méthode, où j'ai installé Phpmailer, avec le code suivant toujours en local :

<?
require "../www/phpmailer/class.phpmailer.php";
$mail = new PHPmailer();
$mail->IsHTML(true);
$mail->Host='25';
$mail->From='MonAdresse_AT_yahoo.fr';
$mail->AddAddress('MonAdresseDeux_AT_yahoo.fr');
$mail->AddReplyTo('MonAdresse_AT_yahoo.fr');
$mail->Subject='Exemple trouvé sur DVP';
$mail->Body='<html><body><head><style>.entete{background-color:#0000FF;color:#FFFFFF;border:solid 3px;font-size:25px}';
$mail->Body.='.ligne{color:#0000FF;border:solid 1px;text-align:center;font-size:23px}</style></head>';
$mail->Body.='<center><table><tr><td class="entete">Voici un exemple d\'e-mail au format HTML</td></tr>';
$mail->Body.='<tr><td class="ligne">Ceci est un tableau HTML 2</td></tr></table></center></body></html>';

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

?>

Mais j'ai toujours confirmation que Le mail à bien été envoyé, mais toujours rien dans mes boites mail.

Modifié par Elfy
Lien vers le commentaire
Partager sur d’autres sites

pour info, je ne reçois pratiquement plus de Mail (même les spam) depuis le 15, je me demande si Ovh ne fait pas des travaux à ce niveau ou si il y a pas un problème qui traine sur une passerelle

j'ai également fait une test, je m'envoie un mail via une adresse Hotmail par exemple et le mail part bien vers Ovh... mais rien sur la boite de réception. j'ai déjà eu ce soucis il y a quelque temps et tout et revenu dans l'ordre après quelques jours

peut être pour cela que tes essais ne sont pas concluent

par contre, si je m'envoie un mail via un formulaire de mon site cela marche (à ne plus rien y comprendre)

Modifié par TrocWeb
Lien vers le commentaire
Partager sur d’autres sites

Si ton serveur de dev est sous ubuntu, ton php.ini est faux


; For Win32 only.
SMTP = localhost
smtp_port = 25

; For Win32 only.
;sendmail_from = MonAdresse_AT_yahoo.fr

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =

Les paramètres à mettre en commentaire sont ceux de "For win32 only" et de décommenter la ligne sendmail_path, de mettre le chemin d'accès de sendmail et bien évidement d'avoir sendmail d'installé

Lien vers le commentaire
Partager sur d’autres sites

(Re)bonjour à vous,

Je vous remercie pour vos deux réponses.

Concernant php.ini oui, j'avais essayé de retirer les commentaires pour les trois (For Win32, For Win32, For Unix) mais je n'avais pas sendmail.

Je vous remercie, je vais essayé de voir dans cette direction en essayant avec phpmailer (que j'ai installé hier) pour remplacer sendmail (qui n'est pas installé) si cela est possible, (ou peut etre qu'il faut absolument sendmail ?)

Merci encore

Lien vers le commentaire
Partager sur d’autres sites

Personnellement, je te conseillerais (comme il a déjà été dit)

  • de mettre ton fichier sur le serveur, tu auras plus à te soucier des paramètres SMTP (et puis un fichier dont toi seul connaît l'URL...)
  • d'utiliser PHPMailer qui est décidement une bonne classe d'envoi d'email
  • sache enfin que les mails sont plus capricieux au niveau du CSS et de l'HTML (propriétés doivent être dans chaque balise, pas toujours une bonne gestion des divs,...)

Bon courage !

Lien vers le commentaire
Partager sur d’autres sites

Bonjour WhyNot,

Je vous remercie pour vos réponses, j'avoue que j'aurais aimé connaitre les raisons qui font que cela ne fonctionne pas en local, mais je vais faire ainsi, en passant sur le serveur.

Merci à tout le monde pour votre aide

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...