Как проверить, существует ли идентификатор электронной почты или нет? - PullRequest
6 голосов
/ 12 января 2011

Как проверить, существует ли идентификатор электронной почты или нет с помощью PHP?и получить информацию о владельце почтового идентификатора?Можно ли получить информацию о владельце идентификатора электронной почты?нужно работать с некоторыми протоколами, такими как POP?Пожалуйста, помогите мне.

Ответы [ 2 ]

13 голосов
/ 12 января 2011

Не существует 100% гарантированного способа узнать, является ли адрес электронной почты действительным, не отправляя электронное письмо и не давая пользователю ответа каким-либо образом. Есть проверки, которые вы можете сделать, чтобы увеличить шансы узнать, является ли адрес электронной почты действительным или нет. Вы можете выполнить поиск DNS и посмотреть, есть ли в домене запись MX. Есть также части протокола SMTP, которые вы можете использовать, но ничто не требует, чтобы SMTP-сервер отвечал на эти команды. Centralops.net предоставляет продукт, который может помочь, но опять же, это не гарантируется.

Если бы был надежный способ справиться с этим, то почему практически каждый сайт, имеющий функцию регистрации, требовал, чтобы вы каким-то образом отвечали на электронную почту? Этот вопрос не должен быть глупым; Я просто надеюсь, что это поможет вам увидеть, что другие сайты не смогли выполнить ту же самую проверку, о которой вы просили.

НТН

12 голосов
/ 12 января 2011

Допустим, пользователь отправляет следующий адрес электронной почты:

  • stackuser@stackoverflow.com

Проверки, которые вы хотели бы выполнить по порядку, выглядят так:

  • Является ли адрес действительным
  • Работает ли в домене почтовый сервер / MX Records
  • Это черный список

Во-первых, в PHP вы можете проверить электронную почту, используя filter_var, например:

$is_valid = filter_var("stackuser@stackoverflow.com",FILTER_VALIDATE_EMAIL);

Во-вторых, вы хотите проверить, работает ли домен на почтовом сервере, для этого вы можете проверить записи DNS для MX, например:

$has_dns_mx_record = checkdnsrr("stackoverflow.com","MX");

Вы также можете открыть порт в домене следующим образом:

$socket = fsockopen("stackoverflow.com", 25);
$mail_running = (bool)$socket;
fclose($socket);

Вы также можете проверить, отвечает ли SMTP-сервер 550, т. Е. Электронная почта не существует, например:

SEND > helo hi
250 stackoverflow.com

SEND > mail from: <youremail@yoursite.com>
250 2.1.0 Ok

SEND > rcpt to: <stackuser@stackoverflow.com>
> 550 5.1.1 <stackuser@stackoverflow.com>: Recipient address rejected: User unknown in local recipient table

Глядя на вышесказанное, вы можете отправлять команды на действующий SMTP-сервер, такой как helo> mail from <...> и проверять ответ 550.

Посмотрите здесь некоторые коды ответов: http://www.greenend.org.uk/rjk/2000/05/21/smtp-replies.html

Также вы должны принять к сведению комментарий @ slebetman, в котором говорится, что небольшой процент почтовых> серверов настроен на 550, чтобы предотвратить перехват действительных адресов электронной почты.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...