[英]cant send email with php-pear 5.6
我有一封电子邮件的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可以解决此问题。
干杯!
我有同样的问题,正在寻找答案。 这个问题有点老了,但我会给别人一些解释。 问题在于,扩展PEAR Mail的PEAR SMTP类尚未针对php 5.6更新。 从php 5.6开始,您将无法使用PEAR Mail进行“不干净的” TLS连接。 它与OpenSSL更改有关。 它适用于某些SMTP,例如端口465上的Gmail,但没有其他地方。 您需要使用'auth'=> false或切换到PHP Mailer
您可以通过在Socket.php的第208行中包含自签名证书来对这些选项进行硬编码
else{ // if $fp does exist
stream_context_set_option($fp, 'ssl', 'verify_peer', false);
stream_context_set_option($fp, 'ssl', 'allow_self_signed', true);
stream_context_set_option($fp, 'ssl', 'verify_peer_name', false);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.