8791 sujets

Développement web côté serveur, CMS

Bonsoir Smiley smile

Voilà, je me prends la tête sur ma fonction mail() depuis un moment déjà ...
Lorsque j'éxecute la fonction, le mail part, mais n'est pas réceptionné sur toutes les messageries :
- Hotmail : OK
- Gmail : OK
- Laposte : FAIL
- Serveur de l'entreprise : FAIL (le plus important)

Sachant que lorsqu'on inspecte le mail sur hotmail et gmail, il est écrit que le header n'est pas contrôlé, c'est pourquoi il passe.

En revanche, pour les autres, cela ne fonctionne pas. Et le rapport d'erreur du serveur m'indique : " problem 'Disallowed characters found in MIME headers".

Voici le header en question :

    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
    $headers .= 'From: NomEntreprise <adresse@example.net>' . "\r\n";
    $headers .= 'Reply-to: NomEntreprise <adresse@example.net>' . "\r\n" ;
    $headers .= 'Return-path: NomEntreprise <adresse@example.net>' . "\r\n" ;


Si vous avez une idée Smiley ohwell
Merci d'avance ! Smiley biggrin
Modifié par Seyu (14 Feb 2012 - 17:24)
Salut
sincèrement je remarque rien au premier coup, mais je ne sais pas peut être que la question est relié à la casse du header du Mime !. En tout cas voilà les header auxquels je fais recours d'habitude, tu pourras les essayer si ça peut t aider:


 $headers = 'From: '.$name.' <example@mail.com>' . "\r\n";	
	$headers .= "X-Mailer: PHP ".phpversion()."\n";
	$headers .= "X-Priority: 1 \n";
	$headers .= "Mime-Version: 1.0\n";
	$headers .= "Content-Transfer-Encoding: 8bit\n";
	$headers .= "Content-type: text/html; charset= utf-8\n";
	$headers .= "Date:" . date("D, d M Y h:s:i") . " +0200\n";	
Merci de ta réponse.

Malheureusement ça ne fonctionne pas non plus Smiley decu
Après ça vient aussi peut être du message en lui même, par exemple s'il est mal encodé et que la boite mail reçoit des caractères spéciaux, elle va le virer d'office ...

Voici le code de mon mail :

$headers = 'From: NomSociete <adresse@example.net>' . "\r\n";
        $headers .= 'Reply-to: NomSociete <adresse@example.net>' . "\r\n" ;
        $headers .= 'Return-path: NomSociete <adresse@example.net>' . "\r\n" ;
	$headers .= "X-Mailer: PHP ".phpversion()."\n"; 
	$headers .= "X-Priority: 1 \n"; 
	$headers .= "Mime-Version: 1.0\n";
	$headers .= "Content-Transfer-Encoding: 8bit\n"; 
	$headers .= "Content-type: text/html; charset= utf-8\n"; 
	$headers .= "Date:" . date("D, d M Y h:s:i") . " +0200\n";

$message = "Un appel vient d'être reçu pour vous. <br><br>
    
                L'émetteur de cet appel est : <br><b>" .
				$_POST['contact'] . "</b> de la société <b>" . $_POST['societe'] . "</b> du site <b>" . $site_contact['LibelleSite'] . "</b><br><br>" .
				
				"Voici le sujet : <br><b>" . $_POST['sujet'] . "</b><br><br>" .
				
				"Le message laissé par <b>" . $res_user['PrenomUser'] ." ". $res_user['NomUser'] ."</b> : <br><b>" .
				$_POST['message'] . "</b> <br><br>" .
				
				"Action à faire : <br><b>" . 
				$_POST['action'] . "</b><br><br>" .
				
				"Le contact est joignable au : <br><b>" .
				$_POST['tel'] . "<br>" . $_POST['portable'] . "<br>" . $_POST['fax'] . "<br>" . $_POST['mail']."</b>";
				
    $message = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /></head><body>" . $message . "</body>";

    			
    $subject = "Appel de ".$_POST['contact']." / ".utf8_decode($_POST['action'])."";
    
    $to = $res_destinataire['EmailUser'];


Lorsque je reçois le mail sur hotmail (qui ne filtre pas), je le reçois correctement avec les balises html interprétées (les <br> et les <b>).
Cependant, lorsque je regarde la source du message reçu, effectivement les caractères ne sont pas correctement encodés en utf8, et il y a des trucs du type :

a écrit :
L'émetteur de cet appel est : <br><b>Prenom NOM</b> de la société <b>maSociete</b> du site <b>maSociete Marseille</b><br


Auquel cas c'est normal que les autres boites le filtrent et que je ne le reçoive pas.

Mais je ne vois pas où est mon erreur d'encodage ... Pourtant je spécifie bien que c'est du html, et que l'encodage est utf8 ... Smiley bawling
Gmail et Hotmail fonctionnent de manière complètement indépendantes, j'ai testé 8 cas sur les deux et ils ne reçoivent pas de la même manière suivant les cas, alors que laposte ne reçoit jamais ... --'
Ça fonctionne maintenant ...

J'ai retiré les /r/n et remplacé par de simples /n sauf pour la dernière ligne du header.
Je reste à 3,3 d'indice spam mais les email passent, pour rester en interne c'est l'essentiel.

Mon header est au final :


$headers  = 'MIME-Version: 1.0' . "\n";
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n";
     $headers .= 'Reply-to: Seomeone <adresse@example.com>' . "\n" ;
     $headers .= 'Return-path: Seomeone <adresse@example.com>' . "\n" ;
     $headers .= 'From: Seomeone <adresse@example.com>' . "\r\n";

Modifié par Seyu (15 Feb 2012 - 14:00)