【发布时间】:2019-05-20 23:40:41
【问题描述】:
我有一个基于静态表单的 HTML 联系页面,用户需要在其中删除他们的姓名、电子邮件地址、主题和消息,最终我的脚本将通过 AWS API --> Lambda --> my邮箱。
因此,为此,我在 SES 中验证了我的 GMAIL 帐户。我的 AWS Lambda 函数如下,(在这里,我使用相同的确认电子邮件地址来发送电子邮件。)
'use strict';
console.log('Loading function');
const AWS = require('aws-sdk');
const sesClient = new AWS.SES();
const sesConfirmedAddress = "XXXX@gmail.com";
/**
* Lambda to process HTTP POST for a contact form with the following body
* {
"email": <contact-email>,
"subject": <contact-subject>,
"message": <contact-message>
}
*
*/
exports.handler = (event, context, callback) => {
console.log('Received event:', JSON.stringify(event, null, 2));
var emailObj = JSON.parse(event.body);
var params = getEmailMessage(emailObj);
var sendEmailPromise = sesClient.sendEmail(params).promise();
var response = {
statusCode: 200
};
sendEmailPromise.then(function(result) {
console.log(result);
callback(null, response);
}).catch(function(err) {
console.log(err);
response.statusCode = 500;
callback(null, response);
});
};
function getEmailMessage (emailObj) {
var emailRequestParams = {
Destination: {
ToAddresses: [ sesConfirmedAddress ]
},
Message: {
Body: {
Text: {
Data: emailObj.message
}
},
Subject: {
Data: emailObj.subject
}
},
Source: sesConfirmedAddress,
ReplyToAddresses: [ emailObj.email ]
};
return emailRequestParams;
}
现在在 IAM 中,我创建了一个策略并附加到这个 lambda 函数。然后我创建了 API 来使用这个函数来达到我的目的。
现在,当我单击 API 中的 TEST 按钮时,它会返回代码 200。这很好。但问题是我在经过验证的 Gmail 帐户中没有看到任何电子邮件。
我正在使用,这是我的测试消息,
{
"email": XXXX@example.com,
"subject": Test,
"message": This is a Test message
}
我也试过使用邮递员,邮递员说用 200 作为返回码一切都很好。但仍然没有电子邮件发送到我的 Gmail 帐户。我检查了云观察日志,一切都是绿色的。所以不知道为什么我经过验证的 Gmail 没有收到任何类型的测试邮件。任何人都可以在这里发光吗?
自定义角色如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ses:SendEmail",
"ses:SendTemplatedEmail",
"ses:SendRawEmail"
],
"Resource": "*"
}
]
}
【问题讨论】:
-
发现问题,没有问题。它被转储到垃圾邮件文件夹中。
标签: amazon-web-services amazon-s3 aws-lambda aws-api-gateway amazon-ses