Problème d'envoi de mails

sunwares
Invité n'ayant pas de compte PHPfrance

05 mai 2015, 11:09

Bonjour,
J'utilise les script d'annonce script pag, le template a été modifié depuis.
je fait face à des problèmes d'envoi de mails.
Ils partent bien mais n'arrive pas car une erreur se passe au niveau du traitement du corps du message.

Voici le code par exemple pour envoyer le mail de confirmation d'annonce:
function send_confirm($id, $array)
{
global $cache_mails_auto;

$email = stripslashes($array['ema']);
$titre = stripslashes($array['tit']);

$nom_mail = '';
$email_mail = '';

foreach($cache_mails_auto as $v)
{
if($v['type'] == 1)
{
$nom_mail = stripslashes($v['nom']);
$email_mail = stripslashes($v['email']);
$titre_mail = stripslashes($v['titre']);
$message_mail = stripslashes($v['message']);
}
}

$url = URL .'/confirmer_ann.php?code='. $id .'&email='. $email;

$titre_mail = str_replace('<titre>', $titre, $titre_mail);
$message_mail = str_replace('<titre>', $titre, $message_mail);
$message_mail = str_replace('<url>', $url, $message_mail);

//Entête du mail

$header = "From: ". $nom_mail ." <". $email_mail.">\n";
$header .= "Reply-To: ". $email_mail ."\n";
$header .= "Content-Type: text/html; charset=\"utf-8\"\n";

$header .= "Content-Transfer-Encoding: binary";

mail($email, $titre_mail, $message_mail, $header);
return true;
}

Après avoir fait pas mal de tests, j'ai isolé les lignes qui posent problème dans mon cas:
$message_mail = str_replace('<titre>', $titre, $message_mail);
$message_mail = str_replace('<url>', $url, $message_mail);
Si je modifie le $message_mail en mettant du simple texte, le mail est bien reçu. En revanche si je laisse comme tel,cela semble bloquer dans l'interprétation du code.

Autres exemple, le code pour envoyer une annonce à un ami:
$message_mail = $language['page_ann_mail_msg'] .'<a href="'. $url .'">'. $language['page_ann_mail_lien'] .'</a><br><br>'.$language['page_ann_mail_nom'] .' : '. $name .'<br /><br />'. $language['page_ann_mail_signature'];
Là si modifie comme ci dessous, le mail est reçu avec la phrase de la variable language.
$message_mail = $language['page_ann_mail_msg']
Mais Si je mets juste un peu de code html, comme ci dessous, ça passe plus sad
$message_mail = $language['page_ann_mail_msg'] .'<a href="'. $url .'">'. $language['page_ann_mail_lien'] .'</a><br><br>';
Une piste ? je désespère :cry:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 mai 2015, 11:15

Bonjour,

Quel est le message d'erreur ?

Si il n'y a pas de message d'erreur qui s'affiche, regarde dans les logs de ton serveur ou active les avec la ligne suivante au début de ton code :
error_reporting(E_ALL);
Quand tout le reste a échoué, lisez le mode d'emploi...

sunwares
Invité n'ayant pas de compte PHPfrance

05 mai 2015, 11:28

Merci,
je viens de placer la ligne en début de code.
Je suis hébergé chez OVH, rien de flagrant dans les logs hélas.

sunwares
Invité n'ayant pas de compte PHPfrance

05 mai 2015, 13:29

Donc en fait pas d'erreurs dans les logs.

Seuls ces lignes posent problème:

Code : Tout sélectionner

$message_mail = $language['page_ann_mail_msg'] .'<a href="'. $url .'">'. $language['page_ann_mail_lien'] .'</a><br><br>'. $language['page_ann_mail_nom'] .' : '. $name .'<br /><br />'. $language['page_ann_mail_signature'];
Dès qu'il y a du code html ça ne passe plus...
Le mail part... mais n'arrive pas, certainement bloqué car contenu non conforme.
Heeeelp :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 mai 2015, 14:45

A première vue, je dirai qu'il manque la déclaration du MIME et que la ligne suivante n'est pas forcément utile :
$header .= "Content-Transfer-Encoding: binary";
Pour pouvoir débuguer efficacement, crée une nouvelle page PHP avec le code de la documentation pour envoyer un fichier HTML : http://php.net/manual/fr/function.mail.php#example-3802
Et regarde déjà si il fonctionne sur ton serveur avec tes adresses de destination, comme ça au moins tu auras un exemple de code qui fonctionne dont tu pourras t'inspirer.
Si ça ne fonctionne pas non plus avec l'exemple de la doc, c'est probablement un problème de serveur et donc tu pourras t'adresser à ton hébergeur.
Quand tout le reste a échoué, lisez le mode d'emploi...

sunwares
Invité n'ayant pas de compte PHPfrance

05 mai 2015, 17:46

Merci pour le code, je l'ai mis en place, lancé et cela fonctionne.
J'ai remplacé les 2 headers (mime et encoding type).
Mais rien, toujours la même chose.
Par contre je tiens à le préciser le mail part bien.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 mai 2015, 00:06

Si le mail part et que le problème est uniquement lié à l'affichage, c'est effectivement dans son contenu ou dans ses entêtes qu'il faut chercher le problème...
As-tu essayé d'afficher le code html généré à l'écran ou dans un fichier pour pouvoir contrôler que celui-ci est correct ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

sunwares
Invité n'ayant pas de compte PHPfrance

06 mai 2015, 09:54

Bonjour Ryle,
comment fais t'on?
je ne suis pas un pro du php :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 mai 2015, 09:31

La version simple serait juste de faire un echo "----" . $message_mail . "----"; dans ta fonction pour faire apparaître le corps du message généré à l'écran. Il faudrait ensuite aller regarder le source de la page pour voir le html qui a été généré (et que tu retrouveras entre les "----"). Y aura peut être un truc plus ou moins flagrant comme une balise mal fermée, une guillemet oubliée, ...

As-tu essayé d'envoyé le mail sur différentes boites pour vérifier si ce n'est pas un problème du webmail/client de messagerie que tu utilises ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...