[英]PearMailer, PHP7, and OpenSSL unable to connect to gmail with unknown error
我正在建立一個網站,其中一部分需要發送電子郵件(一個用於帳戶密碼重置鏈接,另一個用於一般用戶-管理員聯系)。 我一直在使用PearMailer通過GMail帳戶發送電子郵件,現在一切正常……直到現在。 由於某些原因,它停止發送電子郵件,並且給了我這個非常無用的錯誤:
[message] => Failed to connect to ssl://smtp.gmail.com:465 [SMTP: Failed to connect socket: fsockopen(): unable to connect to ssl://smtp.gmail.com:465 (Unknown error) (code: -1, response: )
已啟用openSSL,並且我正在使用的所有憑據都是正確的(我可以使用它們手動登錄該GMail帳戶)。
這是我正在使用的代碼,其中$ config保存帳戶憑據,而$ _POST數據來自“聯系我們”表單(忽略我在開發過程中缺少衛生檢查):
require_once "Mail.php";
$params=array(
"host"=>"ssl://smtp.gmail.com",
"port"=>465,
"auth"=>true,
"username"=>$config["mailFrom"],
"password"=>$config["mailPass"]
);
$headers=array(
"To"=>$config["mailFrom"],
"From"=>$_POST['user']." <".$_POST["reply-to"].">",
"Content-type"=>"text/html",
"Subject"=>$_POST['subject']
);
$mail=Mail::factory("smtp", $params);
$sent=$mail->send($config["mailFrom"], $headers, htmlentities($_POST['body']));
它應該從自己的電子郵件發送給我的GMail帳戶,但相反,它卻給了我上面提到的錯誤。 在更改了往返地址后,無論如何,它仍然給我該錯誤。 尤其奇怪,因為我一直使用幾乎相同的代碼來發送密碼重置鏈接,並且直到現在仍能正常工作。 當然,它現在也無法連接。
我找不到任何消息說Google更改了設置,而且我絕對沒有超過smtp.gmail.com應該允許的每天2,000條消息的限制,那么這是怎么回事?
我的解決方案:從PearMailer切換到SwiftMailer,在那,我使用$transport->setStreamOptions
將SSL選項verify_peer
和verify_peer_name
為false。 現在似乎可以發送郵件了。 (在未禁用這些選項的情況下,GMail的SSL證書顯然與較新版本的PHP不兼容。請參見圖。)
編輯:
我不確定這是否適合您,請嘗試:
$params=array(
"host"=>"smtp.gmail.com",
"port"=>587,
"auth"=>true,
"username"=>$config["mailFrom"],
"password"=>$config["mailPass"]
);
這將使用TLS而不是SSL。 試試看。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.