我有一个发送电子邮件的php脚本。在最近更新到php和php-pear到5.6后,它不再有效,我收到了身份验证错误。
$from = "no-reply@mydomain.net";
$port = "587";
$to=$d_uname;
$host = "smtp.sendgrid.net";
$username = "username";
$password = "password";
$headers = array ('From' => $d_replyto,
'To' => $to,
'Subject' => $d_subject,
'MIME-Version' => "1.0",
'Content-type' => "text/plain; charset=utf-8",
);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
#Email it
if (PEAR::isError($smtp)) {
error_log("<p>" . $smtp->getMessage() . "</p>");
}
$mail = $smtp->send($to, $headers, $d_message);
尝试以这种方式发送电子邮件时,我收到以下错误:
authentication failure [SMTP: STARTTLS failed (code: 220, response: Begin TLS negotiation now)]
任何想法在这里有什么问题?降级PHP和PHP-pear解决了这个问题。
干杯!
答案 0 :(得分:2)
我有同样的问题,正在寻找答案。这个问题有点旧,但我会为别人留下一些解释。问题是扩展PEAR Mail的PEAR SMTP类尚未针对php 5.6进行更新。从php 5.6开始,您将无法使用PEAR Mail进行“不干净”的TLS连接。它与OpenSSL更改有关。它适用于某些SMTP,例如端口465上的Gmail,但不是其他地方。您需要使用'auth'=&gt; false 或切换到PHP Mailer
答案 1 :(得分:0)
您可以通过将自签名证书包含在Socket.php的第208行来硬编码允许自签名证书所需的选项
{{1}}