Response from SES API
See https://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-ses-api-responses.html
Construct an UnsignedRequest for SES, e.g.
import Http
import AWS.Types
unsignedResult : Result String (AWS.Types.UnsignedRequest Http.Error Response)
unsignedResult =
unsignedRequest
(Email
{ from = "[email protected]"
, to = [ "[email protected]" ]
, replyTo = [ "[email protected]" ]
, subject = "Test"
, textBody = "Message sent using SendEmail"
, htmlBody = "<p>Message sent using SendEmail</p>"
}
)
Result.map .method unsignedResult
--> Ok "POST"
Result.map .headers unsignedResult
--> Ok [("Content-Type","application/x-www-form-urlencoded")]
Result.map .stringBody unsignedResult
--> Ok "Action=SendEmail&Source=alice%40example.com&Message.Subject.Data=Test&Message.Body.Text.Data=Message%20sent%20using%20SendEmail&Message.Body.Html.Data=%3Cp%3EMessage%20sent%20using%20SendEmail%3C%2Fp%3E&Destination.ToAddresses.member.1=bob%40example.com&ReplyToAddresses.member.1=donotreply%40example.com"
Result.map .service unsignedResult
--> Ok AWS.Types.ServiceSES
usage config now unsignedResult =
unsignedResult
|> Result.andThen (AWS.signRequest config now)
|> Result.map Http.taskgivenRawMessage : String
givenRawMessage =
-- NOTE: the leading space of this string will be removed
"\n\nFrom:[email protected]\nSubject: Test\n\nMessage sent using SendRawEmail.\n\n"
expectedRawParams : List (String, String)
expectedRawParams =
[ ("Action", "SendRawEmail")
, ( "Source", "[email protected]" )
, ("Destinations.member.1", "[email protected]")
, ("Destinations.member.2", "[email protected]")
, ("RawMessage.Data", "RnJvbTp1c2VyQGV4YW1wbGUuY29tClN1YmplY3Q6IFRlc3QKCk1lc3NhZ2Ugc2VudCB1c2luZyBTZW5kUmF3RW1haWwuCgo=")
]
paramsForMail
(RawEmail
{ from = "[email protected]"
, destinations = ["[email protected]", "[email protected]"]
, rawMessage = givenRawMessage
}
)
--> Ok expectedRawParams
givenEmailDetail : { from : String, to : List String, replyTo : List String, subject : String, textBody : String, htmlBody : String}
givenEmailDetail =
{ from = "[email protected]"
, to = [ "[email protected]" ]
, replyTo = [ "[email protected]" ]
, subject = "Test"
, textBody = "Message sent using SendEmail"
, htmlBody = "<p>Message sent using SendEmail</p>"
}
expectedEmailParams : List (String, String)
expectedEmailParams =
[ ( "Action", "SendEmail" )
, ( "Source", "[email protected]" )
, ( "Message.Subject.Data", "Test" )
, ( "Message.Body.Text.Data", "Message sent using SendEmail" )
, ( "Message.Body.Html.Data", "<p>Message sent using SendEmail</p>" )
, ( "Destination.ToAddresses.member.1", "[email protected]" )
, ( "ReplyToAddresses.member.1", "[email protected]" )
]
paramsForMail (Email givenEmailDetail)
--> Ok expectedEmailParamsimport Xml.Decode
--
-- Success scenario
"""
<SendEmailResponse xmlns="https://email.amazonaws.com/doc/2010-03-31/">
<SendEmailResult>
<MessageId>000001271b15238a-fd3ae762-2563-11df-8cd4-6d4e828a9ae8-000000</MessageId>
</SendEmailResult>
<ResponseMetadata>
<RequestId>fd3ae762-2563-11df-8cd4-6d4e828a9ae8</RequestId>
</ResponseMetadata>
</SendEmailResponse>
"""
|> Xml.Decode.run decodeResponse
--> Ok (Success { messageId = "000001271b15238a-fd3ae762-2563-11df-8cd4-6d4e828a9ae8-000000", requestId = "fd3ae762-2563-11df-8cd4-6d4e828a9ae8" })
--
-- Error scenario
"""
<ErrorResponse>
<Error>
<Type>
Sender
</Type>
<Code>
ValidationError
</Code>
<Message>
Value null at 'message.subject' failed to satisfy constraint: Member must not be null
</Message>
</Error>
<RequestId>
42d59b56-7407-4c4a-be0f-4c88daeea257
</RequestId>
</ErrorResponse>
"""
|> Xml.Decode.run decodeResponse
--> Ok (Error { type_ = "Sender", code = "ValidationError", message = "Value null at 'message.subject' failed to satisfy constraint: Member must not be null" })