Laravel无法向Gmail账户发送邮件的问题求助
Laravel 托管商SMTP无法发送邮件到Gmail的排查方案
同域邮箱能正常接收,Outlook客户端用该邮箱发Gmail也正常,说明邮箱本身和托管商SMTP服务没问题,问题出在Laravel的配置或邮件发送逻辑上,导致Gmail拒收或判定为垃圾邮件。
修复SMTP端口与加密方式不匹配
你的.env配置中存在端口和加密方式不兼容的问题:- 465端口对应的标准加密方式是
ssl,而非tls(tls对应587端口) - 端口值不要加引号,避免解析异常
修正后的.env配置片段:
MAIL_MAILER=smtp MAIL_HOST=mail.domain.com MAIL_PORT=465 MAIL_USERNAME="no_reply@domain.com" MAIL_PASSWORD="password" MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS="no_reply@domain.com" MAIL_FROM_NAME="${APP_NAME}"或者改用587端口+tls:
MAIL_PORT=587 MAIL_ENCRYPTION=tls- 465端口对应的标准加密方式是
检查Laravel邮件发送日志
查看Laravel的日志文件storage/logs/laravel.log,或者执行命令实时监控日志:php artisan log:watch日志里会显示SMTP连接状态、发送失败的具体原因(比如被Gmail拒绝、认证错误等)。
优化邮件内容规避Gmail垃圾邮件检测
Gmail的反垃圾规则很严格,检查以下几点:- 邮件主题避免使用敏感词(如"免费"、"促销"),不要为空或过于简短
- 确保
emails.get-started模板里有清晰的文本内容,不要仅包含图片或可疑链接 - 发件人名称
No Reply尽量和域名关联度更高,比如改成${APP_NAME} No Reply
验证域名的SPF/DKIM/DMARC记录
虽然Outlook能正常发送,但Laravel通过SMTP发送的邮件可能缺少域名认证,导致Gmail判定为垃圾邮件:- SPF记录:在域名DNS中添加包含托管商SMTP服务器IP的TXT记录,比如
v=spf1 ip4:xxx.xxx.xxx.xxx include:your-host-provider.com ~all - DKIM签名:在托管商后台启用DKIM,将生成的公钥添加到域名DNS的TXT记录中,Laravel会自动使用DKIM签名(部分托管商需要额外配置)
- DMARC记录:添加TXT记录
v=DMARC1; p=none; sp=none; rua=mailto:dmarc@domain.com,提升邮件可信度
- SPF记录:在域名DNS中添加包含托管商SMTP服务器IP的TXT记录,比如
清理重复的收件人设置
你的代码中同时在控制器和Mailable类里设置了收件人,可能导致逻辑冲突:- 控制器代码修改为:
Mail::send(new GetStartedMail($request)); - 保留Mailable类中的
->to()设置即可,避免重复定义收件人。
- 控制器代码修改为:
内容的提问来源于stack exchange,提问作者akif akram
相关产品推荐
相关产品推荐

