# EmailAddress - Проверка email адреса

Валидатор EmailAddress позволяет выполнить различные проверки email адреса.\
Валидатор сначала разбивает адрес электронной почты на local-part\@hostname и пытается сопоставить их с известными спецификациями для адресов электронной почты и имен хостов.

### Поддерживаемые параметры

* **allow**: Определяет, какой тип доменных имен принимает валидатор. Эта опция используется вместе с опцией hostnameValidator для установки валидатора имени хоста. Возможные значения этой опции определены в константах ALLOW\_ \* валидатора Hostname:
  * **ALLOW\_DNS**: (по умолчанию) Разрешает доменные имена (например example.com)
  * **ALLOW\_IP**: Разрешает IP адреса.
  * **ALLOW\_LOCAL**: Разрешает локальные домены такие как localhost или [www.localdomain](http://www.localdomain)
  * **ALLOW\_URI**: Разрешает имена хостов в универсальном синтаксисе URI. См. [RFC 3986](https://www.ietf.org/rfc/rfc3986.txt)
  * **ALLOW\_ALL**: Разрешить все типы хостов.
* **useDeepMxCheck**: Указывает валидатору на необходимость усиленной проверки MX записей домена. Если для этого параметра установлено значение true, то в дополнение к записям MX также используются записи A, A6 и AAAA для проверки того, принимает ли сервер электронную почту. Эта опция по умолчанию имеет значение false.
* **useDomainCheck**: Определяет, должна ли быть проверена часть домена. Если для этого параметра установлено значение false, будет проверяться только локальная часть адреса электронной почты. В этом случае валидатор имени хоста не будет вызван. Эта опция по умолчанию имеет значение true.
* **hostnameValidator**: Задает экземпляр объекта валидатора имени хоста, с помощью которого будет проверяться доменная часть адреса электронной почты.
* **useMxCheck**: Определяет, должны ли быть обнаружены записи MX с сервера. Если для этого параметра задано значение true, то MX-записи используются для проверки того, принимает ли сервер электронную почту или нет. Эта опция по умолчанию имеет значение false.

### Пример использования

Рассмотрим наиболее распространенный пример, которого скорее всего вам будет достаточно. Этот пример проверяет существование домена и возможность принимать email. Т.е. выполняется максимально возможная проверка. Она пропустит только точно существующий домен с MX записями.

```php
// Массив полей и значений
$data = [
    'test' => 'info@johncms.com',
];

// Настройки валидатора
$rules = [
    'test' => [
        'EmailAddress'   => [
            'allow'          => Laminas\Validator\Hostname::ALLOW_DNS,
            'useMxCheck'     => true,
            'useDeepMxCheck' => true,
        ],
    ],
];

// Валидация
$validator = new \Johncms\Validator\Validator($data, $rules);
if ($validator->isValid()) {
    echo 'OK';
} else {
    d($validator->getErrors());
}
```
