PHP技术问题:如何解决使用PHPMailer通过SMTP发邮件时出现的「Class PHPMailer not found」未捕获致命错误
看起来你遇到的是PHPMailer类无法被PHP识别的问题,这个错误通常和命名空间使用或者文件加载路径/顺序有关,我来帮你一步步排查解决:
1. 检查命名空间的正确引用
你的config.php里已经通过use语句导入了PHPMailer的命名空间,但如果fun.php的代码没有在这个命名空间的作用域下(比如直接访问fun.php而不是通过index.php),就会找不到类。
解决方法:
在fun.php的最顶部添加命名空间声明:
<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception;
或者直接使用完全限定类名实例化:
$mail = new \PHPMailer\PHPMailer\PHPMailer(true);
2. 验证PHPMailer文件的加载路径
确认你的项目目录结构里,vendor/PHPMailer/src/确实存在,并且Exception.php、PHPMailer.php、SMTP.php这三个文件都在这个目录下。如果是手动下载的PHPMailer,可能你把文件放在了其他位置,需要调整config.php里的require路径。
比如如果PHPMailer的src目录直接在项目根目录下,那路径应该改成:
require 'src/Exception.php'; require 'src/PHPMailer.php'; require 'src/SMTP.php';
3. 确保文件加载顺序正确
目前你的config.php最后一行是require 'fun.php';,而index.php引入config.php,这个顺序是对的,但要避免直接单独调用fun.php——如果有人直接访问fun.php,config.php里的PHPMailer文件还没加载,就会报错。
建议在fun.php的开头先检查是否已经加载了PHPMailer,或者直接在fun.php里引入必要的文件(不过更推荐通过config.php统一管理)。
4. 推荐使用Composer自动加载(更可靠)
如果你是用Composer安装的PHPMailer,强烈建议使用Composer的自动加载功能,替代手动引入单个文件。修改config.php:
<?php require 'vendor/autoload.php'; // 只需要这一行,替代三个require use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require 'fun.php';
这样Composer会自动处理所有类的加载,避免路径和命名空间的问题。
5. 检查文件名大小写(针对跨平台场景)
虽然Windows系统不区分文件名大小写,但如果之后要部署到Linux服务器,文件名大小写不匹配会导致加载失败。确保你的PHPMailer.php、Exception.php这些文件名和代码里引用的类名大小写一致(比如不要写成phpmailer.php)。
按照上面的步骤排查,应该能解决类找不到的错误。
内容的提问来源于stack exchange,提问作者nxt

