繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM