Aller au contenu

mail() : cacher le message d'erreur


Sujets conseillés

Posté

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.

Posté

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(..." ! @+

Posté

Ca marche. Merci ;)

Posté

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

Posté

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

Posté

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.

Posté

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?

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

Posté

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.

Posté

C'est clair, merci ;)

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...