InvalidParameterValue: Domain contains control or whitespace at Request.extractError in aws lambda

Viewed 614

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​" } }

0 Answers
Related