【问题标题】:phpmailer sometimes fails sending TLSphpmailer 有时无法发送 TLS
【发布时间】:2021-12-03 12:53:45
【问题描述】:

有时 phpmailer 无法通过带有 TLS 的 SMTP 发送。我已经使用相同的 smtp 服务器 (smtp.office365.com) 和凭据设置了测试。有时它会失败,并显示“SMTP 通知:检查是否连接时捕获 EOF”。我尝试使用更长的超时时间进行更新,还尝试使用

更改选项
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
)

但这也无济于事。有时它发送没有问题,有时它没有。 服务器正在运行 php 5.5,我已经尝试使用最新的 phpmailer 版本,但这没有帮助。

当我在具有较新 php 版本的另一台服务器上测试相同的代码时,它总是可以工作,但是如果这是问题,可以做些什么来使它在 php 5.5 上工作。

【问题讨论】:

    标签: ssl phpmailer


    【解决方案1】:

    在您的代码中设置:

    $mail->SMTPDebug = 1; // values are 0-4
    

    看看到底是什么错误。 我遇到了同样的问题,有时它起作用,有时它没有,我不得不更新文件:class.smtp.php 函数 startTLS() 以使用 STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT

    【讨论】:

      【解决方案2】:

      很可能您运行 PHP 5.5 的服务器(真的真的旧的、过时的,并且可能不安全)也已经过时了CA 证书捆绑包。当您连接到 Outlook 时,您可能会连接到他们的许多服务器之一,这些服务器可能具有由不同 CA 签名的不同年龄的证书,并且您的客户端可能无法使用您过时的 CA 包验证它们,因此解决方案应该更新您的 CA 证书。

      话虽如此,这应该在很大程度上通过禁用验证来抑制,正如您已经尝试过的那样(尽管这通常是您应该避免的),但是,这只会禁用 TLS 的一个方面,并且您可能正在连接到不支持您的客户端可能能够处理的旧 TLS 协议的服务器。

      最终,最好的解决方案是更新您的 PHP 版本。

      【讨论】:

      • 是的,我知道最好更新PHP,但这意味着其他问题,所以现在我希望找到5.5的解决方案。我试过运行“yum install ca-certificates”,但它写道它已经是最新的。还有其他想法如何更新 CA 证书以使其正常工作吗?
      • 如果禁用验证不起作用,那么更新 CA 证书将无济于事,更有可能是过时的 openssl PHP 扩展。
      • FWIW,在 5.6 中有重大的 openssl 更新,所以如果你不能一路升级到 8,即使这也是一个很大的改进;我不认为在 5.5 和 5.6 之间会有太多突破。
      • @hh_s 我在运行 php 5.5 的服务器上遇到了完全相同的问题。你找到解决办法了吗?
      猜你喜欢
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2019-01-19
      • 2023-03-20
      • 2017-12-05
      • 2012-05-26
      • 2014-04-28
      相关资源
      最近更新 更多