Я пытаюсь отправить письмо через php получателю Yahoo.
Каждый раз, когда я подключаюсь к Yahoo, я получаю 250 кодов статуса для адреса получателя, даже если он не существует. Я нашел скрипт, который получает правильный код состояния от Yahoo, но я не могу найти различия или ошибки, которые я сделал в своем скрипте. Я пытался посылать разные команды и запускать скрипт на нескольких серверах, но я всегда получаю 250 ответов для команды RCPT-TO.
Почему я не получаю правильный ответ? Я хочу остановить свой сценарий, когда получатель не существует!
Журнал verify-email.org, который получает правильный ответ:
MX record about yahoo.com exists.
Connection succeeded to g.mx.mail.yahoo.com SMTP.
=220 mta1062.mail.sp2.yahoo.com ESMTP YSmtp service ready
> HELO verify-email.org
=250 mta1062.mail.sp2.yahoo.com
> MAIL FROM: <check@verify-email.org>
=250 sender <check@verify-email.org> ok
> RCPT TO: <sdjrfvn3r@yahoo.com>
=554 delivery error: dd This user doesn't have a yahoo.com account (sdjrfvn3r@yahoo.com) [0] - mta1062.mail.sp2.yahoo.com
Журнал моего скрипта, который получает неправильный ответ:
C Connect to h.mx.mail.yahoo.com
S 220 mta1144.mail.mud.yahoo.com ESMTP YSmtp service ready
C HELO my-domain.com
S 250 mta1144.mail.mud.yahoo.com (152.70 ms)
C MAIL FROM: <existing-address@my-domain.com>
S 250 sender <existing-address@my-domain.com> ok (723.29 ms)
C RCPT TO: <sdjrfvn3r@yahoo.com>
S 250 recipient <sdjrfvn3r@yahoo.com> ok (152.67 ms)
C Close socket connection
S Connection closed gracefully
Вы можете найти скрипт, который работает правильно здесь: http://verify -email.org
Мой скрипт:
while(preg_match('/^\d\d\d-/', $r = fgets($sock))) {
$response .= $r;
}
$response .= $r;
return $response;
}
$mxRecord = "a.mx.mail.yahoo.com";
$domain = 'example.com';
$mailFrom = 'mailfrom@example.com';
$rcptTo = 'doesntexist2011@yahoo.com';
$commands = array(
"HELO ".$domain."\r\n",
"MAIL FROM: <".$mailFrom.">\r\n",
"RCPT TO: <".$rcptTo.">\r\n",
// "DATA\r\n",
// ... email subject and content
// ".\r\n",
"QUIT\r\n"
);
if($sock = fsockopen($mxRecord, 25, $errno, $errstr, 30)) {
foreach($array as $cmd) {
echo htmlentities($cmd);
echo '<br />';
fwrite($sock, $cmd);
echo htmlentities(getResponse($sock));
echo '<hr />';
}
fclose($sock);
}
else {
echo 'no connection';
}
?>
Некоторая информация:
- Я использовал свой собственный домен (не example.com)
- Скрипт находится на сервере, где мой домен ссылается на
- Сервер отсутствует в черном списке, например spamhaus.org
- Используемый почтовый адрес в «Mail From» существует
- Я использую getmxrr (), чтобы получить mx-записи yahoo.com
- Я пробовал HELO и EHLO -> всегда один и тот же ответ