Несколько пунктов здесь:
1) Компонент имени пользователя в адресе электронной почты имеет набор «базовых» правил
Однако эти правила на самом деле довольно запутанные и сложные. Создать регулярное выражение, которое соответствует 100% допустимых строк и 0% недопустимых строк, практически невозможно.
2) RFC заявляет, что единственным сервером, который должен проверить часть имени пользователя в адресе электронной почты, является хост этого домена
То есть, в письме на joe@server.com должен быть только компонент " joe ", проверенный сервером, обрабатывающим электронную почту для " server.com ».
3) Даже адрес, который проходит любой тест регулярного выражения, который вы можете иметь, может быть не активен / действителен
Я мог бы сказать, что мой адрес электронной почты thisdoesnotexist12756@gmail.com, который, вероятно, является потенциально допустимым адресом, но это не означает, что он существует, активен или является моим.
http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx
Лучшим решением для обработки адресов электронной почты и проверки их действительности является выполнение чрезвычайно простой проверки с использованием регулярного выражения (такой простой, как проверка того, что адрес содержит хотя бы один символ "@", и при как минимум один символ «.» справа от самого правого «@»), а затем отправьте электронное письмо на этот адрес, содержащее ссылку, которая затем отправит обратно через другую форму (с использованием параметров $ _GET), чтобы сообщить, что сообщение было успешно получено по указанному адресу электронной почты.
Пример:
- Пользователь посещает вашу форму
- Пользователь вводит все свои данные
- (Необязательно) Ваша форма использует javascript для быстрой проверки адреса электронной почты, чтобы убедиться, что шаблон /.+\@.+..+/ присутствует.
- Пользователь отправляет форму
- Ваш обработчик PHP-формы («скрипт») затем перепроверяет содержимое формы, включая адрес электронной почты, где он использует
preg_match()
для проверки на наличие /.+\@.+..+/
- Ваш PHP-скрипт сохраняет содержимое формы в таблицу, но помечает эту таблицу как " pending "
- Затем ваш сценарий PHP генерирует сообщение электронной почты на указанный адрес, содержащее ссылку на сценарий PHP на вашем сайте (т. Е. http://www.server.com/validate.php?entry=1)), и просит пользователя щелкнуть его, чтобы подтвердить их отправку
- Сценарий в validate.php просматривает его параметр
$_GET['entry']
и, если в таблице базы данных есть строка, соответствующая этому значению, он помечает ее как " valid «
Это, по общему признанию, очень длительный и запутанный процесс, который нужно пройти, но, если вы хотите быть на 100% уверены, что адрес электронной почты, который отправляет пользователь, по крайней мере, способен получать электронную почту во время отправка формы, это единственный способ сделать это.
Следует также отметить, что существует ряд служб, которые позволяют пользователям настраивать временные адреса электронной почты, плюс обычные адреса электронной почты ни в коем случае не являются постоянными, поэтому адрес, который был проверен сегодня, может не сделать этого завтра.