7645 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je tente vainement depuis hier de faire en sorte d'envoyer un mail en html depuis un formulaire de contact.


	$message = '<p>Message de : '.$nom.'('.$from.')</p><br>'.$message.'<br><p>('.$version.')</p>';
	// die(echo($message));

	$headerFields = array(
		"From: {$from}",
		"MIME-Version: 1.0",
		"Content-Type: text/html;charset=utf-8"
		);
        mail( MAIL_TO, $objet, $message, "From: $from\nReply-to: $from\n" ) )


Je pensais que spécifier"Content-Type: text/html;charset=utf-8" suffirait à ce que ça réussisse, mais je continue de recevoir des messages parsemés de <p> et <br> en clair.

Pouvez-vous m'indiquer ce que je fais de travers, svp ?

D'avance, un grand merci pour votre aide Smiley cligne
je reprend cette ligne
mail( MAIL_TO, $objet, $message, "From: $from\nReply-to: $from\n" ) )

c'est quoi MAIL_TO ?
Et il manque un point virgule à la fin de la ligne.

Sinon tu as la fonction strip_tags qui te permet de viré les tag html.
Modifié par JENCAL (11 Apr 2018 - 12:33)
MAIL_TO c'est une constante définie plus haut avec l'adresse mail du destinataire, je n'ai transposé que ce qui pose question par rapport à l'encodage du mail puisque le reste fonctionne.
Le ; est par ailleurs dans mon script, j'ai copié collé un peu trop rapidement Smiley smile

Je ne veux pas virer mes tags/balises, je veux qu'ils soient interprétés comme de l'HTML et non du texte brut.
Càd que le mail parvienne au destinataire, conformément à la première ligne du script, sous cette forme:

Message de John Doe (john@doe.fr)

Bonjour, blablabla contenu du mail.

(Mozilla 4.5/Windows 3.1)


Et non sous celle-là :

<p>Message de : John Doe (john@doe.fr)</p><br>Bonjour, blablabla contenu du mail<br><p>(Mozilla 4.5/Windows 3.1)</p>

Modifié par Reka (11 Apr 2018 - 12:58)
ça c'est mon header :


$headers = "From: " . strip_tags($_POST['req-email']) . "\r\n";
$headers .= "Reply-To: ". strip_tags($_POST['req-email']) . "\r\n";
$headers .= "CC: mon adresse mail\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";


et dans mon content je met ce que je veux en tag html.
Modifié par JENCAL (11 Apr 2018 - 13:40)
Merci Jencal.

Je vais essayer avec ton header, mais j'en déduis que le mien devrait fonctionner, puisque ton content-type indique text/html tout comme moi Smiley decu (or, comme je le disais précédemment, tout fonctionne par ailleurs, c'est uniquement le corps du message qui trébuche)

je ne spécifie nulle part dans mon code que je veux htmlspecialchars mon $message, du coup je ne comprends pas du tout pourquoi il me le propose en brut...

(J'ai tenté de voir si l'interprétation n'était pas propre au serveur de messagerie choisi mais ça me le fait chez deux prestataires de services différents)

Je vais essayer de trouver un autre code que le mien qui fait le boulot complétement, pour voir si je ne commets pas d'erreur ailleurs.
C'est quand même extrêmement déroutant Smiley sweatdrop
Modifié par Reka (11 Apr 2018 - 14:02)
Tu as regardé le code-source du mail que tu reçois pour voir s'il correspond à ce que tu as envoyé ?
Vérifie que ton logiciel de mail comprend le html.
Après, essaye plusieurs navigateurs / boites mails différentes.... des fois, avec gmails ça fonctionne, avec hotmail non... va savoir pourquoi ....
Modifié par JENCAL (11 Apr 2018 - 14:25)
genre


mail( MAIL_TO, $objet, $message,implode("\r\n", $headerFields)) )
Meilleure solution
Ok, en effet Kustolovic !!
J'avais deux lignes mail(), dont une que j'avais commentée au profit d'une autre qui ne faisait pas appel aux headers...
Toutes mes excuses, je ne suis pas du matin Smiley biggrin

Merci beaucoup !
Modifié par Reka (11 Apr 2018 - 14:43)
kustolovic a écrit :
Dans ton premier message tu définis un «$headerFields» que tu n'utilise pas ???

Pourquoi?



rolala, bien vu l'aveugle Smiley smile
Bon, par contre, j'ai adapté le code, et il me met en l'air mes accents en dépit de mon charset UTF-8...

Message de : Désiré Trémolo


$headers = "From: " . $from . "\r\n";
$headers .= "Reply-To: ". $from . "\r\n";
$headers .= "CC:".$from."\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";

if( mail( MAIL_TO, $objet, $message, $headers)) { 
     // alert ok  
} else {
     // alert error 
}

Smiley confus

Ca ne fonctionne pas avec iso-8859-1 non plus (supposé être mieux interprété que UTF-8 par les messageries, qu'ils disent [...])
Qu'est ce que j'oublie de nouveau ? Smiley confused
Modifié par Reka (11 Apr 2018 - 19:22)
T'as vérifié que tes fichiers php sont bien écrits en UTF-8 ?
Si tu bosses avec Window$, il y a de fortes chances que non.
Modifié par bazooka07 (11 Apr 2018 - 21:51)
J'ai revu tout le code, ça fonctionne (mais du coup, comme j'ai fait le tank sur mon code, je ne sais pas quelle correction a corrigé le bug).
Merci à tous.