Проверить адреса электронной почты для жесткого отказов
Я попытался выполнить поиск, но получил только платные онлайн-сервисы, кода для проверки того, что данный адрес электронной почты действительно не существует, поэтому я могу предотвратить сильный отскок.
Пожалуйста, смотрите код ниже, который может проверить только домен. Нужна помощь, это возможно. Решение может быть на любом языке, PHP (предпочтительно), JAVA, .NET, Rudy
public function check_domain($email)
{
if( ! (bool) checkdnsrr(preg_replace('/^[^@]++@/', '', $email), 'MX'))
{
return FALSE;
}
return TRUE;
}
Обновить
Используя онлайн-сервисы, он показывает что-то вроде этого
MX record found: mta6.am0.yahoodns.net (Priority 1)
MX record found: mta5.am0.yahoodns.net (Priority 1)
MX record found: mta7.am0.yahoodns.net (Priority 1)
Connecting to mta6.am0.yahoodns.net
Connected to mta6.am0.yahoodns.net
Dialog with mta6.am0.yahoodns.net ok
------------------------------------------------------------
220 mta1278.mail.bf1.yahoo.com ESMTP ready
HELO verifyemailaddress.org
250 mta1278.mail.bf1.yahoo.com
MAIL FROM: <noreply@verifyemailaddress.org>
250 sender <noreply@verifyemailaddress.org> ok
RCPT TO: <xxxxx@yahoo.com>
250 recipient <xxxxxx@yahoo.com> ok
QUIT
221 mta1278.mail.bf1.yahoo.com
------------------------------------------------------------
Email address xxxxxx@yahoo.com accepted
Что именно они делают, отправляя электронное письмо??
1 ответ
Как минимум, SMTP-соединение должно быть открыто для принимающего сервера, чтобы проверить, существует ли адрес электронной почты. Письмо на самом деле не нужно отправлять. Большинство почтовых серверов будут отвечать на RCPT TO
Команда с ошибкой, если адрес электронной почты не существует. На данный момент, QUIT
Команда может быть отправлена без фактической отправки электронной почты. Некоторые почтовые серверы также позволяют вам выдавать VRFY
Команда для проверки адреса, но это широко не поддерживается.
Так работают сервисы проверки электронной почты. Они выполняют эти рукопожатия и затем сохраняют результаты. Вот что вы видите происходящим в приведенном вами примере; клиент QUIT
после RCPT TO
,
Есть несколько других вариантов:
Самое основное - проверить, что адрес электронной почты имеет правильную структуру. На этой странице есть одно регулярное выражение, чтобы проверить это - http://www.regular-expressions.info/email.html
Более продвинутый - зависит от того, с какой целью вы пытаетесь предотвратить сильный отскок. Однажды я подумал о том, чтобы поставить эвристику, где, например, имя пользователя должно быть длиной не менее X символов, а доменом Y длиной, но забросил его. Односимвольные имена пользователей действительны; Я не уверен насчет минимума для доменного имени. И если кто-то хочет нарушить эти правила, это тривиально; так что нет смысла.
Более продвинутый - когда вы сталкиваетесь с новым доменом, подключитесь к принимающему SMTP-серверу и начните SMTP-квитирование. Проверьте ответ на
RCPT TO
команда.Используйте службу проверки электронной почты, такую как Kickbox. Эти службы видят множество адресов электронной почты и часто кэшируют соответствующие данные и готовы к работе, не дожидаясь или не выполняя рукопожатие.
Почему бы просто не отправить электронное письмо и попросить пользователей нажать на ссылку. Это то, что многие службы начали делать. Устраняет сильные скачки. Плюс это гарантирует, что подписчики предоставляют адрес электронной почты, которым они владеют.