Есть ли библиотека php для проверки адресов электронной почты?

Мне нужно проверить адрес электронной почты моих пользователей. К сожалению, сделать валидатор, который соответствует стандартам , сложно

Ниже приведен пример выражения регулярного выражения, которое пытается соответствовать стандарту

Есть ли библиотека PHP (желательно с открытым исходным кодом), которая проверяет адрес электронной почты?

Related of "Есть ли библиотека php для проверки адресов электронной почты?"

Вы посмотрели функции PHP filter_ ? Они не идеальны, но у меня есть довольно приличная работа в моем опыте.

Пример использования (возвращает boolean):

filter_var($someEmail, FILTER_VALIDATE_EMAIL);

AFAIK, единственный хороший способ проверить электронную почту – отправить электронное письмо и посмотреть, вернется ли пользователь на сайт, используя ссылку в этом электронном письме. Это то, что делают многие сайты.

Как вы указываете на ссылку на известное регулярное выражение мамонта, проверка всех форм адреса электронной почты затруднена, почти невозможна. Это так легко сделать неправильно, даже для простых писем стилей (я обнаружил, что слишком много сайтов отклоняют кепки в адресах электронной почты! И большинство старых регулярных выражений отклоняют TLD более чем из четырех букв!).

AFAIK, «Jean-Luc B. O'Grady» @ example.com и e = mc ^ 2 @ [82.128.45.117] являются действительными адресами … Хотя I-Made-It-Up @ Absurd-Domain-Name. информация скорее всего недействительна.

Поэтому я бы просто заметил, что у нас есть что-то, уникальное @, что-то еще, и пойдите с ним: он поймает большинство пользовательских ошибок (например, пустое поле или имя пользователя вместо адреса электронной почты).
Если пользователь хочет дать поддельный адрес, он просто даст что-то случайное, выглядящее правильно (см. Адрес электронной почты или адрес электронной почты на веб-сайте bill.gates@microsoft.com). И никакой валидатор не поймает опечатки (jhon.b@example.com, а не john.b@example.com).

Если вы действительно хотите проверить электронные письма против полного RFC, я бы посоветовал использовать регулярные выражения для разделения вокруг @, а затем проверить отдельно локальное имя и доменное имя. Отдельный случай локального имени, начинающийся с «из других случаев и т. Д.». Отдельный случай имени домена, начиная с [из других случаев и т. Д. Разделить проблему в небольших конкретных доменах и использовать регулярные выражения только в четко определенных, более простых случаях.
Разумеется, этот совет может применяться к множеству регулярных выражений …

[ОБНОВЛЕНО] Я собрал все, что я знаю о проверке адреса электронной почты здесь: http://isemail.info , который теперь не только проверяет, но и диагностирует проблемы с адресами электронной почты. Я согласен со многими комментариями здесь, что валидация является лишь частью ответа; см. мое эссе по адресу http://isemail.info/about .

Теперь я собрал тестовые примеры от Cal Henderson, Dave Child, Phil Haack, Doug Lovell и RFC 3696. Всего 158 тестовых адресов.

Я проверил все эти тесты против всех валидаторов, которые мог найти. Сравнение здесь: http://www.dominicsayers.com/isemail

Я постараюсь сохранить эту страницу в актуальном состоянии, так как люди повышают эффективность своих валидаторов. Благодаря Cal, Dave и Phil за помощь и сотрудничество в компиляции этих тестов и конструктивную критику моего собственного валидатора .

Люди должны знать об ошибках в отношении RFC 3696 в частности. Три из канонических примеров на самом деле являются неверными адресами. Максимальная длина адреса – 254 или 256 символов, а не 320.

Кэл Хендерсон (Flickr) написал соответствующий RFC822 совместимый адрес электронной почты , с объяснением RFC и кода, использующего RFC для соответствия адресам электронной почты. Я использую его довольно долгое время без каких-либо жалоб.

RFC822 (опубликовано в 1982 году) определяет, среди прочего, формат для интернет-сообщений (электронной почты). Вы можете найти RFC по googling – их много много в Интернете. Они немного сложны и странно отформатированы, но с небольшими усилиями мы можем заговорить.

… Обновить …

Как отметил Поргес в комментариях, библиотека на ссылке устарела, но эта страница имеет ссылку на обновленную версию .

Я нашел библиотеку в коде google: http://code.google.com/p/php-email-address-validation/

Есть ли другие?

Zend_Validate включает проверку подлинности по электронной почте.

Существует множество регулярных выражений для проверки – все от очень простых до очень продвинутых. Вы действительно должны выбрать то, что соответствует важности действительного письма в вашем приложении.

я бы рекомендовал посмотреть исходный код Zend_Validate_EmailAddress [ source ].

после исправления зависимостей вы можете просто сделать следующее:

 $mail_validator = new Zend_Validate_EmailAddress(); $mail_validator->isValid($address); // returns true or false 

лучше всего было бы получить полную Zend-библиотеку в свой проект через svn external и указать путь включения к ней …

но вы можете просто загрузить необходимые файлы ( 1 , 2 , 3 , 4 , 5 , 6 ) и включить их все (удалить вызовы require_once)