400 отправка почты с помощью mailgun (со Swift) - PullRequest
0 голосов
/ 06 июня 2018

Я провожу некоторые исследования и тестирование, но пока не получил рабочего решения.Я надеюсь, что кто-то может мне помочь:)

Моя цель: Я хочу использовать 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

...