PHP本地环境(Windows)因IONOS强制TLS1.2无法发送邮件求助
问题描述
PHP 8.0.13在Windows 11本地通过sendmail运行夜间脚本,向IONOS邮箱账号发送邮件。此前功能正常,自IONOS强制要求TLS 1.2协议后,邮件发送失败,但该账号在Outlook中可正常发信。
已升级sendmail至支持TLS 1.2的版本,修改sendmail.ini中smtp_ssl=tls,且Windows系统已启用TLS 1.2,问题仍未解决。
错误信息
无法访问您的邮箱,请在邮件程序中激活TLS。
Debug日志翻译
23/05/23 00:25:37 ** --- 邮件内容开始 --- 23/05/23 00:25:37 ** 收件人: mail@ity.me.uk 23/05/23 00:25:37 ** 主题: Works! 23/05/23 00:25:37 ** X-PHP-Originating-Script: 0:TESTMAIL.php 23/05/23 00:25:37 ** 23/05/23 00:25:37 ** 这是从您的本地主机发送的测试邮件,发送成功! 23/05/23 00:25:37 ** --- 邮件内容结束 --- 23/05/23 00:25:37 ** 正在通过POP3服务器认证 23/05/23 00:25:37 ** 已连接。 23/05/23 00:25:37 << +OK POP服务器就绪 H mieue014 1MD6TB-1ps84e0Se1-0093l1<EOL> 23/05/23 00:25:37 >> CAPA<EOL> 23/05/23 00:25:37 << +OK 支持的功能列表如下<EOL> 23/05/23 00:25:37 << TOP<EOL>UIDL<EOL>STLS<EOL>SASL<EOL>IMPLEMENTATION trinity<EOL>.<EOL> 23/05/23 00:25:37 >> USER *@ray-crowther.me.uk<EOL> 23/05/23 00:25:37 << -ERR 无法访问您的邮箱,请在邮件程序中激活TLS。<EOL> 23/05/23 00:25:37 ** 已断开连接。 23/05/23 00:25:37 ** 已断开连接。 23/05/23 00:25:37 ** 已断开连接。 23/05/23 00:25:37 ** 无法访问您的邮箱,请在邮件程序中激活TLS。<EOL>
问题分析
从日志可以看出,sendmail在进行POP3认证时,未先启用TLS加密就直接发送了USER命令。虽然配置了SMTP的TLS,但sendmail采用了「POP before SMTP」的认证方式,必须先通过加密的POP3连接完成认证,才能进行SMTP投递。而IONOS现在强制要求POP3连接也使用TLS,所以未加密的POP3请求被拒绝。
解决方案
方案1:配置POP3使用TLS加密
修改sendmail.ini的POP3相关配置:
- 确认
pop3_server为IONOS官方POP3服务器(例如pop.ionos.co.uk,根据域名区域调整) - 添加或修改以下配置项:
若sendmail支持STLS(普通连接后升级加密),也可设置:pop3_ssl=tls pop3_port=995 # IONOS POP3 TLS端口通常为995pop3_stls=yes pop3_port=110 - 保存配置后,重启Web服务(如Apache/Nginx)和sendmail进程,重新测试。
方案2:改用SMTP直接认证(推荐)
相比POP before SMTP,SMTP直接认证更符合现代邮箱服务商要求,修改sendmail.ini的SMTP配置:
- 设置SMTP服务器和端口:
smtp_server=smtp.ionos.co.uk smtp_port=587 # TLS端口,对应smtp_ssl=tls;若用465端口则设置smtp_ssl=ssl smtp_ssl=tls - 启用SMTP认证并填写账号信息:
smtp_auth=yes auth_username=你的IONOS邮箱账号(如xxx@ray-crowther.me.uk) auth_password=你的邮箱密码 - 注释或删除POP3相关配置项,重启服务后测试。
内容的提问来源于stack exchange,提问作者Crow
相关产品推荐
相关产品推荐

