0

Web サイトを構築していて、その一部にメールを送信する必要があります (1 つはアカウント パスワード リセット リンク用、もう 1 つは一般的なユーザー管理者連絡用)。私は 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 が許可するはずの 1 日あたり 2,000 メッセージの制限を絶対に超えていません。

4

2 に答える 2

1

私の解決策: PearMailer から SwiftMailer に切り替えました。その中で、SSL オプションを false に設定してverify_peerverify_peer_nameます$transport->setStreamOptions。これで問題なくメールが送信されるようになりました。(これらのオプションを無効にしないと、明らかに GMail の SSL 証明書は新しいバージョンの PHP と互換性がありません。図を参照してください。)

于 2016-06-21T04:49:48.067 に答える
0

編集:

これがうまくいくかどうかはよくわかりません。試してみてください:

$params=array(
            "host"=>"smtp.gmail.com",
            "port"=>587,
            "auth"=>true,
            "username"=>$config["mailFrom"],
            "password"=>$config["mailPass"]
        );

これにより、SSL の代わりに TLS が使用されます。試してみる。

于 2016-06-21T03:54:20.987 に答える