从Yahoo SMTP获取正确的响应

时间:2011-02-05 21:35:00

标签: php email smtp yahoo verify

我尝试通过php向雅虎收件人发送邮件。 每次我连接到雅虎时,我都会获得收件人地址的250状态代码,即使它不存在。我找到了一个从雅虎获取正确状态代码的脚本,但我找不到我在脚本中所做的差异或错误。我尝试发送不同的命令并在多个服务器上运行脚本,但我总是得到一个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
  • “邮件来自”中使用过的邮件地址确实存在
  • 我使用getmxrr()来获取yahoo.com的mx条目
  • 我试过HELO和EHLO - &gt;总是相同的回应

2 个答案:

答案 0 :(得分:5)

不要在verify-email.org上浪费你的钱。我写过一个在验证电子邮件地址方面表现很好的课程,但是几天来一直有问题试图从雅虎返回任何东西而不是250收件人OK消息。我终于提出了一个工作,我将在这里分享,不幸的是,在他们的服务器上大约10次左右,他们阻止了我12个小时。然后我将类从我的开发服务器移动到具有良好域名的实时服务器,配置了rDNS以及允许我发送电子邮件而不会将黑名单减去域密钥的所有内容。再一次,我得到的只有250条带有SMTP的回复,而且我的工作也被我的IP封锁了。我终于决定分解并购买剧本“看看他们做的不同”。答案是:他们没有做任何不同的事情。事实上,该脚本是垃圾,几乎与您可以在网上找到的任何基本脚本完全相同。我将它加载到2个不同的服务器上并使用两种不同的配置,按照脚本的方向写入信件(它只有1或2条指令)然而,对于我收到554的完全相同的电子邮件地址得到了相同的250响应在网站上。深入挖掘我发现它可能是一个销售脚本的电子邮件营销公司。他们要么与雅虎和其他人有关系,要么就是调用其他后端系统,我不知道,但我知道sccript不起作用。此外,发送给卖方和SWREG(一家数字河流公司)的电子邮件未得到答复以及要求退款。我发送了我的结果的屏幕截图与他们在网站上显示的内容。我现在正在向我的信用卡公司提出争议。重点是,请勿从verify-email.org购买。这是一个骗局。这是除非你想要小便45美元。

我唯一的建议是与专业公司建立业务关系或通过像ReturnPath这样的公司(非常昂贵)。或者,向每个订户发送确认电子邮件。我很遗憾地为一家营销公司工作,该公司无法根据他们与其联属合作伙伴的规则发送确认电子邮件,因此我必须使用第三方服务(昂贵)或提出另一种解决方案。祝你好运。

答案 1 :(得分:1)

您是否阅读过verify-email.org的常见问题解答? “对于某些域名,您无法验证地址是否良好,因为他们的邮件服务器不合作。例如:yahoo.com”

这是因为这些邮件服务器不希望垃圾邮件发送者收集已知良好的电子邮件地址。