Aller au contenu

mail() : cacher le message d'erreur


Jan

Sujets conseillés

Bonjour,

J'utilise la fonction mail() PHP pour permettre à mes visiteurs de m'envoyer un message depuis mon site:

if (mail("moi_AT_mondomaine.com",$_POST["titre"],$_POST["message"],$entete)){ // mail envoyé
  echo "Message envoyé.";
}
else { // erreur lors de l'envoi du mail
  echo "Une erreur s'est produite.";
}

Tout marche bien à un petit détail prêt: quand une erreur se produit sur le serveur au moment de l'envoi du mail (condition else), le message d'erreur venant du serveur s'affiche avant mon message d'erreur perso "Une erreur s'est produite."

Est-il possible de ne pas afficher ce message d'erreur venant du serveur?

Merci.

Lien vers le commentaire
Partager sur d’autres sites

Normalement en php, si tu mets "@" devant les fonctions il ne renvoie pas les erreurs, mais comme je n'utilise jamais ce subterfuge, je ne l'ai jamais essayé, donc je ne suis pas sûr à 100% mais essaye en mettant "@mail(..." ! @+

Lien vers le commentaire
Partager sur d’autres sites

Le @ marche très bien en production, pour quantité de fonctions. Elle empèche l'affichage des erreurs, et permet effectivement de personnaliser les erreurs.

Mais tu peux aussi t'en servir pour les fonctions d'accès à la base de données, notamment. (@mysql_query, _AT_mysql_fetch_array, ...)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

A ce propos, existe-t-il une possibilité de récupérer les erreurs serveurs lors d'un envoi mail (les warning: ...), afin de les traiter ?

xpatval

Lien vers le commentaire
Partager sur d’autres sites

Oui, dans la même optique que la fonction ci-dessus (@mail), tu peux imaginer un système comme ceci :

if (! _AT_mail($to,$sujet,$body))

stock_erreur_mail();

L'arobase permet de ne pas afficher l'erreur, mais cela n'empeche pas la fonction de retourner FALSE ;)

Donc tu la met dans un 'if', et tu lances une fonction si le mail ne part pas.

Lien vers le commentaire
Partager sur d’autres sites

Anonymus,

Je n'ai pas compris: mail() renvoie bien FALSE, mais dans quelle variable ou par quelle fonction peut-on récupérer le contenu de l'erreur renvoyée par le serveur?

Lien vers le commentaire
Partager sur d’autres sites

par quelle fonction peut-on récupérer le contenu de l'erreur renvoyée par le serveur?

Il y a deux cas possibles pour moi :

1 - Tu as une erreur de syntaxe dans ton code et dans ce cas là le serveur qui execute php mentionne l'erreur (genre tu as oublié un paramètre de la fonction)

2 - Ton code est correct mais, par exemple, le destinataire n'existe pas, et dans ce cas là un message d'erreur est envoyé à l'adresse mail que tu as mentionné dans l'entete du message (From: <toto_AT_ndd.com> ou Return-path)

Ceci dit peut-être existe-t-il des moyen de récupérer tout ca...

Lien vers le commentaire
Partager sur d’autres sites

Jan :

$php_errormsg est la variable qui contient la dernière erreur php.

Pour y avoir accès, il faut que la 'directive de configuration ' track_errors soit activé. Or cette directive est 'normalement' désactivée par défaut.

Donc :

1/ on active cette directive, (via ini_set)

2/ on désactive le message d'erreur de la fonction (avec préfixe @ )

3/ on récupère le message d'erreur (via la variable $php_errormsg)

Ca donne :

ini_set("track_errors",1);
if (! _AT_mail(' Le Hub, il est  top !! '))
echo "<br><b>Erreurs générées :</b><br>-->".$php_errormsg."<br><b>Fin des erreurs</b><p> ";

Ce qui donne :

Erreurs générées :

-->mail() expects at least 3 parameters, 1 given

Fin des erreurs

Voilà. L'idéal étant de placer tout ceci dans un journal d'erreurs, évidement.

Anonymus.

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...