无法使用php-pear 5.6发送电子邮件

时间:2014-09-17 10:47:49

标签: php

我有一个发送电子邮件的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解决了这个问题。

干杯!

2 个答案:

答案 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}}