如何强制 PhpMailer 5.2 使用 TLS 1.2

How to force TLS 1.2 usage for PhpMailer 5.2

最近我使用的第 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 无关,它取决于您使用的 PHP 版本运行,因此解决方案是更新您的 PHP 版本。与 TLS 相关的主要变化主要在 PHP 5.6 中,因此如果您真的坚持使用这个旧版本,升级到该版本将是一个很好的中间点。

在文件 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;
}

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