FractalizeR
Хм, я тебя полностью поддерживаю.
Соглашусь, можно проверить наличие почтового ящика используя соединение с SMTP, и посылкой комманд, до DATA, четко по спецификации rfc2821.
Тоесть в порядке
EHLO
MAIL FROM
RCPT TO
RSET
QUIT
Анализировать отклики, и тем самым проверить почтовый ящик на существование.
Из спецификации (раздел 4.3.2)
RCPT
Удачные: 250, 251
Неудачные: 550, 551, 552, 553, 450, 451, 452, 503, 550
Если используется модификация SMTP частично не по спецификации, то можно анализировать коды откликов (разел 4.2.1, rfc2821):
1yz – позитивный предварительный отклик
2yz – позитивный окончательный отклик
3yz – позитивный промежуточный отклик
4yz – негативный отклик о временных проблемах
5yz - негативный отклик о постоянных проблемах
Тоесть при получении 4yx, 5yx - говорить юзеру о неверном e-mail.
Если например, mx существует, но сервер SMTP не доступен (возвращает коды ошибок или нет соединения), сообщать об этом пользователю, с просьбой зарегистрироваться когда будет работать почтовый сервер.
Нужно учесть, что спецификация по DNS гласит, что не обязательно у домена должна быть MX запись. В случае ее отсутствия почта будет заворачиваться на A запись соответствующего домена.
На практике достаточно просто послать письмо с ссылкой активации, хотя сейчас появились сервисы, которые заворачивают всю почту приходящую на домен, далее она анализируется роботами которые ходят по ссылкам
Как вариант, в письме писать "Пожалуйста перейдите по ссылке", на самой ссылке разместить капчу с кнопкой OK или простой пример "Сколько 5 плюс 5 деленное на 2"