Php mail erreur NULL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Php mail erreur NULL

Re: Php mail erreur NULL

par Herve_be » 30 oct. 2020, 17:26

Merci pour l'explication de l'image liée.
Le lien figurant en clair dans le texte juste au-dessus de l'image il est en effet inutile de mettre un lien sur l'image, je l'ai supprimé.

Par contre j'utilise NotePad qui est bien configuré en UTF-8, les accents arrivent correctement dans le mail reçu.
Je ne comprends donc pas où est le problème du Subject, je vais demander à l'hébergeur.

Re: Php mail erreur NULL

par @rthur » 30 oct. 2020, 17:13

Le lien sert à accéder directement au site en question; si je le supprime l'image restera !
Oui mais le problème que t'as indiqué ton hébergeur c'est que c'est une image avec un lien (=une image liée).
Si tu retires le lien, ou que tu le mets en dessous par exemple, ça va diminuer le risque que ton mail soit vu comme un spam.
Je pense être en UTF-8
$Mail=utf8_encode($_GET["Mail"]);
if (filter_var($Mail, FILTER_VALIDATE_EMAIL) == False) die ("Adresse mail ".$Mail." invalide");
$Userid=utf8_encode($_GET["Userid"]);
$First=utf8_encode($_GET["First"]);
$Last=utf8_encode($_GET["Last"]);
$AppVer=utf8_encode($_GET["Version"]);
...
$Subject = "Code d'accès Hervé Reef Tools ".$AppVer." pour ".$Userid." (".$First." ".$Last.") @ ".$Mail;
Si ton éditeur de code n'est pas configuré en utf8, alors il est possible que les accents sur "accès Hervé" ne soient pas encodés en utf8.
C'est un peu fourbe mais c'est la seule explication logique que je verrai vu le message d'erreur que tu obtiens.

Re: Php mail erreur NULL

par Herve_be » 30 oct. 2020, 15:42

Le lien sert à accéder directement au site en question; si je le supprime l'image restera !
$message .= '<BR><BR><a href="https://www.LeForumRecifal.com"><IMG src="https://www.leforumrecifal.com/images/Banniere700.jpg"></a>';
Je pense être en UTF-8
$Mail=utf8_encode($_GET["Mail"]);
if (filter_var($Mail, FILTER_VALIDATE_EMAIL) == False) die ("Adresse mail ".$Mail." invalide");
$Userid=utf8_encode($_GET["Userid"]);
$First=utf8_encode($_GET["First"]);
$Last=utf8_encode($_GET["Last"]);
$AppVer=utf8_encode($_GET["Version"]);
...
$Subject = "Code d'accès Hervé Reef Tools ".$AppVer." pour ".$Userid." (".$First." ".$Last.") @ ".$Mail;

Re: Php mail erreur NULL

par @rthur » 30 oct. 2020, 15:32

  • HTML_SHORT_LINK_IMG_1:Le HTML est très court avec une image liée
    je ne vois pas ce que je pourrais faire sinon supprimer l'image qui ne sert en fait de décoration mais j'y tiens
Si elle te sert de décoration pourquoi pas, mais peut être à minima pourrais-tu supprimer le lien qui est dessus ?
  • SUBJ_ILLEGAL_CHARS:Objet: contient trop de caractères non autorisés bruts
    voici un exemple d'objet
    Code d'accès Hervé Reef Tools 200928 pour Zeykain (Prénom Nom) @ adresse.mail
Vérifie que tu es bien en utf8 car celà peut être la raison de ce message d'erreur

Re: Php mail erreur NULL

par Herve_be » 30 oct. 2020, 12:16

Bonjour,
Si php mail() retourne False je reçois un rapport d'erreur, il est intéressant pour moi de savoir ce que retourne error_get_last()
Je ne peux pas utiliser <input type="email"> car l'adresse mail ne provient pas d'un formulaire html.
Merci pour la fonction filter_var() que je ne connaissais pas : je vais l'utiliser.

Entretemps mon hébergeur m'a envoyé les erreurs qu'il a trouvées dans mes mails :
  1. MISSING_DATE:Date manquante: en-tête
    j'ai ajouté
    $headers .= "Date: ".date('r')." \r\n";
  2. MISSING_MID:Message-Id manquant: en-tête
    j'ai ajouté
    $headers .= "Message-Id: <" . md5(uniqid(microtime())) . "@" . gethostname() . ">\r\n";
  3. HTML_SHORT_LINK_IMG_1:Le HTML est très court avec une image liée
    je ne vois pas ce que je pourrais faire sinon supprimer l'image qui ne sert en fait de décoration mais j'y tiens
  4. SUBJ_ILLEGAL_CHARS:Objet: contient trop de caractères non autorisés bruts
    voici un exemple d'objet
    Code d'accès Hervé Reef Tools 200928 pour Zeykain (Prénom Nom) @ adresse.mail
    je ne comprends pas où est le problème, et vous ?

Re: Php mail erreur NULL

par @rthur » 30 oct. 2020, 09:35

error_get_last() renvoie des erreurs PHP (par exemple des erreurs de syntaxe) que tu ne dois normalement jamais afficher à tes utilisateurs (pour des raisons de sécurité)
error_get_last() n'est utile que dans des cas très particuliers quand on fait de la gestion d'erreur par exemple avec des try... catch() ce qui n'est pas ton cas.

L'utiliser au milieu de ton code au moment de l'envoi d'un mail ne sert strictement à rien pour afficher un message relatif à l'envoi ou pas d'un email. Mais bon tu fais comme tu veux, c'est ton code. :D


:arrow: Si c'est un problème d'adresse e-mail mal saisie alors tu ferais mieux de vérifier qu'elle est déjà formée correctement avec filter_var().
Si filter_var($email_saisi, FILTER_VALIDATE_EMAIL) renvoie false alors tu peux tout de suite dire à ton utilisateur qu'il s'est trompé dans la saisie de son email.

:idea: Tu peux également le faire en HTML très simplement :
https://www.w3schools.com/tags/att_input_type_email.asp

Re: Php mail erreur NULL

par Herve_be » 29 oct. 2020, 10:29

Merci,
entretemps j'ai essayé avec
if ($Err === NULL)
mais il ne détecte pas le NULL, bien avec
if ($Err == "NULL")

D'autre part error_get_last() ne renvoie pas nécessairement NULL, il peut renvoyer la dernière erreur s'il y en a une
par conséquent si error_get_last() ne renvoie pas NULL je vais envoyer à l'utilisateur ce que error_get_last() envoie
par contre si error_get_last() envoie NULL je ne souhaite pas envoyer NULL à l'utilisateur mais un autre texte du style
"adresse mail refusée, essayez une autre adresse mail"
car la plupart du temps ça fonctionne mais si un utilisateur rencontre ce problème une fois il le rencontre chaque fois, c'est donc probablement son adresse mail qui est en cause.

Re: Php mail erreur NULL

par @rthur » 29 oct. 2020, 01:11

Pour être tout à fait correct, met un triple égal et NULL sans guillemet.


Mais cette partie de ton code ne sert strictement à rien :
C'est uniquement si mail() renvoie false que tu dois afficher "Problème lors de l'envoi du mail"
Qu' error_get_last() te renvoie NULL ou autre chose, ne veut rien dire sur l'envoi du mail.

Re: Php mail erreur NULL

par Herve_be » 28 oct. 2020, 22:57

Autre question restée sans réponse : si mail() retourne False, comment savoir si error_get_last() donne NULL ou une vraie erreur ?
Si mail() retourne False il n'y a pas d'erreur PHP, donc ce que tu récupèreras avec error_get_last() (qui ne récupère que les erreurs PHP) ne servira à rien pour ton problème.
Et en l'occurence ça renverra toujours NULL puisqu'il n'y a pas d'erreur PHP.
Je voulais savoir si ce code est corect pour savoir si error_get_last() renvoie NULL (pas d'erreur php) ou autre chose (erreur php)

Code : Tout sélectionner

if ($Err == "NULL") { echo "Problème lors de l'envoi du mail"; } else { echo $Err; }

Re: Php mail erreur NULL

par @rthur » 28 oct. 2020, 20:31

n'y a-t-il vraiment pas moyen de savoir pourquoi au moment où le problème se pose afin de pouvoir informer directement l'utilisateur autrement que par "l'envoi du mail a échoué" ?
La seule façon de savoir pourquoi l'envoi a échoué, serait que ton script PHP aille lire le log du serveur SMTP et affiche le message d'erreur ou tout du moins une traduction du message d'erreur pour que ce soit compréhensible par un utilisateur lambda.
Entretemps j'ai reçu le log SMTP, il y a bien une erreur, mais je ne comprends pas ce que ça veut dire :
Message rejected due to content policy (17fd90f2-16a9-11eb-bb66-d0431ea8a29d) YSA
Ça te dit que ton hébergeur a mis en place une règle qui bloque l'envoi de ton mail, mais vu que le message d'erreur n'indique pas la règle qui a fait le blocage, il faut que tu demandes le détail à ton hébergeur.
Autre question restée sans réponse : si mail() retourne False, comment savoir si error_get_last() donne NULL ou une vraie erreur ?
Si mail() retourne False il n'y a pas d'erreur PHP, donc ce que tu récupèreras avec error_get_last() (qui ne récupère que les erreurs PHP) ne servira à rien pour ton problème.
Et en l'occurence ça renverra toujours NULL puisqu'il n'y a pas d'erreur PHP.

Re: Php mail erreur NULL

par Herve_be » 28 oct. 2020, 17:50

Autre question restée sans réponse : si mail() retourne False, comment savoir si error_get_last() donne NULL ou une vraie erreur ?
Ce code est-il correct ?

Code : Tout sélectionner

if (mail($Mail, $Subject, $message, $headers)) { echo "Sent"; } else { $Return = error_get_last(); $Err = var_export($Return, true); if ($Err == "NULL") { echo "Problème lors de l'envoi du mail"; } else { echo $Err; } }

Re: Php mail erreur NULL

par Herve_be » 28 oct. 2020, 16:49

Entretemps j'ai reçu le log SMTP, il y a bien une erreur, mais je ne comprends pas ce que ça veut dire :
Message rejected due to content policy (17fd90f2-16a9-11eb-bb66-d0431ea8a29d) YSA

Re: Php mail erreur NULL

par Herve_be » 28 oct. 2020, 16:14

J'ai bien compris que l'erreur ne vient pas de php mais du serveur SMTP, j'ai demandé le log du serveur.
Il n'empêche que je ne trouve toujours pas la réponse à ma question que je suis bien obligé de répéter :
n'y a-t-il vraiment pas moyen de savoir pourquoi au moment où le problème se pose afin de pouvoir informer directement l'utilisateur autrement que par "l'envoi du mail a échoué" ?

Re: Php mail erreur NULL

par @rthur » 28 oct. 2020, 15:35

Ça fait 3 fois qu'on te répète la même chose :

La fonction mail() transmet les données que tu lui passes en paramètre au serveur de mail (SMTP) configuré par ton hébergeur.
Si la fonction renvoie false, c'est que le serveur de mail SMTP soit n'a pas répondu, soit a rencontré une erreur.

Le fait de renvoyer false n'est pas une erreur PHP : PHP a fait son boulot, c’est-à-dire transmettre les infos au serveur de mail.

Si tu veux savoir pourquoi le serveur mail a répondu false, il faut regarder les logs du serveur de mail.
Contacte donc ton hébergeur, tu le payes pour ça.

Re: Php mail erreur NULL

par Herve_be » 28 oct. 2020, 10:42

Bonjour,
Dans la majorité des cas l'envoi du mail via php fonctionne très bien.
Ce n'est qu'exceptionnellement que mail() retourne False : n'y a-t-il vraiment pas moyen de savoir pourquoi au moment où le problème se pose afin de pouvoir informer directement l'utilisateur autrement que par "l'envoi du mail a échoué" ?