PHP使用PHPMailer通过SMTPS发邮件失败(Windows 11服务器异常)
SMTPS邮件发送在特定Windows 11服务器上失败的问题求助
我正尝试修改网站邮件系统,使其完全通过标准SMTPS发送邮件,使用的最简PHP脚本如下:
<?php require "vendor/phpmailer/phpmailer/PHPMailerAutoload.php"; try { $mail = new PHPMailer(); $mail->SMTPDebug = SMTP::DEBUG_CONNECTION; $mail->Mailer = 'smtp'; $mail->Host = 'mydomain.com'; $mail->SMTPAuth = true; $mail->Username = 'test@mydomain.com'; $mail->Password = 'my-password'; $mail->SMTPSecure = 'ssl'; $mail->From = 'test@mydomain.com'; $mail->FromName = 'TEST'; $mail->ConfirmReadingTo = 'test@mydomain.com'; $mail->Port = 465; $mail->Timeout = 30; $mail->IsHTML(false); $mail->CharSet = 'UTF-8'; $mail->addAddress('me@mydomain.com'); $mail->Subject = 'TEST'; $mail->Body = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; $sent = $mail->Send(); echo $sent ? "SENT" : "NOT SENT"; } catch (Exception $e) { echo "ERROR"; }
该脚本在测试过的所有机器及任意邮箱账号上均可正常运行,但在某台Windows 11服务器上运行时抛出如下错误:
2023-05-12 04:26:37 Connection: opening to ssl://mydomain.com:465, timeout=30, options=array () 2023-05-12 04:26:38 Connection failed. Error #2: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:error:140943FC:SSL routines:ssl3_read_bytes:sslv3 alert bad record mac [E:\www\APP\vendor\phpmailer\phpmailer\class.smtp.php line 298] 2023-05-12 04:26:38 Connection failed. Error #2: stream_socket_client(): Failed to enable crypto [E:\www\APP\vendor\phpmailer\phpmailer\class.smtp.php line 298] 2023-05-12 04:26:38 Connection failed. Error #2: stream_socket_client(): unable to connect to ssl://mydomain.com:465 (Unknown error) [E:\www\APP\vendor\phpmailer\phpmailer\class.smtp.php line 298] 2023-05-12 04:26:38 SMTP ERROR: Failed to connect to server: (0) SMTP connect() failed. NOT SENT
经多日排查(累计耗时超20小时),确定问题与该Windows 11服务器直接相关,与PHP及SSL库无关。已完成以下测试:
- 使用市面多种库编写最简脚本,均出现相同错误;
- 在多台Windows 10、Windows 11、Linux及Mac机器上测试,仅该Windows 11服务器异常;
- 检查Windows SSL和TLS选项,与DEV及PROD机器完全一致;
- 尝试Telnet连接,无反馈;
- 命令行运行脚本,结果相同;
- 使用自有服务器邮箱账号发送,问题依旧;
- 强制SMTP连接使用SSL2、SSL3、TLS1.0-TLS1.3,均报错;
- 关闭杀毒软件,结果不变。
因所用PHPMailer版本仅支持网站的PHP 7.1,属于旧版本,官方拒绝受理工单,现寻求技术帮助。
内容的提问来源于stack exchange,提问作者Roberto Santana
相关产品推荐
相关产品推荐

