Как проверить, существует ли идентификатор электронной почты или нет?

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


person brainless    schedule 12.01.2011    source источник
comment
Я предполагаю, что под идентификатором вы имеете в виду адрес. почему ты хочешь сделать это? Хотя я уверен, что существует множество допустимых вариантов использования, для меня это звучит как спам.   -  person brettkelly    schedule 12.01.2011
comment
@inkedmn: я хочу использовать его на странице регистрации веб-сайта для проверки адресов электронной почты, чтобы предотвратить спам и поддельные регистрации! абсолютно для обнаружения мошенничества!   -  person brainless    schedule 12.01.2011
comment
Отправка ссылки для активации — ваш единственный вариант.   -  person drudge    schedule 12.01.2011
comment
Это невозможно так, как вы хотите это сделать. Электронная почта подтверждения является единственным способом.   -  person Brad    schedule 12.01.2011
comment
Ссылка активации подтвердит, что пользователь владеет почтовым ящиком, а не подтвердит существование почтового ящика. это 2 отдельные сущности.   -  person RobertPitt    schedule 12.01.2011
comment
@RobertPitt: они могут владеть почтовым ящиком, только если он существует. Я уверен, что в некоторых случаях кому-то все равно, является ли человек, отправивший адрес электронной почты, владельцем указанного адреса, и в этом случае то, что у вас есть в вашем ответе, полезно, но все же не обещает 100% точность .   -  person Brian Ball    schedule 12.01.2011


Ответы (2)


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

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

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

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

$is_valid = filter_var("[email protected]",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: <[email protected]>
250 2.1.0 Ok

SEND > rcpt to: <[email protected]>
> 550 5.1.1 <[email protected]>: 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, который предоставляет шлюз для проверки, проверьте домен, чтобы увидеть, был ли он внесен в черный список, если он есть, электронная почта вполне может быть действительной и активной, но помечена как спам, поэтому это ненадежная электронная почта, и вам следует запросить альтернативный адрес электронной почты для авторизации против

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

person RobertPitt    schedule 12.01.2011
comment
Это с вероятностью 99% сработает. Есть некоторые почтовые серверы, которые настроены так, чтобы никогда не возвращать ответ 550, поэтому сценарии не могут вынюхивать действительный адрес электронной почты. Мой собственный почтовый сервер настроен так. Как и почта Yahoo. - person slebetman; 12.01.2011

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

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

ХТН

person Brian Ball    schedule 12.01.2011
comment
я наткнулся на ссылку во время гугления. verifyemailaddress.org . как они могли это сделать? я думаю, они сделали это хорошо. - person brainless; 12.01.2011
comment
Но нет никакого способа быть положительным. Вы можете выполнить шаги, описанные Робертом Питтом, часть из того, что он перечисляет, у меня есть в моем ответе (хотя он объясняет более подробно), но, в конце концов, единственный способ узнать наверняка — это отправить электронное письмо и сделать пользователь каким-то образом реагирует на это. Некоторые SMTP-серверы сразу сообщат вам, что адрес электронной почты не существует, но другие просто принимают письмо, а затем оно исчезает в эфире. Многие SMTP-серверы не отвечают на запрос о существовании адреса электронной почты. Они отключили это, чтобы предотвратить спам. - person Brian Ball; 12.01.2011
comment
verifyemailaddress.org на самом деле не работает. Он просто проверяет записи MX или что-то в этом роде. Я только что попробовал выполнить поиск по адресу [email protected], и он сказал мне, что он действителен. Зашел на горячую почту, и этот адрес доступен... - person Mike L.; 12.01.2011