laravel 10 邮件配置以 .env 为核心,需设 mail_mailer=smtp 并执行 php artisan config:clear;gmail 需用应用专用密码、匹配端口与加密方式(587+tls/465+ssl),且必须通过 mailable 类发送,错误优先查 storage/logs/laravel.log。

Laravel 10 的邮件配置核心在 .env,不是 config/mail.php —— 后者只是读取环境变量的模板,改它不生效。关键一步是设对 MAIL_MAILER=smtp 并清缓存,否则所有调试都白费。
第一步:正确填写 .env 邮件参数
打开项目根目录下的 .env 文件,按 SMTP 方式填入以下字段(以 Gmail 为例,其他服务商类推):
-
MAIL_MAILER=smtp(Laravel 10 必须用这个,
MAIL_DRIVER已废弃) -
MAIL_HOST=smtp.gmail.com(注意不是
gmail.com;QQ 邮箱填smtp.qq.com;163 填smtp.163.com) -
MAIL_PORT=587(对应 TLS 加密;若失败可试
465+MAIL_ENCRYPTION=ssl) - MAIL_USERNAME=your@gmail.com(Gmail 必须开启两步验证,并生成「应用专用密码」填入下一项)
- MAIL_PASSWORD=abcd efgh ijkl mnop(16 位空格分隔字符串,不是登录密码)
- MAIL_ENCRYPTION=tls(与端口匹配:587 → tls,465 → ssl)
-
MAIL_FROM_ADDRESS=your@gmail.com(发件人邮箱,必须和
MAIL_USERNAME一致) -
MAIL_FROM_NAME="${APP_NAME}"(可自定义,如
"MyApp")
第二步:确认配置已加载并清除缓存
改完 .env 后,Laravel 不会自动重读——必须手动清缓存:
- 运行
php artisan config:clear - 验证是否生效:执行
php artisan tinker,然后输入env('MAIL_MAILER'),应返回"smtp" - 如果返回
null,说明.env没被正确读取(检查文件权限、是否被 Git 忽略但实际缺失等)
第三步:发送测试邮件(别跳过 Mailable 类)
Laravel 10 不允许直接用 Mail::to()->send() 写内联内容。必须通过 Mailable 类:
- 生成类:
php artisan make:mail TestEmail - 编辑
app/Mail/TestEmail.php,确保build()方法里有return $this->view(...)或->text(...) - 调用发送:
Mail::to('test@example.com')->send(new TestEmail()); - 开发阶段建议先设
MAIL_MAILER=log,邮件内容会完整写进storage/logs/laravel.log,安全又直观
第四步:查错看日志,不是看浏览器白屏
发不出?错误几乎都藏在日志里:
- 打开
storage/logs/laravel.log,搜索Swift_TransportException、535 Authentication failed或Connection timed out -
535错误 → 检查MAIL_USERNAME和MAIL_PASSWORD(Gmail 是否用了 App Password?是否复制漏了空格?) -
Connection could not be established→ 端口被服务器防火墙屏蔽,或MAIL_HOST拼错(比如写成gmail.com) - 队列发送没反应?确认
QUEUE_CONNECTION=database(或 redis),并运行php artisan queue:work
配置本身不复杂,但容易卡在缓存没清、密码填错、端口加密不匹配这几个点上。稳住,一条条对照日志来。











