Как проверить правильность адреса электронной почты - PullRequest
2 голосов
/ 11 февраля 2011

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

Однако в этом приложении мои пользователи будут предоставлять адрес электронной почты третьей стороны, которая не является зарегистрированным пользователем в моей системе. Затем моя заявка отправит запрос по электронной почте третьей стороне.

Я ищу решение, которое позволит мне отследить любые проблемы или опечатки, которые пользователь вводит в мою веб-форму. Я ищу что-то помимо проверки регулярного выражения, чтобы такие проблемы, как "somoebody@domain.vom", были определены как ошибка, пока пользователь все еще находится на сайте, поскольку домен верхнего уровня "vom" недействителен. 1005 *

Спасибо

Ответы [ 4 ]

5 голосов
/ 11 февраля 2011

Протокол SMTP позволяет отправлять сообщения, как все знают. Однако часть протокола говорит HELO серверу SMTP и запрашивает разрешение на отправку пользователю электронного письма.

Обычно SMTP-сервер запрещает доставку почты пользователям, которых не существует, и когда сервер принимает адрес, существует большая вероятность, что учетная запись существует. Затем вы просто отбрасываете соединение, не отправляя электронное письмо. Этот подход является ИМХО наиболее разумным и работает гораздо дальше, чем просто использование регулярных выражений для проверки почтового адреса.

Однако, если целевой хост MX - это просто прыжок, который просто передает почту на другой сервер, прыжок не может знать, существует ли адрес на самом деле, так что это не на 100% положительно.

2 голосов
/ 11 февраля 2011

Как всегда, существует нет пуленепробиваемый способ проверки правильности адреса электронной почты, кроме попыток отправить на него письмо.

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

Подробнее см. в этом вопросе .

1 голос
/ 11 февраля 2011

Существует множество проблем с проверкой адреса электронной почты.Вы можете написать невероятно длинное / сложное регулярное выражение, , но мир может измениться ."VOM" может быть действительным TLD завтра.

Предположим, что только отправив электронное письмо на этот адрес, вы сможете определить, что адрес электронной почты является действительным.Я бы предложил предложение HELO как быструю и надежную проверку того, действительно ли введенный адрес работает.

По вашему вопросу звучит, что вы пытаетесь обнаружить / избежать опечаток.Возможно, вы просто будете ненавязчиво уведомлять пользователя «Вы имели в виду« .com »?».Должен быть белый список действительных ДВУ (возможно, вызов веб-службы, чтобы убедиться, что список ДВУ (с новыми / удаленными расширениями).

Есть также обсуждение кроличьей норы о том, является ли знак плюсдействителен и / или поддерживается на различных SMTP-серверах.

0 голосов
/ 11 февраля 2011

Вы можете легко проверить часть имени хоста / домена почтового адреса с помощью простого поиска DNS.

Однако нет простого способа проверить часть имени пользователя, особенно учитывая тот факт, что редкоявляются фактическими именами пользователей, которые вы можете найти в словаре или чем-то подобном.

Нет также безопасного способа запросить имя пользователя на почтовом сервере.Многие SMTP-серверы являются простыми ретрансляторами без знания списка пользователей сайта назначения.Кроме того, многие почтовые серверы на самом деле будут принимать сообщения недействительным пользователям, чтобы избежать возможности спамеров получить свой фактический список пользователей с помощью грубой силы.

Единственный "безопасный" способ - это отправить вежливое сообщение сдля подтверждения: «Пользователь John B. на MyService.com пригласил вас на свою рассылку, вы принимаете?».Если вы получили ответное сообщение, вы можете добавить этот адрес в список действительных адресов для каждого из ваших пользователей, который вы можете использовать позже различными способами, чтобы помочь своим пользователям избежать опечаток в будущем.

...