跳到主要内容

邮件无法发送

邮件投递问题的分步排查指南。


第一步:检查基本配置

# 检查 .env 中的 SMTP 设置
grep MAIL_ .env

确认以下配置:

  • MAIL_MAILER=smtp(不是 lognull
  • MAIL_HOST 正确
  • MAIL_PORT 正确(TLS 使用 587,SSL 使用 465)
  • MAIL_USERNAMEMAIL_PASSWORD 已填写
  • MAIL_ENCRYPTION=tls(或 ssl

第二步:通过管理面板测试

  1. 进入 管理员 > 设置 > 邮件
  2. 点击 发送测试邮件
  3. 如果失败,检查错误消息

第三步:通过命令行测试

php artisan tinker
Mail::raw('Test', function ($m) {
$m->to('[email protected]')->subject('Test');
});

检查 storage/logs/laravel.log 中的错误信息。


常见问题

问题解决方案
"Connection timed out"(连接超时)主机封锁了 587/465 端口,尝试使用 2525 端口或联系主机服务商。
"Authentication failed"(认证失败)用户名或密码错误。Gmail 请使用应用专用密码。
"Certificate verify failed"(证书验证失败)PHP 版本过旧,尝试在 config/mail.php 邮件器选项中设置 'verify_peer' => false
邮件进入垃圾箱添加 SPF、DKIM 和 DMARC DNS 记录。
邮件延迟使用了 QUEUE_CONNECTION=database?请确保队列工作进程正在运行。
无错误但未收到邮件使用了 MAIL_MAILER=log?邮件被记录到日志而非实际发送。检查 storage/logs/laravel.log

使用 MAIL_MAILER=log 进行调试

.env 中设置 MAIL_MAILER=log,所有邮件将记录到日志文件而非实际发送。这有助于验证邮件内容,同时不影响真实收件人。


下一步