0

我尝试通过 php 向 yahoo 收件人发送邮件。每次我连接到雅虎时,我都会收到收件人地址的 250 状态代码,即使它不存在。我找到了一个从 yahoo 获得正确状态代码的脚本,但我找不到我在脚本中所做的差异或错误。我尝试发送不同的命令并在多台服务器上运行脚本,但对于 RCPT-TO-command,我总是得到 250 响应。为什么我没有得到正确的响应?当收件人不存在时,我想停止我的脚本!

得到正确响应的 verify-email.org 的日志:

存在有关 yahoo.com 的 MX 记录。
连接到 g.mx.mail.yahoo.com SMTP 成功。
=220 mta1062.mail.sp2.yahoo.com ESMTP YSmtp 服务就绪
> HELO verify-email.org
=250 mta1062.mail.sp2.yahoo.com
> 发件人:<check@verify-email.org>
=250 发件人 <check@verify-email.org> 好的
> RCPT 收件人:<sdjrfvn3r@yahoo.com>
=554 传递错误:dd 此用户没有 yahoo.com 帐户 (sdjrfvn3r@yahoo.com) [0] - mta1062.mail.sp2.yahoo.com

我的脚本得到错误响应的日志:

C 连接到 h.mx.mail.yahoo.com
S 220 mta1144.mail.mud.yahoo.com ESMTP YSmtp 服务就绪
C HELO my-domain.com
S 250 mta1144.mail.mud.yahoo.com(152.70 毫秒)
C 邮件来自:<existing-address@my-domain.com>
S 250 发件人 <existing-address@my-domain.com> 正常(723.29 毫秒)
C RCPT 收件人:<sdjrfvn3r@yahoo.com>
S 250 收件人 <sdjrfvn3r@yahoo.com> 正常(152.67 毫秒)
C 关闭套接字连接
S 连接优雅关闭

您可以在此处找到正常工作的脚本: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 -> 总是相同的响应
4

2 回答 2

6

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

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

于 2011-12-31T20:01:20.567 回答
1

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

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

于 2011-02-05T21:45:26.190 回答