如何强制 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 可用。
最近我使用的第 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 可用。