[RESOLU] PHPMailer - Fonction PHP - filter_var refuse de valider une adresse courriel

Petit nouveau ! | 5 Messages

01 mai 2023, 05:22

Bonjour,

J'utilise PHPMailer pour l'envoi d'un courriel après le remplissage d'un formulaire sur une page web.

Mon problème provient de la fonction AddAddress(courriel) de PHPMailer qui plante la procédure. Après recherche dans le code de PHPMailer, j'ai découvert que cette fonction appelle la fonction PHP filter_var(courriel,FILTER_VALIDATE_EMAIL). Cette dernière fonction invalide toutes les adresses courriel que je lui passe.

J'ai tenté un filter_var(courriel,FILTER_SANITIZE_EMAIL) au cas où j'aurais un caractère invisible ou autre, mais l'adresse courriel semble nette.

J'ai googlé pour trouver une cause et une solution mais je n'ai rien trouvé jusqu'à présent. Du coup, je fais appel aux personnes d'ici pour me fournir une piste de solution. Quelqu'un a-t-il déjà rencontré ce problème ? Ce n'est peut-être pas grand chose mais je sèche sur ce coup.

Pour info, je suis sous Linux (Slackware 15 up-to-date) avec PHP 8.2.5 et PHPMailer 6.8.

J'ai aussi essayé mon adresse gmail personnel. Échec de la fonction aussi.

Merci.

Avatar du membre
Mammouth du PHP | 1476 Messages

01 mai 2023, 12:13

addAddress(), sans majuscule. Test sur une page, la fonction seule :
<?php
var_dump(filter_var("[email protected]", FILTER_VALIDATE_EMAIL));
//ceci doit s'afficher : string '[email protected]' (length=16)
//si OK, fais un var_dump de tes mails avant $PHPMailer->send(), je pense qu'ils sont incorrects (mauvaise sélection dans la table ?).
?>

Mammouth du PHP | 2605 Messages

01 mai 2023, 14:32

filter_var(courriel,FILTER_SANITIZE_EMAIL)
et
filter_var($courriel,FILTER_SANITIZE_EMAIL)
ce n'est pas la même chose.

Petit nouveau ! | 5 Messages

01 mai 2023, 18:15

Merci pour vos suggestions.

Alors oui, c'est bien addAddress() que j'emploie. Erreur de frappe. Désolé.
Et oui, j'emploie bien le '$courriel' au lieu de 'courriel'. Encore désolé de cette coquille dans mon message d'origine.

L'emploi de var_dump me retourne

Code : Tout sélectionner

bool(false)
Pour la variable $courriel, j'ai testé avec mon adresse courriel personnel et d'autres. Même résultat dans tous les cas. J'ai même essayé en écrivant directement l'adresse courriel dans la fonction sans passer par une variable. Nada.

J'avoue que je sèche sur ce coup-là.

Mammouth du PHP | 2605 Messages

01 mai 2023, 18:44

var_dump(filter_var("[email protected]", FILTER_VALIDATE_EMAIL));
exécuté sur un des sites qui ressort sur https://www.google.com/search?q=php+online renvoie false ?

Avatar du membre
Mammouth du PHP | 1476 Messages

01 mai 2023, 19:08

Si t'as bool(false) la fonction ne fonctionne pas ^^

Voir si ton hébergement a cette fonction intégrée/activée à PHP, bizarre, rien à ce sujet dans la documentation https://www.php.net/manual/fr/function.filter-var.php

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9642 Messages

01 mai 2023, 22:43

Si t'as bool(false) la fonction ne fonctionne pas ^^
Plus exactement, sur cette fonction ça veut dire que la donnée fournie en paramètre n'est pas validée par le filtre
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Mammouth du PHP | 1476 Messages

01 mai 2023, 23:10

Le problème est que je lui ai fait tester cette ligne qui devrait normalement afficher "[email protected]"
var_dump(filter_var("[email protected]", FILTER_VALIDATE_EMAIL));

Petit nouveau ! | 5 Messages

02 mai 2023, 10:51

J'ai testé la fonction sur une autre machine avec la même version de PHP et la fonction retourne une bonne valeur.

Je suis arrivé à la conclusion qu'il y a quelque chose de louche sur la machine serveur. Même si a priori tout semble en ordre et que le dernière mise à jour datant d'un bon mois semble s'être déroulée sans accroc.

Comme nous sommes tous d'accord sur le fonctionnement de cette fonction et sa syntaxe, je pense que je peux écarter une erreur dans le code, voire une subtilité qui me serait passée sous le nez. Donc j'en arrive à croire que quelque chose est mal configurée sur la machine (encoding, ...) mais je n'ai aucun message d'erreur pour me donner une moindre piste. Je vais fouiller dans les logs.

Je vous tiens au courant.

Merci pour votre aide et vos suggestions. Elles m'aident à avancer sur le problème... du moins à éliminer certaines pistes.

Petit nouveau ! | 5 Messages

08 mai 2023, 19:39

Bonjour à tous,

Je suis toujours confronté au même problème.

Sur ma machine avec PHP 7.4.33, la fonction var_dump(filter_var($courriel,FILTER_VALIDATE_EMAIL)) retourne bien l'adresse courriel précédée de string avec sa longueur entre parenthèse.

Sur le serveur avec PHP 8.2.5, j'ai un beau bool(false).

J'avoue que je sèche terriblement sur ce coup-là. Le serveur ne manifeste aucune erreur dans ses logs ni même un avertissement. Et manifestement, je suis le seul à rencontrer ce problème. Une recherche google ne donne rien.

J'ai presque envie de rétrograder la version de php sur le serveur pour voir... J'en suis rendu à ce stade-là.

Toute idée est la bienvenue.

Petit nouveau ! | 5 Messages

09 mai 2023, 02:14

Bonjour,

Finalement, j'ai eu un échange avec des gens sur le forum https://github.com/php/php-src/issues/11210.

L'ajout des lignes suivantes en début de mon code provoque l'apparition d'un Warning qui permet de cibler rapidement le coupable. La librairie pcre2 sur le serveur était corrompue...

Code : Tout sélectionner

ini_set("display_errors", 1); error_reporting(-1);
Warning: filter_var(): Compilation failed: unrecognised compile-time option bit(s) at offset 0 in /home/server/test.php on line 11.
Merci à tous.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9642 Messages

09 mai 2023, 10:18

Ohh merci pour le retour car c'est un bug très peu courant !
Quand tout le reste a échoué, lisez le mode d'emploi...