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

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

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

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

Ответы

Ответ 2

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

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

filter_var($someEmail, FILTER_VALIDATE_EMAIL);

Ответ 3

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

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

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

Так что, как бы то ни было, я просто хотел бы проверить, что у нас есть что-то, уникальное @, что-то еще, и пойдите с ним: он поймает большинство пользовательских ошибок (например, пустое поле или имя пользователя вместо адреса электронной почты).
Если пользователь хочет дать поддельный адрес, он просто даст что-то случайное, выглядящее правильно (см. Адрес электронной почты или адрес электронной почты на веб-сайте [email protected]). И никакой валидатор не поймает опечатки ([email protected], а не [email protected]).

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

Ответ 4

[ОБНОВЛЕНО] Я собрал все, что я знаю о проверке адреса электронной почты здесь: 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.

Ответ 5

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

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

... Обновить...

Как отмечалось в комментариях Porges, библиотека на ссылке устарела, но эта страница имеет ссылку на обновленная версия.

Ответ 6

Zend_Validate содержит средство проверки электронной почты.

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

Ответ 7

Я бы рекомендовал посмотреть исходный код 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)