Я провожу некоторые исследования и тестирование, но пока не получил рабочего решения.Я надеюсь, что кто-то может мне помочь:)
Моя цель: Я хочу использовать mailgun (или что-то подобное?) Для транзакционной электронной почты в приложении ios.
Что я сделал до сих пор: Я успешно проверил оператор curl:
curl -s --user 'api:(myAPIKey)' \
https://api.mailgun.net/v3/sandbox(mySandBoxAddressKey).mailgun.org/messages \
-F from='Excited User <postmaster@sandbox(mySandBoxAddressKey).mailgun.org>' \
-F to='(myPersonalMailAddress)@gmail.com' \
-F subject='Hello' \
-F text='Testing some Mailgun awesomeness!'
В Swift я попробовал то же самое с
let session = URLSession.shared
let url = URL(string: "https://api.mailgun.net/v3/sandbox(mySandBoxAddressKey).mailgun.org/messages")!
var request = URLRequest(url: url)
let credentials = "api:(myAPIKey)"
request.setValue("Basic \(Data(credentials.utf8).base64EncodedString())", forHTTPHeaderField: "Authorization")
let data = "from: Mailgun Sandbox <(postmaster@sandbox(mySandBoxAddressKey).mailgun.org)>&to: [(myPersonalMailAddress)@gmail.com,((myPersonalMailAddress)@gmail.com)]&subject:Hello&text:Congratulations"
request.httpBody = data.data(using: String.Encoding.ascii)
let task = session.dataTask(with: request as URLRequest, completionHandler: {(data, response, error) in
if let error = error {
print(error)
}
if let response = response {
print("mimeType = \(response.mimeType)")
print("url = \(response.url!)")
print("response = \(response)")
let httpResponse = response as! HTTPURLResponse
print("response code = \(httpResponse.statusCode)")
print("allHeaderFields = \(httpResponse.allHeaderFields)")
}
})
task.resume()
Я всегда получаю ответ 400:
response = <NSHTTPURLResponse: 0x600000430020> { URL: https://api.mailgun.net/v3/sandbox(mySandBoxAddressKey).mailgun.org/messages } { Status Code: 400, Headers {
Connection = (
"keep-alive"
);
"Content-Length" = (
86
);
"Content-Type" = (
"application/json"
);
Date = (
"Wed, 06 Jun 2018 15:17:53 GMT"
);
Server = (
nginx
);
} }
Я думал, что это проблема с телом, и пытался изменить строку «data».Я не знаю, правильная ли это часть в моем коде.И последнее, но не менее важное: я попытался настроить httpBody-Part с помощью json:
let json: [String: Any] = ["from": "Mailgun Sandbox <(postmaster@sandbox(mySandBoxAddressKey).mailgun.org)>", "to": "(myPersonalMailAddress)@gmail.com", "subject": "test", "text": "Nochmal test"]
let jsonData = try? JSONSerialization.data(withJSONObject: json)
request.httpBody = jsonData
Я также читал следующие статьи SO: Swift Send Email with MailGun , 401 Запрещено при отправке электронной почты с помощью Swift и Mailgun , Как отправлять электронную почту в Swift с помощью Mailgun