Symfony : Validation des emails

Symfony : Validation des emails
15 Juillet 2016


Symfony fournit une contrainte de validation pour les emails :

/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", length=255)
 *
 * @Assert\Email()
 */
private $email;

De base cette constrainte n'est pas très évoluée et les adresses mail suivantessont autorisées :

!~@test.*
@@test.a
...

 

Activer la vérification du MX du domaine de l'email

Le MX du domaine permet de s'assurer que :

  1. Le nom de domaine existe
  2. Un champ MX est défini pour ce domaine et qu'il est donc très probable qu'il y ait un serveur mail derrière

Pour activer la vérification du MX :

/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", length=255)
 *
 * @Assert\Email(checkMX=true)
 */
private $email;

 

Activer la validation de l'email selon la RFC

La RFC 3696 définit précisément le format d'une adresse mail.

Pour activer la validation selon la RFC 3696 :

/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", length=255)
 *
 * @Assert\Email(strict=true)
 */
private $email;

Il faut au préalable ajouter le bundle suivant : egulias/email-validator. Ce bundle permet de vérifier le format de l'adresse mail selon les préconisations de le RFC 3696.

composer require egulias/email-validator "1.*"
composer update

Il n'est pas necéssaire d'ajouter ce bundle dans AppKernel.php.

 

Double validation

Avec ces deux contraintes, la validation est très correcte. On est sûr que le domaine existe et que l'adresse est au bon format. Pour utiliser les deux contraintes en même temps :

/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", length=255)
 *
 * @Assert\Email(strict=true, checkMX=true)
 */
private $email;

 

Si vous voulez personnaliser les messages d'erreur en fonction du type de contrainte :

/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", length=255)
 *
 * @Assert\Email(strict=true, message="Le format de l'email est incorrect")
 * @Assert\Email(checkMX=true, message="Aucun serveur mail n'a été trouvé pour ce domaine")
 */
private $email;

 

Voir la documentation officielle

 

Full validation

Comment être sûr à 100% que l'adresse mail saisie est bien réelle ?

  • Envoyer un mail sur l'adresse mail saisie contenant un lien protégé qui, lorsqu'il est appelé, valide l'adresse mail
  • Envoyer un mail sur l'adresse mail saisie en indiquant un ReturnPath. Si l'adresse n'existe pas, vous recevrez un mail de no-delivery sur cette adresse. Il faudra alors déclencher une opération à la réception de l'email pour invalider l'adresse mail.

Inconvénient : On ne peut pas vérifier au moment de la saisie.

Commentaires

Aucun commentaire