I am facing a strange problem with ses.SendEmail method. When I use test data everything works as expected and email is send to me, however when adding new entry in dynamoDB that triggers lambda function that will send an email I get an exception :
InvalidParameterValue: Domain contains control or whitespace at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/protocol/query.js:50:29) at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:106:20) at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:78:10) at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:688:14) at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10) at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12) at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10 at Request. (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9) at Request. (/var/runtime/node_modules/aws-sdk/lib/request.js:690:12) at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:116:18) { code: 'InvalidParameterValue', time: 2020-08-28T13:09:31.549Z, requestId: '233eb2c8-9097-4aab-884f-ecd20260a473', statusCode: 400, retryable: false, retryDelay: 38.70417411485463 }
console.log('Loading function');
var aws = require('aws-sdk');
var ses = new aws.SES({region: 'eu-west-2'});
exports.handler = (event, context) => {
//console.log('Received event:', JSON.stringify(event, null, 2));
event.Records.forEach((record) => {
if(record.eventName == 'INSERT')
{
console.log(record.eventID);
console.log(record.eventName);
console.log('DynamoDB Record: %j', record.dynamodb);
console.log(record.dynamodb.NewImage.email.S);
var email = record.dynamodb.NewImage.email.S.trim();
console.log("About send an email to " + email);
var params = {
Destination: {
ToAddresses: [email]
},
Message: {
Body: {
Text: { Data: "test"
}
},
Subject: { Data: "Thank you for your interest."
}
},
Source: "***@***.com"
};
ses.sendEmail(params, function (err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
}
});
};
In logs I can see that email is in correct format - exactly the same payload for tests that works. Part of NewImage object ( I obfuscated an email (for privacy reason) that did not have any whitespace and contains only alphanumerical values.
"NewImage": { "dateTime": { "S": "8/28/2020 1:09:29 PM" }, "firstName": { "S": "adam" }, "lastName": { "S": "b" }, "id": { "S": "815501b1-3a94-4e65-86b1-ac59ac0a26f2" }, "email": { "S": "***@gmail.com" } }