Php mail erreur NULL

Eléphant du PHP | 256 Messages

25 oct. 2020, 19:19

Bonjour,
J'envoie des mails en php, ça fonctionne très bien, voici mon code

Code : Tout sélectionner

if (mail($Mail, $Subject, $message, $headers)) { echo "Sent"; } else { $Return = error_get_last(); echo var_export($Return, true); }
Rarement ça ne fonctionne pas mais dans ce cas la dernière ligne donne NULL
je ne peux donc pas savoir où est le problème : comment faire ?
Grand merci d'avance

Mammouth du PHP | 1967 Messages

26 oct. 2020, 09:20

Tu peux aller voir dans les fichier Log d'erreur de ton serveur
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 256 Messages

26 oct. 2020, 11:05

Merci, je vais toujours aller voir (je ne sais pas où se trouve ce fichier : j'ai demandé au service technique de mon serveur).
J'aurais cependant voulu récupérer l'erreur au moment où elle se produit afin de pouvoir expliquer à l'utilisateur comment il peut la résoudre.
La méthode que j'utilise n'est-elle pas correcte ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 oct. 2020, 12:15

Si error_get_last() te renvoie NULL, c'est qu'il n'y a pas eu d'erreur au niveau de PHP.
Du coup le problème est peut être au niveau du serveur mail qui est utilisé quand tu utilises la fonction mail()
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 256 Messages

26 oct. 2020, 12:26

Peut-être mais cette erreur n'est pas systématique, c'est ça qui est bizarre.
Je veux dire qu'invoquant un script php pour envoyer un mail la plupart du temps ça fonctionne très bien.
A de très rares occasions la fonction mail() ne retourne pas True : je cherche à savoir pourquoi.

Question subsidiaire :

Code : Tout sélectionner

echo var_export($Return, true);
donne NULL, comment puis-je l'intercepter pour ne pas répondre NULL ?
Comme ceci ?
$Err = var_export($Return, true);
if ($Err == "NULL")
{
echo "Problème lors de l'envoi du mail";
}
else
{
echo $Err;
{

Eléphant du PHP | 256 Messages

26 oct. 2020, 16:45

J'ai trouvé l'error_log : pas de trace des erreurs en question.

Eléphant du PHP | 256 Messages

26 oct. 2020, 17:06

Je vais essayer avec var_dump
Au lieu de

Code : Tout sélectionner

$Return = error_get_last(); $Return=var_export($Return, true);
j'ai fait

Code : Tout sélectionner

$Return = error_get_last(); ob_start(); var_dump($Return); $Return=ob_get_clean();

Mammouth du PHP | 2703 Messages

26 oct. 2020, 17:14

https://www.php.net/manual/fr/function. ... t-last.php
"Retourne NULL s'il n'y a actuellement aucune erreur. "
quand la fonction mail retourne false, elle ne génère pas une erreur.

Eléphant du PHP | 256 Messages

26 oct. 2020, 17:30

OK, mais alors pourquoi false ?
Pourquoi ne retourne-t-elle pas true s'il n'y a pas d'erreur ?

Eléphant du PHP | 256 Messages

27 oct. 2020, 17:22

Bonjour,
J'ai posé la question au service technique de mon serveur, réponse :
Nous n'offrons pas de journaux d'erreurs de messagerie php.
Pour définir votre propre journal des erreurs php, le code suivant doit être présent dans votre fichier php
ini_set ('track_errors', 1);
ini_set ('log_errors', 1);
ini_set ('error_log', '/customers/f/c/5/domain.com//httpd.www/php_error.log');

Cela signifie-t-il que je devrais ajouter ces instructions dans chaque fichier php ?
N’est-il pas possible de les mettre dans php.ini ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

27 oct. 2020, 20:22

Si la fonction mail() te renvoie false, il n'y a pas d'erreur au niveau de PHP.
Mais une erreur au niveau du serveur SMTP (qui gère l'envoi des email) de ton hébergeur.

Donc contacte ton hébergeur pour savoir pourquoi.

Ce n'est pas au niveau des logs PHP que tu auras un message d'erreur puisque PHP s'exécute très bien.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 256 Messages

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é" ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

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.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 256 Messages

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é" ?

Eléphant du PHP | 256 Messages

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