fonction mail() : Recipient address rejected - PHP - Programmation
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
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..
Marsh Posté le 31-03-2006 à 18:15:50
évite le die()
1°) tu met error_reporting à 0, et sauvegarde l ancien:
2°) tu envoie le mail et garde le message d erreur:
3°) tu rétabli le rapport d erreur:
4°) tu traite le cas d erreur
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....
Marsh Posté le 31-03-2006 à 19:16:09
$errmail existe a chaque fois, donc il echo "Le mél.." a chaque fois..
?
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é';
}
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é.
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?
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.
Marsh Posté le 01-04-2006 à 14:44:48
d'accord je ferais plus gaffe à l'avenir
(dans ce cas ici, je fais un controle sur la forme de l'adresse email, il ne peut donc pas rentrer juste "errmail=1" )
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.
Marsh Posté le 01-04-2006 à 15:20:18
tu as entièrement raison 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 :
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
si je mets un or die() ca n'évite pas le pb