如何强制 PhpMailer 5.2 使用 TLS 1.2

Tim*_*oat 10 phpmailer

最近我使用的第三方电子邮件服务提供商发生了变化。他们禁用了对 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?

Nic*_*ine 28

在文件 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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 这对 PHP 5.6 有用,我修复的电子邮件帐户是 godaddy 之一 (3认同)

Syn*_*hro 8

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

  • 这是我听过的最好的解释。只要允许,我会立即接受您的答复。谢谢! (2认同)