【问题标题】:Http POST request in swift to send an email via Mailjet快速的 Http POST 请求以通过 Mailjet 发送电子邮件
【发布时间】:2017-10-14 15:51:35
【问题描述】:

我正在尝试使用带有 http post 请求的 Mailjet API v3 发送电子邮件,但收到错误 400。

我在 Javascript 中成功使用了完全相同的主体,但我猜错误 400 与它有关......

有什么想法吗?

var recipients = [Any]()
recipients.append(["Email": "email@gmail.com"])

var body: [String: Any] = [
  "FromEmail": "anEmail@gmail.com",
  "FromName": "Me",
  "Subject": "YEEES",
  "Text-part": "Greetings from IOS ;)",
  "Recipients": recipients
]

var request = URLRequest(url: self.apiURL)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.setValue("Authorization", forHTTPHeaderField: "Basic <keysInBase64>")

    do {
      request.httpBody = try JSONSerialization.data(withJSONObject: body, options: [])
    }
    catch {
      print("error during JSON serialization")
      dump(error)
      return
    }

let session = URLSession.shared
    let task = session.dataTask(with: request, completionHandler: { (data, response, error) in
      print(error)
      print(response)
      print(data)
    })
    task.resume()

【问题讨论】:

  • 请求中可能存在细微差别。最简单的调试方法是使用 CharlesProxy。准确记录实际的 HTTP 请求 - 然后与您在 JavaScript 中发送的内容进行比较(从浏览器开发工具或 CharlesProxy 获取)。
  • @LouFranco 非常感谢,我能够找到 Charles 的情况。

标签: ios swift mailjet


【解决方案1】:

标题错误...

我在做:

request.setValue("Authorization", forHTTPHeaderField: "Basic <keysInBase64>")

而不是:

request.setValue("Basic <keysInBase64>", forHTTPHeaderField: "Authorization")

按照@LouFranco 的建议使用Charles Proxy,我能够找到错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    相关资源
    最近更新 更多