为什么状态代码为时"Client.Send"返回零错误!=200



我正在使用sendgrid go库从我的go服务器发送一封电子邮件,其中包含以下片段:

to := mail.NewEmail("", req.ToEmail)
from := mail.NewEmail("", "xxx@gmail.com")      // redacted
m := mail.NewV3MailInit(from, "", to)
m.SetTemplateID("d-xxxxx")                      // redacted
client := sendgrid.NewSendClient(os.Getenv("SENDGRID_API_KEY"))
resp, err := client.Send(m)
if err != nil {
log.Printf("failed to send email to %s: %vn", req.ToEmail, err)
}

然而,当我没有设置SENDGRID_API_KEY env var时,err仍然为零(响应如下:

{
StatusCode:401 
Body:{"errors":[{"message":"The provided authorization grant is invalid, expired, or revoked","field":null,"help":null}]} 
Headers:map[Access-Control-Allow-Headers:[Authorization, Content-Type, On-behalf-of, x-sg-elas-acl] Access-Control-Allow-Methods:[POST] Access-Control-Allow-Origin:[https://sendgrid.api-docs.io] Access-Control-Max-Age:[600] Connection:[keep-alive] Content-Length:[116] Content-Type:[application/json] Date:[Mon, 05 Jul 2021 19:15:31 GMT] Server:[nginx] Strict-Transport-Security:[max-age=600; includeSubDomains] X-No-Cors-Reason:[https://sendgrid.com/docs/Classroom/Basics/API/cors.html]]}

我盲目地认为err应该设置为非零的值,但我想我也需要查看响应中的状态代码。有没有一种快速的方法可以检查返回的响应是否为OK

Twilio SendGrid开发人员在此发布。

我不是Go开发人员,所以我可能错了,但我想我知道这里发生了什么。

SendGridGo客户端使用SendGridREST客户端,该客户端最终调用Go的标准libHTTP客户端。在Get方法下,HTTP文档说:

如果重定向过多或出现HTTP协议错误,则返回错误。非2xx响应不会导致错误。任何返回的错误都将是*url.error类型。url。如果请求超时或被取消,则错误值的Timeout方法将报告true。

返回结果的HTTP请求就是成功的请求,即使结果不是您想要的。没有返回结果的HTTP请求,如连接错误或重定向过多,将返回错误。

根据SendGrid API文档,您应该查找202响应状态代码,以指示API请求成功。

相关内容

最新更新