thinkphp 6 不内置邮件功能,发送失败主因是配置、环境或平台策略问题;类找不到需清理手动文件并确认 autoload 引入;连接超时须检查云服务器端口与安全组;认证失败多因未用授权码或 username/from 不一致。

Class 'PHPMailer\PHPMailer\PHPMailer' not found 怎么办
这是 Composer 集成没走通的典型表现,不是没装,是加载被干扰了。
- 删干净所有手写的 PHPMailer 文件:比如
class.phpmailer.php、PHPMailerAutoload.php,尤其检查extend/或vendor/下的旧版残留 - 确认
public/index.php开头有require __DIR__.'/../vendor/autoload.php';(TP6 默认有,但宝塔子目录或 Docker 构建时容易被覆盖或注释掉) - 执行
composer dump-autoload -o强制刷新自动加载映射 - 检查
vendor/phpmailer/phpmailer/src/PHPMailer.php是否真实存在,路径不对也会报这个错
Connection timed out 或 SMTP connect() failed 怎么排查
这不是 PHPMailer 的锅,是网络或服务商限制挡住了连接请求。
- 云服务器(阿里云/腾讯云轻量)默认封禁 25 端口,必须用 465(ssl)或 587(tls),且安全组要放行 出站(outbound) 规则
- QQ 邮箱只认
ssl + 465,163/Gmail 多数要求tls + 587;填反了不会报明确错误,只会卡在 connect() - 国内服务器直连 Gmail/Outlook 容易 DNS 解析失败或被限流,优先换用腾讯企业邮箱(
smtp.exmail.qq.com)或网易邮箱大师(smtp.ym.163.com) - 临时关掉 ThinkPHP 日志和缓存:在
config/log.php设'level' => [],config/cache.php设'default' => 'null',排除框架层干扰
SMTP Error: Could not authenticate 怎么解决
90% 是授权码没开或填错,不是密码错了。
- QQ 邮箱:进「设置 → 账户 → POP3/IMAP/SMTP 服务」,开启后生成并复制授权码(不是登录密码)
- 163 邮箱:进「设置 → POP3/SMTP/IMAP」,开启 SMTP 服务,设置并记住客户端专用密码(即授权码)
-
config/mail.php中的username和from必须完全一致,例如都填admin@yourdomain.com,否则部分企业邮箱会拦截 - 确保
.env里MAIL_USERNAME和MAIL_PASSWORD已正确填写,并在config/mail.php中用env('MAIL_USERNAME')显式读取——TP6 不自动映射 .env 变量到邮件配置
中文乱码、HTML 模板不渲染怎么办
邮件客户端对前端支持极弱,CSS 外链、<style></style> 标签基本无效,必须内联+编码兜底。
- 模板用
$this->fetch('email/verify', ['code' => $code])渲染后赋给$mail->Body - 所有样式必须写在 HTML 标签的
style=""属性里,不要用 class 或外部 CSS - 务必设置:
$mail->CharSet = 'UTF-8'; $mail->Encoding = 'base64';,缺一不可 - 避免使用 Flex/Grid 布局,表格
<table> 仍是兼容性最好的方式 </table>
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











