【发布时间】:2017-02-21 20:06:36
【问题描述】:
通过 SES 服务发送邮件时,我遇到了以下由 SES 的 sendEmail 方法喷出的错误消息。
{ [XMLParserError: Non-whitespace before first tag.
Line: 0
Column: 1
Char: {]
message: 'Non-whitespace before first tag.\nLine: 0\nColumn: 1\nChar: {',
code: 'XMLParserError',
retryable: true,
time: Thu Sep 29 2016 15:34:20 GMT-0400 (Eastern Daylight Time),
statusCode: 500 }
经过相当多的调试后,我发现问题与 DynamoDB 和 SES 对象的初始化顺序有关。下面的测试代码重现了这个问题:
'use strict';
var AWS = require('aws-sdk');
AWS.config.update({region:'us-east-1'});
//var ses = new AWS.SES(); // This works
var dynamodb = new AWS.DynamoDB();
var docClient = new AWS.DynamoDB.DocumentClient();
AWS.config.update({endpoint: 'http://localhost:8000'});
var ses = new AWS.SES(); // Does not work
var params = {
Destination: {
ToAddresses: ['test@example.com']
},
Message: {
Body: {
Html: {Data: "This is a test"},
Text: {Data: "This is a test"}
},
Subject: {Data: "Important"}
},
Source: '<noreply@example.com>',
};
ses.sendEmail(params, function(err, data) {
if (err) {
console.log("Error sending email", err);
}
else
console.log("Sent email");
});
上面的代码序列给出了错误。但是,如果我移动“var ses = new AWS.SES();” DynamoDB 之前的语句然后代码工作。我很想知道可能是什么原因
【问题讨论】:
-
我很确定是
AWS.config.update({endpoint: 'http://localhost:8000'});线路搞砸了 SES。不是它在 DynamoDB 线之后出现的事实。 -
我刚刚尝试评论那行,你是绝对正确的。你知道为什么会这样吗?
-
它为您在该行之后启动的所有 AWS 服务设置端点。您的本地主机上没有运行 SES 端点,因此会破坏 SES。
-
好的,是的,这是有道理的——希望错误更直观。感谢您分享您的 cmets
-
是的,设置
AWS.config.update({endpoint: 'http://localhost:8000'})以使 Dynamodb 运行会创建神秘的“XMLParserError”。那么如何为 SES + Dynamodb 设置本地开发盒?
标签: amazon-web-services amazon-dynamodb amazon-ses