【问题标题】:How to force TLS 1.2 usage for PhpMailer 5.2如何强制 PhpMailer 5.2 使用 TLS 1.2
【发布时间】:2021-12-20 16:47:40
【问题描述】:

最近我使用的第 3 方电子邮件服务提供商进行了更改。他们禁用了对 TLS 1.0 和 TLS 1.1 的支持。

我为仍然使用 php 5.3 和 phpmailer 5.2 的古老系统提供支持。

我的测试表明 TLS 1.2 已启用。

但是,禁用 TLS 1.0 和 1.1 后 PHPMailer 代码无法连接到电子邮件服务器

另外,请注意,我不是全职 php 专家。

有没有办法让 PHPMailer 5.2 使用 tls 1.2?

【问题讨论】:

    标签: phpmailer


    【解决方案1】:

    在文件 class.smtp.php 中查找常量 STREAM_CRYPTO_METHOD_TLS_CLIENT 并将其更新为 STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT 像这样:

    public function startTLS()
    {
        if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) {
            return false;
        }
        // Begin encrypted connection
        if (!stream_socket_enable_crypto(
            $this->smtp_conn,
            true,
            STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
        )) {
            return false;
        }
        return true;
    }
    

    您应该在服务器上的一个小 php 脚本中运行 phpinfo(),以确保 TLS 1.2 首先可用。

    【讨论】:

    • 我已经在 PHP 5.6 上,但它仍然无法正常工作。我想我需要在 Windows 服务器中设置一些默认值,但这更容易。感谢您的回答...
    • 这对我的旧版应用非常有效,非常感谢。
    【解决方案2】:

    这不取决于 PHPMailer,它取决于您用来运行它的 PHP 版本,因此解决方案是更新您的 PHP 版本。与 TLS 相关的主要变化主要发生在 PHP 5.6 中,因此如果您真的坚持使用这个旧版本,升级到该版本将是一个很好的中间点。

    【讨论】:

    • 这是我听过的最好的解释。我会尽快接受你的回答。谢谢!
    • Office365 停止支持 v1.0 和 v1.1 时,从 5.4 升级到 5.6 解决了我的问题
    猜你喜欢
    • 2018-03-08
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2015-12-11
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多