Laravel 5.6在GoDaddy平台邮件发送失败问题求助
咱们一步步拆解这个问题——Laravel返回“发送成功”只是框架层面的反馈,实际投递可能在SMTP环节藏着小状况,按下面的顺序排查准没错:
1. 先把.env配置拉满,别依赖默认值
你的config/mail.php是读取环境变量的,所以优先检查.env里的邮件参数,确保这些项都正确配置:
MAIL_DRIVER=smtp MAIL_HOST=a2plcpnl0866.prod.iad2.secureserver.net MAIL_PORT=465 MAIL_USERNAME=你的GoDaddy邮箱账号(比如test@mydomain.com) MAIL_PASSWORD=你的邮箱密码(如果开了2FA,得用应用专用密码) MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=test@mydomain.com MAIL_FROM_NAME="你的发件人名称"
划重点:你当前config里driver默认是sendmail,如果.env里没明确写MAIL_DRIVER=smtp,Laravel会直接忽略你配置的SMTP服务器,用sendmail跑,这大概率是核心问题!
2. 先去垃圾邮件文件夹挖一挖
很多测试邮件会被邮箱服务商判定为垃圾邮件,别直接跳过这一步——去收件箱对应的垃圾邮件、垃圾箱、广告邮件文件夹里找找,说不定邮件正乖乖待在那儿。
3. 扒Laravel日志找隐藏错误
虽然收到“发送成功”的响应,但底层SMTP可能有没抛出的错误,去storage/logs/laravel.log里搜mail或SMTP相关的日志条目,比如认证失败、连接超时、收件地址被拒收这类信息,日志会帮你精准定位问题。
4. 给域名配置SPF/DKIM记录
你的SMTP服务器是GoDaddy的,得确保域名mydomain.com的DNS记录正确配置了SPF和DKIM:
- SPF记录:添加一条TXT记录,内容比如
v=spf1 include:secureserver.net ~all - DKIM记录:在GoDaddy后台生成DKIM密钥,然后把对应的TXT记录加到域名DNS里
这俩是邮箱服务商验证邮件合法性的关键,缺失或错误会直接导致邮件被拒收或扔进垃圾箱。
5. 排除队列延迟坑
如果你发送邮件时用了队列(比如Mail::to(...)->queue(...)),Laravel返回的“成功”只是把任务塞进队列,实际发送得靠队列worker执行:
- 先确认队列服务在跑:执行
php artisan queue:work(生产环境建议用supervisor管理队列进程,避免进程挂掉) - 查有没有失败任务:看看
failed_jobs表(如果开了失败队列),有没有卡死的邮件任务
6. 用Tinker直接测试,排除业务逻辑干扰
为了确认不是注册流程的问题,直接用Laravel Tinker发一封测试邮件:
打开终端进入项目根目录,执行:
php artisan tinker
然后输入:
Mail::raw('这是一封测试邮件', function ($message) { $message->to('你的个人测试邮箱@example.com') ->subject('Laravel邮件测试') ->from('test@mydomain.com', '测试发件人'); });
如果还是收不到,说明是邮件配置的问题;如果能收到,那问题出在注册流程的邮件触发逻辑上。
7. 检查服务器出站端口是否开放
有些服务器会禁用出站的465端口(SMTP SSL端口),你可以在服务器上用telnet测试连接:
telnet a2plcpnl0866.prod.iad2.secureserver.net 465
如果连接失败,要么联系服务器提供商开放端口,要么改用587端口(对应TLS加密,.env里设MAIL_ENCRYPTION=tls)。
内容的提问来源于stack exchange,提问作者Vicky Gill

