邮件无法发送
邮件投递问题的分步排查指南。
第一步:检查基本配置
# 检查 .env 中的 SMTP 设置
grep MAIL_ .env
确认以下配置:
MAIL_MAILER=smtp(不是log或null)MAIL_HOST正确MAIL_PORT正确(TLS 使用 587,SSL 使用 465)MAIL_USERNAME和MAIL_PASSWORD已填写MAIL_ENCRYPTION=tls(或ssl)
第二步:通过管理面板测试
- 进入 管理员 > 设置 > 邮件
- 点击 发送测试邮件
- 如果失败,检查错误消息
第三步:通过命令行测试
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,所有邮件将记录到日志文件而非实际发送。这有助于验证邮件内容,同时不影响真实收件人。