Laravel怎么发送邮件 Laravel邮件驱动如何配置 【实战】

1次阅读

先确认 mail_mailer 配置值是否为 smtp,再清缓存 php artisan config:clear;检查 mail_port 与 mail_encryption 是否匹配(587→tls,465→ssl);确保邮件视图 utf-8 无 bom;队列需独立配置 queue_connection,且验证 jobs 表或 failed_jobs 日志。

Laravel怎么发送邮件 Laravel邮件驱动如何配置 【实战】

邮件发不出去但没报错?先确认 MAIL_MAILER 配置值

很多 laravel 项目卡在“调用 Mail::to()->send() 没反应”,其实根本没走到 SMTP 或 Mailgun,因为默认配置是 sync(同步队列)或更隐蔽的 log。Laravel 9+ 默认环境变量里写的是 MAIL_MAILER=smtp,但如果你用的是旧项目或未运行 php artisan config:clear,实际生效的可能是缓存里的 logArray

  • 检查 .env:必须有 MAIL_MAILER=smtp(不是 MAIL_DRIVER,那是旧版键名)
  • 运行 php artisan config:clear 再试,别信缓存
  • 临时加一行日志验证是否真发了:Log::info('About to send mail', ['to' => $user->email]);

SMTP 连接被拒绝或超时?重点看 MAIL_PORT 和 TLS/SSL 设置

Laravel 的 MAIL_ENCRYPTION 不是“开就安全”,它直接决定底层 PHPMailer 用什么协议握手。Gmail、outlook、腾讯企业邮箱等对端口和加密组合极其敏感,配错就 Connection could not be established with host

  • MAIL_PORT=587 → 必须配 MAIL_ENCRYPTION=tls
  • MAIL_PORT=465 → 必须配 MAIL_ENCRYPTION=ssl(注意不是 tls
  • 阿里云邮件推送、SendGrid 等 SaaS 服务通常只支持 587 + tls,不认 465
  • 本地开发用 MailHog?改用 MAIL_MAILER=smtp + MAIL_HOST=127.0.0.1 + MAIL_PORT=1025,别碰加密

邮件内容乱码或收件箱显示为附件?Content-Type 和视图编码要对齐

Laravel 默认用 Blade 渲染邮件视图,但一旦你在视图里写了中文、emoji 或用了 @include 引入非 UTF-8 文件,PHPMailer 可能误判字符集,把整封邮件当 application/octet-stream 处理。

  • 所有 Blade 邮件视图文件保存为 UTF-8 无 BOM 格式(VS Code 右下角点编码可改)
  • 不要在视图顶部手动写 <meta charset="gbk"> 鈥斺
text=ZqhQzanResources