使用PHPMailer对接Gmail SMTP发信出现FatalError错误如何解决
错误原因
该报错是PHPMailer版本与当前PHP版本不兼容导致的:FILTER_FLAG_HOST_REQUIRED是PHP过滤器扩展的内置常量,PHP 8.0及以上版本已经正式移除该常量,而你当前使用的PHPMailer是适配PHP 7.x的旧版本,代码中仍在调用这个已废弃的常量,因此触发致命错误。
解决方案
方案1(推荐):升级PHPMailer到最新稳定版
最新版本的PHPMailer已经完成PHP 8+的适配,移除了对废弃常量的调用。直接替换本地phpmailer目录下的PHPMailer.php、SMTP.php、Exception.php三个核心文件为最新版本对应文件即可解决问题。
方案2(临时兼容):手动定义缺失常量
如果暂时无法升级PHPMailer,可以在PHPMailer.php文件的开头添加如下代码,手动定义该常量:
if (!defined('FILTER_FLAG_HOST_REQUIRED')) { define('FILTER_FLAG_HOST_REQUIRED', 2); }
该常量的原生默认值就是2,手动定义后可以同时兼容新旧PHP版本,临时解决报错。
其他潜在问题修复
解决上述报错后,你还需要调整代码中的两处问题,避免后续出现其他发信故障:
- Gmail SMTP不支持直接使用账号密码登录,需要先开启Google账号的两步验证,生成应用专用密码,将生成的16位专用密码填入
$mail->Password配置项。 - 你实例化PHPMailer时传入
TRUE开启了异常抛出,但未对send()方法做异常捕获,建议调整发信逻辑为:
try { $mail->send(); $success_msg = "邮件发送成功。"; } catch (Exception $e) { $error_msg = "邮件发送失败:" . $mail->ErrorInfo; }
内容的提问来源于stack exchange,提问作者Flamenco
相关产品推荐
相关产品推荐

