Другие ответы здесь обсуждают различные проблемы с попытками сделать это. Я подумал, что покажу, как вы можете попробовать это в случае, если вы хотите научиться, делая это самостоятельно.
Вы можете подключиться к почтовому серверу через telnet, чтобы узнать, существует ли адрес электронной почты. Вот пример тестирования адреса электронной почты для stackoverflow.com
:
C:\>nslookup -q=mx stackoverflow.com
Non-authoritative answer:
stackoverflow.com MX preference = 40, mail exchanger = STACKOVERFLOW.COM.S9B2.PSMTP.com
stackoverflow.com MX preference = 10, mail exchanger = STACKOVERFLOW.COM.S9A1.PSMTP.com
stackoverflow.com MX preference = 20, mail exchanger = STACKOVERFLOW.COM.S9A2.PSMTP.com
stackoverflow.com MX preference = 30, mail exchanger = STACKOVERFLOW.COM.S9B1.PSMTP.com
C:\>telnet STACKOVERFLOW.COM.S9A1.PSMTP.com 25
220 Postini ESMTP 213 y6_35_0c4 ready. CA Business and Professions Code Section 17538.45 forbids use of this system for unsolicited electronic mail advertisements.
helo hi
250 Postini says hello back
mail from: <me@myhost.com>
250 Ok
rcpt to: <fake@stackoverflow.com>
550-5.1.1 The email account that you tried to reach does not exist. Please try
550-5.1.1 double-checking the recipient's email address for typos or
550-5.1.1 unnecessary spaces. Learn more at
550 5.1.1 http://mail.google.com/support/bin/answer.py?answer=6596 w41si3198459wfd.71
Строки с префиксом с цифровыми кодами являются ответами от SMTP-сервера. Я добавил несколько пустых строк, чтобы сделать его более читабельным.
Многие почтовые серверы не будут возвращать эту информацию в качестве средства защиты от спамеров против сбора адресов электронной почты, поэтому вы не можете полагаться на эту технику. Тем не менее, вы можете добиться успеха в удалении некоторых явно плохих адресов электронной почты путем обнаружения недействительных почтовых серверов или отклонения адресов получателей, как указано выше.
Обратите внимание, что почтовые серверы могут занести вас в черный список, если вы сделаете слишком много запросов к ним.
В PHP я считаю, что вы можете использовать fsockopen
, fwrite
и fread
для программного выполнения вышеупомянутых шагов:
$smtp_server = fsockopen("STACKOVERFLOW.COM.S9A1.PSMTP.com", 25, $errno, $errstr, 30);
fwrite($smtp_server, "helo hi\r\n");
fwrite($smtp_server, "mail from: <me@myhost.com>\r\n");
fwrite($smtp_server, "rcpt to: <fake@stackoverflow.com>\r\n");