【问题标题】:php mail function sometimes works, sometimes fails and tells me to upgrade/update TLS. Solution?php 邮件功能有时有效,有时失败并告诉我升级/更新 TLS。解决方案?
【发布时间】:2022-01-24 20:46:24
【问题描述】:

正如标题所说。这是我的功能:

<?php
  //---------------EMAIL PORTION--------------------
  error_reporting(E_ALL);
  ini_set('display_errors', 'On');
  set_error_handler("var_dump");

  $from_email = 'email2@website.com';
  $to = 'email@website.com';

  $subject = "XXXXXXXXXXX";
  
  $message = 
  '
  <html>
    <body>
      <div style="padding:10px 20px;">
        <h3>Hello Person, </h3>
        <img src="###########"/>
      </div>
    </body>
  </html>
  ';
  
  // Headers
  $headers = "MIME-Version: 1.0\r\n"; // Defining the MIME version
  $headers .= "Content-type: text/html\r\n";
  $headers .= "From: \"XXXXXXXXXXXXXX\" <".$from_email.">\r\n"; // Sender Email
  $headers .= "Reply-To: " . $from_email . "\r\n";
    
  $sentMailResult = mail($to,$subject,$message,$headers);

  if($sentMailResult) {
    echo "Email Sent Successfully: ", $sentMailResult;
  }
  else {
    die("Sorry but the email could not be sent, Please go back and try again!");
  }

有时它有效,但大多数时候无效。我将在浏览器的 php 页面上,我会刷新它,它会说电子邮件发送成功。然后我会刷新它,它会说失败。我正在为我的服务器使用 Xampp。当它失败时,我在服务器日志中得到以下信息:

sendmail: Error during delivery: TLS 1.0 and 1.1 are not supported. Please upgrade/update your client to support TLS 1.2. Visit https://aka.ms/smtp_auth_tls. [prod.outlook.com]

然后当它工作时,我的邮件日志在电子邮件信息之后有这个:

250 2.0.0 OK
QUIT

我已经做了所有我能想到的事情,而且我很困惑。我尝试将此行添加到我的 httpd-ssl.conf 文件中:SSLProtocol all +TLSv1.2 但它似乎没有帮助。我不明白为什么它有时可以工作,但不能一直工作。我的 php.ini 邮件功能应该正确设置,它链接到一个 sendmail 文件夹,并且那里的 ini 也应该正确设置。 任何帮助将不胜感激。

更新:

Apache 版本:2.4.51

PHP 版本:8.0.13

OpenSSL 版本:1.1.1l

【问题讨论】:

  • 尝试SSLProtocol all -SSLv2 -SSLv3 -TLSv1禁用旧版本
  • SSLProtocol 设置与此处无关。这是关于(Apache)Web 服务器接受的连接。您遇到的问题是源自 PHP 脚本的连接。看起来您的 PHP TLS 堆栈不支持 TLS 1.2,这可能与非常(非常)旧的系统有关。 TLS 1.2 支持于 2012 年添加到 OpenSSL(PHP 使用的底层堆栈)中。请更新您的系统,它可能还有其他问题。
  • @SteffenUllrich 我使用的是 Windows 10 Pro PC,并且所有 Windows 更新都已应用。 PC 可能已经使用了 10 年左右,但不确定这是否有任何影响。 Xampp 安装是全新的,具有 Apache 版本 2.4.51 和 PHP 版本 8.0.13。当您说“系统”时,您究竟是什么意思?
  • @aynber 我将它添加到 httpd-ssl.conf 文件中,但在重新启动 Apache 后仍然出现同样的错误:Error during delivery: TLS 1.0 and 1.1 are not supported
  • @justdoingmyjob:在这种情况下,PHP 使用的可能是旧的 openssl 版本。检查phpinfo() 安装了哪个版本。必须至少为 1.0.1 才能支持 TLS 1.2。

标签: php email ssl xampp


【解决方案1】:

我在这方面花了很多时间,并得到了比我聪明得多的人的帮助,但它从来没有奏效。 PHPMailer 是要走的路。设置它,第一次尝试就成功了,此后一直有效。您甚至不必处理任何 ini 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 2021-05-06
    • 1970-01-01
    • 2019-07-06
    相关资源
    最近更新 更多