簡體   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