Composer install phpmailer 失败主因是 PHP 版本过低(v6.9+需≥7.2)、镜像源不同步或权限问题;require 后 Class not found 是因未引入 vendor/autoload.php 或命名空间错误(v6.x 须 use PHPMailer\PHPMailer\PHPMailer);SMTP 连接失败多因 TLS/SSL 设置与端口不匹配,应设 SMTPDebug=2 查错,且必须检查 $mail->ErrorInfo 获取真实原因。

composer install phpmailer 会失败的常见原因
直接运行 composer require phpmailer/phpmailer 失败,大概率不是命令写错,而是环境或权限问题。最常踩的坑是 PHP 版本不匹配——phpmailer/phpmailer v6.9+ 要求 PHP >= 7.2,而很多旧服务器默认用 PHP 5.6 或 7.0,composer install 会静默跳过或报 Your requirements could not be resolved。
- 先确认 PHP 版本:
php -v,再查对应版本兼容表(v6.x 不支持 PHP 5.x) - 如果用的是共享主机且无法升级 PHP,只能退到
phpmailer/phpmailer:5.2.28(但注意:该版本已停止维护,无安全更新) - 某些国内环境因 Composer 镜像源未同步新版包,可临时切回官方源:
composer config -g repo.packagist composer https://packagist.org
require 后为什么 new PHPMailer() 还报 Class not found
Composer 安装成功 ≠ 自动加载生效。核心问题是没引入 autoload 文件,或者用了错误的命名空间。
- 确保在使用前已包含:
require 'vendor/autoload.php';(路径必须准确,不能漏掉vendor/) - v6.x 默认使用命名空间:
use PHPMailer\PHPMailer\PHPMailer;,不是new phpmailer()或new PHPMailer\PHPMailer() - 如果项目用了自定义 autoloader 或框架(如 Laravel),别手动 require,应走框架的自动加载机制;否则可能冲突导致类找不到
SMTP 配置连不上时怎么快速定位
发邮件卡住、超时或报 SMTP Error: Could not authenticate,多数不是密码错了,而是协议、端口或 TLS 设置不匹配。
- Gmail / Outlook 等主流服务强制要求 TLS 或 SSL:
– Gmail SMTP:smtp.gmail.com+ 端口587+$mail->isSMTP(); $mail->SMTPSecure = 'tls';
– 不要用端口 465 + tls,那是 ssl 模式,得设SMTPSecure = 'ssl'并改端口为465 - 开启 SMTP 调试看真实错误:
$mail->SMTPDebug = 2;(输出到屏幕)或3(含响应头),比猜快得多 - 某些企业邮箱禁用第三方 SMTP,需在后台单独开启「IMAP/SMTP 访问」并生成专用 App Password,不能直接用登录密码
send() 返回 false 却没报错信息?
$mail->send() 返回 false 是常态,不代表代码写错了,只是说明发送链路中某一步失败了。关键是要拿到具体原因。
立即学习“PHP免费学习笔记(深入)”;
- 永远不要只判断返回值:
if (!$mail->send()) echo $mail->ErrorInfo;——ErrorInfo是唯一可靠的错误来源 - 常见假阴性:收件人邮箱格式合法但不存在(如
xxx@xxx.xxx),部分 SMTP 服务器不立即拒信,而是延迟退回,send()仍返回 true - 如果
ErrorInfo是空字符串,大概率是 PHP 的mail()函数被禁用(disable_functions=mail),此时必须走 SMTP,不能依赖本地 sendmail
ErrorInfo。其他都是枝节。











