Fonction mail en html avec headers arrive dans spam gmail

Eléphant du PHP | 82 Messages

04 mai 2012, 11:52

Bonjour,

Depuis mon site qui est hébergé sous OVH (http://www.collaide.com) j'envoie des mails de notifications et de bienvenues..

Cependant, j'ai réalisé que mes mails arrivent dans les spam de gmail.
J'ai donc fait énormément de test hier soir pour comparer différent style de mail envoyé depuis mon site pour voir si j'étais dans une blacklist ou si j'arrivais tout de même à envoyer quelque mail qui n’irait pas dans les spam.

J'ai une fonction envoyer mail que je vous montre ici :
function htmlToText($text,$passage_ligne) // pour Passer les mail en html en text
{	
	// remplacé toutes le balises par... RIEN
	$bbcode = array('<strong>', '</strong>','</p>','</h3>');
	$text = str_replace ($bbcode, "", $text);
	

	// Les liens
	$text = preg_replace('!\<a href="(.+)">(.+)</a>!isU', '$2 (lien: $1)', $text);
	$text = preg_replace('!\<a href=\'(.+)\'>(.+)</a>!isU', '$2 (lien: $1)', $text);
	// Changer les <br />, <p>, <h3> en passage ligne
	$br = array("<br/>", "<br />", "<br  />","<br / >","<br/ >",'<h3>','<p>');
	$text = str_replace($br, $passage_ligne, $text);


	return($text);

}

function sendMail($mail, $sujet, $titre_html, $contenu_html) {
	
	global $ip_serv;
	
	if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui rencontrent des bogues.
	{
		$passage_ligne = "\r\n";
	}
	else
	{
		$passage_ligne = "\n";
	}
	
	$contenu_txt=htmlToText($contenu_html,$passage_ligne);
	
	//=====Déclaration des messages au format texte et au format HTML.
	$message_txt = 
	$titre_html.
	$passage_ligne.
	$passage_ligne.
	$contenu_txt.
	$passage_ligne.
	$passage_ligne.
	'A très vite, sur Collaide !';
	
	
	$message_html = '
	<div style="background-color:#eaf3ff;text-align:center;">
	<h2 style="text-align:center; color: #0033CC;">'.$titre_html.'</h2>
	<p>'.$contenu_html.'<br/>
	<br/>
	A très vite, sur <a href="'.$ip_serv.'">Collaide</a> !<br />
	<img alt="Logo Collaide" src="'.$ip_serv.'/images/logo.png" /></p></div>';
	
	//==========
	 
	//=====Création de la boundary
	$boundary = "-----=".md5(rand());
	//==========
	 
	//=====Création du header de l'e-mail.
	//$entetedate  = date("D, j M Y H:i:s -0600"); // Offset horaire
	$header = "From: \"Contact de Collaide\" <[email protected]>".$passage_ligne;
	$header.= "Reply-to: \"Contact de Collaide\" <[email protected]>".$passage_ligne;
	$header.= "MIME-Version: 1.0".$passage_ligne;
	//$header.= "Date: ".$entetedate .$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=\"utf-8\"".$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=\"utf-8\"".$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);
	//==========
	
	//echo 'Message_html :'.$message_html.'<br />
	//Message_txt :'.$message_txt;
	
}
Avec cette fonction mail, les mail envoyé vons très souvent dans les spam, sauf à quelque exception près et lorsque je n'envoie aucun lien dans le mail.
J'ai essayé ensuite d'envoyer des mails bourrés de lien mais de la façon la plus simple possible : mail ($destinatair, $sujet, $message);

Avec la dernière technique, le mail arrive bien sur ma boite mail gmail au format texte et pas dans les spam. Cependant, l'adresse d'envoi et de réponse est une adresse ovh ( [email protected] ) (j'ai modifier les adresses pour éviter tout spam). De plus, le message au format texte est tout de même moins beau qu'un message au format html bien présenté.

Tout cela me prouve donc que je ne suis pas dans un blacklist mais juste que mon mail est considérer comme un spam par un filtre, et je ne sais pas pourquoi.

Que pourrais-je essayer afin d'éviter d'être dans les spam ? Que dois-je ajouter ou enlever dans ma fonction envoyer mail ? Peux-être y a-t-il une erreur dans ma fonction htmltotext qui permet de modifier de code html en format texte ?

Merci d'avance.

Cordialement,
Texicitys

ViPHP
ViPHP | 2577 Messages

04 mai 2012, 13:42

Ce sont des règles qui calculent un score de spam et suivant le score, le mail va dans la boite de réception ou dans les spam. Les spammeurs modifient leurs mails pour contrer ca et gmail s'adapte en conséquence en permanence.

Un des critères est le fait que le reverse IP soit du même domaine que l'adresse mail, ce qui n'est pas le cas pour les hébergements mutualisés. Autrement, les spams/publicités sont souvent en html.

Donc je pense qu'il est difficile d'échapper à la détection des spams.

Petit nouveau ! | 9 Messages

04 mai 2012, 14:25

Salut,

si je peux me permettre, il n'y a aucun header de déclaré et cela reviendrait au même que d'écrire une lettre à la main mais sans la mettre dans une enveloppe.

il existe une class php qui te simplifie énormément l'envoi d'un email et qui te paramètre le tout correctement. Joomla et consort l'utilise notamment:
http://phpmailer.worxware.com/

a+

Eléphant du PHP | 82 Messages

04 mai 2012, 17:55

Merci pour vos réponses.. Donc si je comprends bien, la meilleur solution pour éviter le spam est d'écrire en texte et non en html
Salut,

si je peux me permettre, il n'y a aucun header de déclaré et cela reviendrait au même que d'écrire une lettre à la main mais sans la mettre dans une enveloppe.

il existe une class php qui te simplifie énormément l'envoi d'un email et qui te paramètre le tout correctement. Joomla et consort l'utilise notamment:
http://phpmailer.worxware.com/

a+
As-tu bien lu mon poste ? Je déclare tous les headers qu'il faut non ?
Mais oui, merci pour phpmailer, je connais. Je pense que je vais me plongé dessus, si je ne trouve pas de solution :)

Eléphant du PHP | 82 Messages

05 mai 2012, 01:25

Un des critères est le fait que le reverse IP soit du même domaine que l'adresse mail, ce qui n'est pas le cas pour les hébergements mutualisés. Autrement, les spams/publicités sont souvent en html.
Merci pour ces précisions, je n'ai cependant pas très bien compris ce que tu voulais dire par là. Qu'est ce que le reverse IP. Donc c est positif ou négatif si ce n'est pas le cas pour les hébergements mutualisés ?

Merci !

Eléphant du PHP | 82 Messages

06 mai 2012, 02:45

Personne n'a de solution ?

Merci

Eléphant du PHP | 82 Messages

06 mai 2012, 22:39

J'ai envoyer le mail avec PHPMailer et le mail arrive toujours dans les spams... Rien à faire..

Personne n'a de solution ?

Le mieux serait donc que j'envoie les mail en texte tant que je suis en mutualisé ?

Merci

Polo0000
Invité n'ayant pas de compte PHPfrance

05 juil. 2012, 21:48

Bonjour,
J'ai remarqué à peut prêt la même chose mise à part que moi, texte ou html des qu'il y a un lien c'est direct dans les spam, mais après en texte ou html sans lien ça passe. Et moi c'est encore différent car mon serveur est chez moi. Donc normalement il devrait pas y avoir de problèmes... Et pourtant.
Si quelqu'un a trouvé une solution je suis preneur.

Polo0000
Invité n'ayant pas de compte PHPfrance

05 juil. 2012, 21:51

Ah oui et j'oubliais, si je met un lien en https:// et bien ça passe, le problème c'est que mon serveur accepte pas les connexions sécurisées.