I got this error when sending email with Amazon SES:
BadRequestException: Unable to parse template data (invalid JSON).
When creating the template it does not raise any error:
aws ses create-template --cli-input-json file://awsTemplateWelcome.json
{
"Template": {
"TemplateName": "welcome",
"SubjectPart": "{{subject}}",
"TextPart": "",
"HtmlPart": "<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd\">\r\n<html xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\r\n <head>\r\n <meta http-equiv=\"Content-Type\" content=\"text\/html; charset=UTF-8\" \/>\r\n <title>Jelentkez\u00E9s<\/title>\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\r\n <style>\r\n table,\r\n td,\r\n div,\r\n h1,\r\n p {\r\n font-family: Arial, sans-serif;\r\n font-size: 16px;\r\n }\r\n <\/style>\r\n <\/head>\r\n <body style=\"margin: 0; padding: 0;\">\r\n <table\r\n align=\"center\"\r\n border=\"0\"\r\n cellpadding=\"0\"\r\n cellspacing=\"0\"\r\n width=\"600\"\r\n >\r\n {{welcomeMessage}}\r\n {{ticketManagingInfos}}\r\n <tr>\r\n <td style=\"padding: 30px 0px 30px; text-align: center;\">\r\n <img\r\n src=\"https:\/\/ticket-t01.s3.eu-central-1.amazonaws.com\/{{imgId}}_0.cover.jpg\"\r\n width=\"600\"\r\n alt=\"Cover\"\r\n style=\"\r\n height: auto;\r\n border: none;\r\n text-decoration: none;\r\n color: #ffffff;\r\n \"\r\n \/>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/body>\r\n<\/html>\r\n"
}
}
https://jsonlint.com approves JSON
Calling sendEmail
from Vapor:
let template = SESV2.Template(templateArn: nil, templateData: d2, templateName: "welcome")
let content = SESV2.EmailContent(raw: nil, simple: nil, template: template)
let destination = SESV2.Destination(bccAddresses: nil, ccAddresses: nil, toAddresses: [emailTo])
let sendEmailRequest = SESV2.SendEmailRequest(configurationSetName: nil, content: content, destination: destination, emailTags: nil, feedbackForwardingEmailAddress: nil, feedbackForwardingEmailAddressIdentityArn: nil, fromEmailAddress: emailFrom, fromEmailAddressIdentityArn: nil, listManagementOptions: nil, replyToAddresses: nil)
return ses.sendEmail(sendEmailRequest).map { response in
if let messageId = response.messageId {
print("Welcome message sent transactionId: \(ti.id!) messageId: \(messageId)")
fflush(stdout)
} else {
print("Error when sending welcome message")
fflush(stdout)
}
}