fonction mail() : Recipient address rejected

fonction mail() : Recipient address rejected - PHP - Programmation

Marsh Posté le 31-03-2006 à 11:59:01    

Salut,
 
Voilà, comment éviter lors de l'envoie d'un formulaire par mail, si l'adresse email est fausse voir apparaitre un "Warning: mail(): SMTP server response: 550 <jjjj.gg@r.tt>: Recipient address rejected: Domain not found in "  en plein milieu de la page  :o  
 :bounce:  
si je mets un or die() ca n'évite pas le pb

Reply

Marsh Posté le 31-03-2006 à 11:59:01   

Reply

Marsh Posté le 31-03-2006 à 15:22:53    

voir la fonction: error_reporting()

Reply

Marsh Posté le 31-03-2006 à 15:24:05    

le problème est quil trouve pas le serveur r.tt
``.tt`` ça doit pas être un nom domaine

Reply

Marsh Posté le 31-03-2006 à 18:06:22    

r.tt est un exemple, c'est pour dire si on met n'importe quoi, le domaine n'est pas reconnue et la fonction mail se plante.
Pour éviter qu'il y ait un msg d'erreur en plein milieur de la page, je peux effectivement utiliser la fonction error_reporting(0).
Mais ou je mets un die et à ce moment là la suite du code s'arrete :/ , ou alors je mets autre chose mais il faudrait trouver un moyen pour l'indiquer à la suite..

Reply

Marsh Posté le 31-03-2006 à 18:15:50    

évite le die()
1°) tu met error_reporting à 0, et sauvegarde l ancien:

  • $errrep=error_reporting(0);

2°) tu envoie le mail et garde le message d erreur:

  • $errmail=mail($to, $sujet, $message);

3°) tu rétabli le rapport d erreur:

  • error_reporting($errrep);

4°) tu traite le cas d erreur

  • if ($errmail) echo "Le mél n'a pu être envoyé, vérifiez le destinaire.";


Reply

Marsh Posté le 31-03-2006 à 18:18:49    

Tu peut faire des choses plus évoluées en utilisant:
set_error_handler()
comme traduire le messages derreure, les sauvegarder, afficher une page spéciale....

Reply

Marsh Posté le 31-03-2006 à 19:16:09    

$errmail existe a chaque fois, donc il echo "Le mél.." a chaque fois..
?

Reply

Marsh Posté le 31-03-2006 à 19:20:16    

Finalement j'ai fais comme ca :
 
error_reporting(0);
mail($mail_destinataire, $sujet, $message, $bonjour) or $errmail = 1;  
error_reporting(0);  
if ($errmail)  
{
echo "Le mél n'a pu être envoyé, vérifiez le destinaire.";
}
else
{
echo 'mél bien envoyé';
}

Reply

Marsh Posté le 31-03-2006 à 21:06:22    

excuse moi, j ai pas fait attention, c est
 
if (!$errmail) echo "Le mél n'a pu être envoyé, vérifiez le destinaire.";
 
car mail renvoie true si le mail s est bien envoyé, false sinon.
 
Ta solution n est pas sécurisé, à proscrire car il peut arriver que $errmail ne soit pas initialisé.

Reply

Marsh Posté le 01-04-2006 à 11:55:52    

Si $errmail n'est pas initialisé, il passe sur le "else" et donc "mèl bien envoyé". Je ne comprends pas ton inquiétude ?
 
Je traduis mon code comme ca:
 
Si le mail() passe bien, $errmail n'est pas initialisé, et donc echo "le mel bien envoyé".
Si le mail() passe pas bien, $errmail est initialisé, et donc echo "le mel n'est pas bien envoyé".
 
Non?


Message édité par _Roland_ le 01-04-2006 à 11:56:14
Reply

Marsh Posté le 01-04-2006 à 11:55:52   

Reply

Marsh Posté le 01-04-2006 à 13:14:23    

> Non?
oui, mais c est pas sécurisé, selon ta config php un internaute pourrait ajouter:
 http://url?errmail=1
et ça ferai planter ton script...
 
d une manière générale ne jamais utiliser une variable non initialisée, il y a toujours des risques, ce qui en fait une mauvaise habitude.

Reply

Marsh Posté le 01-04-2006 à 14:44:48    

d'accord je ferais plus gaffe à l'avenir :jap:
 
(dans ce cas ici, je fais un controle sur la forme de l'adresse email, il ne peut donc pas rentrer juste "errmail=1" )

Reply

Marsh Posté le 01-04-2006 à 14:58:53    

> dans ce cas ici, je fais un controle sur la forme de l'adresse email, il ne peut donc pas rentrer juste "errmail=1"
 
ça ne dépends pas de l entrée de l utilisateur.
explication:
PHP autorise à ce que les paramètre de l url, en GET et POST, soient déclarés comme variables globales. Ça dépends de la configuration en fait. Cette configuration n est en général pas recommandé, mais est très pratique et beaucoup de serveurs l on par défaut.
 
Par exemple quand tu as une page index.php, si appelle la page avec ``index.php?errmail=1``, ça va créer la variable globale errmail initialisée à 1.
 
Ça n est pas la seule raison, il y en a une autre valables aussi avec d autres languages:
c est pour faciliter la relecture.
 
Si ton programme tombe entre les mains d une autre personne, ou que tu veut le corriger au bout d un an, comme tu écrit errmail=1 on peut présupposé que errmail a été initialisé à 0. Celà peut conduire à des bugs, et rends la modification du programme plus délicate: méfiant, tu va chercher où se trouve l initialisation et tu devra lire tout le programme pour te rendre compte qu elle n est jamais initialisée. Dans le doute tu devra peut être même réécrire ce morceau de code, pour être sûr.
 
Au final tout ces inconvénients sont évités en initialisant toujours les variables.

Reply

Marsh Posté le 01-04-2006 à 15:20:18    

tu as entièrement raison :jap: je vais le faire en mettant un petit commentaire dans mon code :
// c'est nargy qui m'a dit d'initialiser la variable $errmail alors je le fais ici :
 
;)

Reply

Marsh Posté le 01-04-2006 à 15:51:53    

:lol:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed