【问题标题】:Why does `Client.Send` returns nil err when status code is != 200为什么当状态码为 != 200 时,`Client.Send` 返回 nil err
【发布时间】:2021-07-05 19:23:01
【问题描述】:

我正在使用 sendgrid go library 从我的 go 服务器发送一封带有以下 sn-p 的电子邮件:

    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: %v\n", req.ToEmail, err)
    }

但是,当我没有设置 SENDGRID_API_KEY 环境变量时,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 的方法?

【问题讨论】:

    标签: sendgrid sendgrid-api-v3


    【解决方案1】:

    这里是 Twilio SendGrid 开发人员宣传员。

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

    SendGrid Go client 使用 SendGrid REST client 最终调用 Go's standard lib HTTP clientGet method 下的 HTTP 文档说:

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

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

    根据SendGrid API docs,您应该正在寻找202 响应状态代码,以指示API 请求成功。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      相关资源
      最近更新 更多