You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHPMailer抛出Fatal error未定义常量致命错误如何解决

问题现象

项目中使用PHPMailer,在XAMPP环境下调用PHPMailer->send()方法触发邮件发送时抛出致命错误,报错信息如下:

Fatal error: Uncaught Error: Undefined constant "PHPMailer\PHPMailer\FILTER_FLAG_HOST_REQUIRED" in C:\xampp\htdocs\ecommerce\vendor\phpmailer\phpmailer\src\PHPMailer.php:3599 
Stack trace: 
#0 C:\xampp\htdocs\ecommerce\vendor\phpmailer\phpmailer\src\PHPMailer.php(3565): PHPMailer\PHPMailer\PHPMailer::isValidHost('localhost') 
#1 C:\xampp\htdocs\ecommerce\vendor\phpmailer\phpmailer\src\PHPMailer.php(2304): PHPMailer\PHPMailer\PHPMailer->serverHostname() 
#2 C:\xampp\htdocs\ecommerce\vendor\phpmailer\phpmailer\src\PHPMailer.php(1421): PHPMailer\PHPMailer\PHPMailer->createHeader() 
#3 C:\xampp\htdocs\ecommerce\vendor\phpmailer\phpmailer\src\PHPMailer.php(1316): PHPMailer\PHPMailer\PHPMailer->preSend() 
#4 C:\xampp\htdocs\ecommerce\register.php(105): PHPMailer\PHPMailer\PHPMailer->send() 
#5 {main} thrown in C:\xampp\htdocs\ecommerce\vendor\phpmailer\phpmailer\src\PHPMailer.php on line 3599
故障原因

核心原因是PHPMailer版本与当前PHP版本不兼容:
PHP从8.0版本开始正式移除了内置过滤常量FILTER_FLAG_HOST_REQUIRED,而6.5.0之前的PHPMailer版本在isValidHost方法中仍在调用该常量做主机名校验,常量不存在就会直接抛出致命错误。XAMPP默认安装的PHP版本通常在8.0以上,如果项目中引入的PHPMailer版本过旧就会触发该问题。

解决方案

按优先级推荐以下处理方式:

  • 升级PHPMailer到最新稳定版:如果是通过Composer管理依赖,直接在项目根目录执行命令composer update phpmailer/phpmailer即可完成升级,官方新版本已经完全适配PHP 8.0+,移除了对废弃常量的调用,是最稳妥的解决方式。
  • 临时手动修复(无法升级PHPMailer时使用):打开报错路径下的PHPMailer.php文件,定位到3599行附近,将代码中传入filter_var方法的FILTER_FLAG_HOST_REQUIRED参数删除即可,PHP 8.0+版本下URL校验默认就会要求主机名存在,不需要额外传该常量标识。
  • 不推荐方案:将XAMPP的PHP版本降级到7.4及以下,低版本PHP还保留了该常量,但低版本PHP已经停止安全更新,存在已知安全风险,非特殊情况不要使用。

内容的提问来源于stack exchange,提问作者okunade femi joel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 07:54:23