使用SendGrid API发送邮件报错 附SMTP配置求排查方案
SendGrid SMTP发信报错排查方案
报错截图:
当前使用的配置参数:
MAIL_DRIVER=smtp MAIL_HOST=smtp.sendgrid.net MAIL_PORT=587 MAIL_USERNAME=apikey MAIL_PASSWORD=**** MAIL_ENCRYPTION=tls
具体排查方向和解决方法
- API密钥配置错误
你配置里的MAIL_USERNAME填apikey是官方要求的正确写法,90%的同类报错都是MAIL_PASSWORD填错导致的:这里不能填SendGrid账号的登录密码,必须填后台生成的、勾选了Mail Send(邮件发送)权限的完整API Key。这个密钥生成后只会完整展示一次,复制时注意不要漏字符、不要带前后空格;如果密钥没配发信权限,或者开了多余的高风险权限,也会被服务端直接拒绝,重新生成一个仅配发信权限的密钥替换即可。 - 端口拦截或加密协议不匹配
587端口+TLS加密是SendGrid官方推荐的SMTP配置,但首先要确认你的服务器/本地网络没有拦截587端口的出站请求:多数云服务商默认封禁25发信端口,部分配置严格的安全组、防火墙也可能误拦587,可在服务器执行telnet smtp.sendgrid.net 587测试连通性,不通的话先在安全组、防火墙放行对应端口。
如果587端口始终无法连通,可以切换为官方备用配置:MAIL_PORT=465 MAIL_ENCRYPTION=ssl - 发件人身份未验证
SendGrid会直接拦截所有未完成身份验证的发信请求,需要在SendGrid后台的发件人认证板块,要么完成单个发件邮箱的验证,要么给发件域名配置SPF、DKIM解析记录完成域名级认证,用未认证的邮箱/域名发信会直接报连接错误。 - 配置缓存未更新
如果你用的是Laravel这类带配置缓存的框架,改完.env文件里的参数后必须清除缓存,否则框架还是会读取旧的错误配置,执行以下命令清理即可:php artisan config:clear php artisan cache:clear - 账号触发风控限制
新注册的SendGrid账号如果短时间发信量过大、发信内容命中垃圾邮件规则,会被临时限制SMTP连接,直接登录你注册账号用的邮箱,查看是否有SendGrid发来的风控提醒邮件,按要求提交账号用途说明就能解封。
内容的提问来源于stack exchange,提问作者Ansuya Sindha
相关产品推荐
相关产品推荐

