升级PHP会导致SMTP授权失败
我将centos服务器上的PHP升级到5.6.25 升级完成后,一切正常,但几个小时后,我接到客户的电话,说发送的邮件没有送达收件人 然后我发现发送的邮件是从webmail发送的,但是使用我们的PHP代码发送的邮件没有发送 在检查PHP代码的结果后,我发现了错误 身份验证失败[SMTP:STARTTLS失败(代码:220,响应:TLS继续)]升级PHP会导致SMTP授权失败,php,email,smtp,Php,Email,Smtp,我将centos服务器上的PHP升级到5.6.25 升级完成后,一切正常,但几个小时后,我接到客户的电话,说发送的邮件没有送达收件人 然后我发现发送的邮件是从webmail发送的,但是使用我们的PHP代码发送的邮件没有发送 在检查PHP代码的结果后,我发现了错误 身份验证失败[SMTP:STARTTLS失败(代码:220,响应:TLS继续)] 请帮我解决这个问题。我找到了这个问题的解决方案 只需转到usr/local/lib/php/Net路径可能因操作系统而异,但最后它是php目录中的Net目
请帮我解决这个问题。我找到了这个问题的解决方案 只需转到usr/local/lib/php/Net路径可能因操作系统而异,但最后它是php目录中的Net目录 在此目录中查找文件SMTP.php。 在这个文件中找到函数auth(--parameter list--),在这个文件中,他首先使用if语句
if ($tls && version_compare(PHP_VERSION, '5.1.0', '>=')
&& extension_loaded('openssl') && isset($this->esmtp['STARTTLS'])
&& strncasecmp($this->host, 'ssl://', 6) !== 0
)
只需做如下更改
if ($tls && version_compare(PHP_VERSION, '6.1.0', '>=')
&& extension_loaded('openssl') && isset($this->esmtp['STARTTLS'])
&& strncasecmp($this->host, 'ssl://', 6) !== 0
)
由于我已经更新了系统,它现在得到以下条件为真,它正在检查openssl和STARTTLS,系统在此阶段失败
version_compare(PHP_VERSION, '5.1.0', '>=')
所以,只需将您的版本更改为必须大于升级版本的其他版本,这样第一个条件将再次为false,系统将不会进一步检查,并且将在不使用TLS的情况下进行连接 我找到了这个问题的解决方案 只需转到usr/local/lib/php/Net路径可能因操作系统而异,但最后它是php目录中的Net目录 在此目录中查找文件SMTP.php。 在这个文件中找到函数auth(--parameter list--),在这个文件中,他首先使用if语句
if ($tls && version_compare(PHP_VERSION, '5.1.0', '>=')
&& extension_loaded('openssl') && isset($this->esmtp['STARTTLS'])
&& strncasecmp($this->host, 'ssl://', 6) !== 0
)
只需做如下更改
if ($tls && version_compare(PHP_VERSION, '6.1.0', '>=')
&& extension_loaded('openssl') && isset($this->esmtp['STARTTLS'])
&& strncasecmp($this->host, 'ssl://', 6) !== 0
)
由于我已经更新了系统,它现在得到以下条件为真,它正在检查openssl和STARTTLS,系统在此阶段失败
version_compare(PHP_VERSION, '5.1.0', '>=')
所以,只需将您的版本更改为必须大于升级版本的其他版本,这样第一个条件将再次为false,系统将不会进一步检查,并且将在不使用TLS的情况下进行连接 我也遇到了同样的问题,并偶然发现了解决方案,这些问题显然与PHP5.6中的更改有关(我对这些都不满意)
Murray我也遇到了同样的问题,并偶然发现了解决方案,这些问题显然与PHP5.6中的更改有关(我对此并不满意)