簡體   English   中英

PearMailer,PHP7和OpenSSL無法以未知錯誤連接到gmail

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM