ThinkPHP 6 需通过 Composer 安装 topthink/think-mail 扩展,配置 config/mail.php 的 type、host、username、password、secure 五项(大小写敏感),并确保 SMTP 授权码、端口与加密方式匹配服务商要求。

ThinkPHP 6 默认不内置邮件发送功能,得靠 topthink/think-mail 扩展;直接改配置文件就能用,但参数名和底层驱动行为容易配错导致静默失败。
怎么安装并启用 think-mail 扩展
别手动下载 ZIP 或复制类库——Composer 是唯一可靠方式。执行命令后,框架会自动注册服务提供者:
composer require topthink/think-mail
- ThinkPHP 6.1+ 无需额外绑定,扩展包自带
MailService服务自动注册 - 如果用了多应用模式,确保在对应应用的
config/mail.php中配置,而非根目录 config - 若提示
Class 'think\mail\Mailer' not found,说明安装失败或 Composer 自动加载未更新,运行composer dump-autoload
SMTP 配置项必须填对的五个关键字段
配置写在 config/mail.php 里,以下字段名大小写敏感、缺一不可,且不能嵌套错层级:
-
'type' => 'smtp':必须是小写字符串,不是SMTP或Smtp -
'host' => 'smtp.qq.com':QQ 邮箱用这个,163 用smtp.163.com,Gmail 用smtp.gmail.com -
'username' => 'xxx@qq.com':必须是完整邮箱地址,不是昵称或 ID -
'password' => 'xxxxxx':不是登录密码,而是邮箱「SMTP 授权码」(QQ/163 后台开启 SMTP 时生成的 16 位字符串) -
'secure' => 'ssl':QQ 和 163 必须填'ssl';Gmail 填'tls';不填或填错会导致连接超时无报错
发邮件时常见的静默失败原因
调用 Mailer::instance()->to('xxx@xx.com')->send() 返回 true 但收不到信?大概率是这些没检查:
立即学习“PHP免费学习笔记(深入)”;
- 防火墙或云服务器安全组拦截了 465(SSL)或 587(TLS)端口,本地测试通不代表线上通
- QQ/163 邮箱未在网页端开启「POP3/SMTP 服务」,仅开通 IMAP 不行
-
'from' => ['xxx@qq.com' => 'MyApp']中的邮箱必须和username一致,否则腾讯系邮箱直接拒发 - 使用
phpinfo()确认 OpenSSL 已启用,否则stream_socket_enable_crypto()会失败且不抛异常
最常被忽略的是授权码和 secure 的组合:QQ 邮箱必须用 ssl + 465,填成 tls + 587 就连不上;而 Gmail 反过来,tls + 587 是标准,用 ssl + 465 可能被拒绝。端口号和加密方式得严格对应服务商文档,不能凭经验猜。



















