EmailAddressZend_Validate_EmailAddress permet de valider une adresse mail.
Ce validateur éclate d'abord l'adresse mail entre partie locale et domaine et essaie de
valider ces deux parties conformément aux spécifications des adresses mail et des noms de
domaine.
Utilisation de baseVous trouverez ci-dessous un exemple d'utilisation basique isValid($email)) {
// l'email est valide
} else {
// l'email est invalide ; afficher pourquoi
foreach ($validateur->getMessages() as $message) {
echo "$message\n";
}
}
]]>
Ceci validera l'adresse mail $email et, en cas d'échec,
fournira des messages d'erreur informatifs via
$validator->getMessages().
Options for validating Email AddressesZend_Validate_EmailAddress supports several options which can
either be set at initiation, by giving an array with the related options, or
afterwards, by using setOptions(). The following options are
supported:
allow: Defines which type of domain names are accepted.
This option is used in conjunction with the hostname option to set the
hostname validator. For more informations about possible values of this
option, look at Hostname
and possible ALLOW* constants. This option defaults to
ALLOW_DNS.
deep: Defines if the servers MX records should be verified
by a deep check. When this option is set to TRUE then
additionally to MX records also the A, A6 and AAAA records
are used to verify if the server accepts emails. This option defaults to
FALSE.
domain: Defines if the domain part should be checked.
When this option is set to FALSE, then only the local part
of the email address will be checked. In this case the hostname validator will
not be called. This option defaults to TRUE.
hostname: Sets the hostname validator with which the
domain part of the email address will be validated.
mx: Defines if the MX records from the server should be
detected. If this option is defined to TRUE then the MX
records are used to verify if the server
accepts emails. This option defaults to FALSE.
setOptions(array('domain' => false));
]]>Parties locales complexesZend_Validate_EmailAddress validera toute adresse mail
conforme à la RFC2822. Comme par exemple bob@domaine.com,
bob+jones@domaine.fr, "bob@jones"@domaine.com et "bob
jones"@domaine.com. Quelques formats de mail obsolètes ne seront pas validés (comme
toute adresse mail contenant un retour chariot ou un caractère "\").
Validation uniquement de la partie locale
Si vous avez besoin de Zend_Validate_EmailAddress uniquement pour
vérifier la partie locale d'une adresse mail, et que vous souhaitez désactiver la
validation du nom d'hôte, vous pouvez spécifier le paramètre domain
à la valeur false. Cela force Zend_Validate_EmailAddress
à ne pas valider le nom d'hôte de l'adresse mail.
setOptions(array('domain' => FALSE));
]]>Validation de différents types de noms de domaine
La partie domaine d'une adresse mail est validée via Zend_Validate_Hostname.
Par défaut, seules les domaines qualifiés sous la forme domaine.com sont
acceptés, même si, il vous est possible d'accepter les adresses IP et les domaines locaux
également.
Afin de réaliser cette opération, il vous faut instancier
Zend_Validate_EmailAddress en lui passant un paramètre indiquant le
type de nom de domaine à accepter. Les détails sont disponibles dans
Zend_Validate_EmailAddress mais vous trouverez ci-dessous un exemple
illustrant comment accepter les noms de domaines qualifiés et les hôtes locaux :
isValid($email)) {
// l'email est valide
} else {
// l'email est invalide ; afficher pourquoi
foreach ($validateur->getMessages() as $message) {
echo "$message\n";
}
}
]]>Vérification que le nom de domaine accepte réellement le courriel
Le fait qu'une adresse électronique est dans un format correct, ne signifie pas
nécessairement que l'adresse électronique existe en réalité. Pour aider résoudre ce
problème, vous pouvez utiliser la validation MX pour vérifier si une entrée MX (le courriel)
existe dans le l'enregistrement du DNS pour le nom de domaine du courriel. Cela vous dit que
le nom de domaine accepte le courriel, mais ne vous dit pas que l'adresse électronique elle-même
est valable.
La vérification MX n'est pas active par défaut et est seulement supporté par des
plates-formes UNIX pour l'instant. Pour activer la vérification MX vous pouvez passer un
deuxième paramètre au constructeur Zend_Validate_EmailAddress.
Zend_Validate_Hostname::ALLOW_DNS,
'mx' => true
)
);
]]>MX Check under Windows
Within Windows environments MX checking is only available when
PHP 5.3 or above is used. Below PHP 5.3 MX
checking will not be used even if it's activated within the options.
Alternativement vous pouvez passer soit TRUE soit
FALSE à $validator->setValidateMx() pour activer ou désactiver
la validation MX.
En activant ce paramètre, les fonctions de réseau seront utilisés pour vérifier la
présence d'un enregistrement MX sur le nom de domaine de l'adresse électronique que vous
voulez valider. Faîtes cependant attention, cela ralentira probablement votre
scénario.
Sometimes validation for MX records returns FALSE, even if emails
are accepted. The reason behind this behaviour is, that servers can accept emails even
if they do not provide a MX record. In this case they can provide A, A6 or
AAAA records. To allow
Zend_Validate_EmailAddress to check also for these other records,
you need to set deep MX validation. This can be done at initiation by setting the
deep option or by using setOptions().
Zend_Validate_Hostname::ALLOW_DNS,
'mx' => true,
'deep' => true
)
);
]]>Performance warning
You should be aware that enabling MX check will slow down you script because of the
used network functions. Enabling deep check will slow down your script even more as
it searches the given server for 3 additional types.
Disallowed IP addresses
You should note that MX validation is only accepted for external servers. When deep
MX validation is enabled, then local IP addresses like 192.168.*
or 169.254.* are not accepted.
Valider les noms de domaines internationauxZend_Validate_EmailAddress peut aussi vérifier les caractères
internationaux qui existent dans quelques domaines. Ceci est connu comme le support de Nom
de Domaine International (IDN). Celui-ci est activé par défaut, quoique vous puissiez le
mettre hors service en changeant le paramètre via l'objet interne
Zend_Validate_Hostname qui existe dans
Zend_Validate_EmailAddress.
hostnameValidator->setValidateIdn(false);
]]>
De plus amples informations concernant l'utilisation de
setValidateIdn() sont présentes dans la documentation de
Zend_Validate_Hostname.
Notez cependant que les IDNs sont seulement validés si vous autorisez la validation
des nom de domaines.
Validation des "Top Level Domains"
Par défaut un nom de domaine sera vérifié grâce à une liste de TLDs connus. Ceci est
activé par défaut, quoique vous puissiez le mettre hors service en changeant le paramètre
via l'objet Zend_Validate_Hostname interne qui existe dans
Zend_Validate_EmailAddress.
hostnameValidator->setValidateTld(false);
]]>
De plus amples informations concernant l'utilisation de
setValidateTld() sont présentes dans la documentation de
Zend_Validate_Hostname.
Notez cependant que les TLDs sont seulement validés si vous autorisez la validation
des nom de domaines.
Setting messagesZend_Validate_EmailAddress makes also use of
Zend_Validate_Hostname to check the hostname part of a given
email address. As with Zend Framework 1.10 you can simply set messages for
Zend_Validate_Hostname from within
Zend_Validate_EmailAddress.
setMessages(
array(
Zend_Validate_Hostname::UNKNOWN_TLD => 'I don't know the TLD you gave'
)
);
]]>
Before Zend Framework 1.10 you had to attach the messages to your own
Zend_Validate_Hostname, and then set this validator within
Zend_Validate_EmailAddress to get your own messages returned.