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