当脚本从CLI(cron)运行时,PHPMailer被“Host impersonating”拒绝

时间:2016-07-20 17:20:33

标签: php smtp phpmailer

我通过bluehost.com托管网站,该网站有一个我围绕PHPMailer构建的电子邮件功能。它运行良好,但看起来bluehost在过去24小时内更改了一些安全设置。通过调试后,我不知道如何解决这个问题。

看起来bluehost已将其结束配置为现在验证连接到SMTP服务器的主机。如果我在浏览网站时触发电子邮件,则电子邮件仍可正常发送:

SERVER -> CLIENT: 220-box304.bluehost.com ESMTP Exim 4.86_2 #1 Wed, 20 Jul 2016 10:16:19 -0600 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail.
CLIENT -> SERVER: EHLO www.fydentry.com
SERVER -> CLIENT: 250-box304.bluehost.com Hello www.fydentry.com [69.89.31.104]250-SIZE 52428800250-8BITMIME250-AUTH PLAIN LOGIN250 HELP
CLIENT -> SERVER: AUTH LOGIN
...
SERVER -> CLIENT: 235 Authentication succeeded

有些(大多数)电子邮件不是以交互方式发送的,并且在数据库中排队,php脚本通过cron作业定期在后台执行,以发送这些电子邮件。这曾经工作正常,但截至昨天,脚本现在抛出错误:

SERVER -> CLIENT: 220-box304.bluehost.com ESMTP Exim 4.86_2 #1 Wed, 20 Jul 2016 10:30:08 -0600 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail.
CLIENT -> SERVER: EHLO box304.bluehost.com
SERVER -> CLIENT: 550 "REJECTED - Bad HELO - Host impersonating [box304.bluehost.com]"
SMTP ERROR: EHLO command failed: 550 "REJECTED - Bad HELO - Host impersonating [box304.bluehost.com]"
CLIENT -> SERVER: HELO box304.bluehost.com
SERVER -> CLIENT: 550 "REJECTED - Bad HELO - Host impersonating [box304.bluehost.com]"
SMTP ERROR: HELO command failed: 550 "REJECTED - Bad HELO - Host impersonating [box304.bluehost.com]"
CLIENT -> SERVER: QUIT
SERVER -> CLIENT: 221 box304.bluehost.com closing connection
SMTP connect() failed.

我可以看到交互式日志标识了源站点www.fydentry.com,但是通过cli(cron)执行的php脚本,只看到了盒子名称,并确定它不是有效源。

我是否可以在命令行中添加一个参数,以便脚本看起来是从站点地址运行的?或者我可以在PHP脚本中做些什么来模拟这个?或者这是bluehost方面的配置问题,我应该要求他们纠正?或者我在这里完全错过了什么,还有其他我应该做的事情吗?

目前我通过调用cron作业中的基本包装脚本来解决问题,然后执行此操作:

file_get_contents("http://www.fydentry.com/my-mailer-script.php");

这似乎足以欺骗脚本从网站运行的所有内容。但这似乎不是一个好的长期解决方案。

2 个答案:

答案 0 :(得分:1)

昨天我遇到了同样的问题。我现在只能想象人们遇到的所有问题。

无论如何,既然你已经围绕PHPMailer类构建了这个,请尝试在你的邮件对象上设置“Helo”属性。这对我有用。

从文档(http://phpmailer.worxware.com/?pg=properties):

  

$ Helo public设置消息的SMTP HELO(默认为$ Hostname)

希望这有帮助!

答案 1 :(得分:0)

这为我解决了这个问题:

$mail->Hostname = "yourhostname.com";
$mail->Helo = $mail->Hostname;