【问题标题】:AWS Lambda can't send email to a verified SES email addressAWS Lambda 无法向经过验证的 SES 电子邮件地址发送电子邮件
【发布时间】: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


【解决方案1】:

我建议您做两件事,首先尝试使用serverless framework 部署您的代码,这可以help 您使用IAM 角色等依赖项。

其次,作为替代和补充步骤,您可以使用 AWS 的以下reference

  1. 打开 Amazon SES 控制台https://console.aws.amazon.com/ses/
  2. 在左侧的列中,选择电子邮件地址或域。
  3. 选择一个经过验证的电子邮件地址或域,然后选择发送一个

  4. 测试电子邮件。对于 To:,输入bounce@simulator.amazonses.com。为了 主题和正文,键入一些示例文本。选择发送测试电子邮件。

  5. 重复步骤 3 和 4 以创建另一条测试消息,但这一次, 对于收件人:,输入投诉@simulator.amazonses.com。

  6. 打开 Amazon SQS 控制台https://console.aws.amazon.com/sqs/。讯息 可用列应指示有 2 条消息可用。

【讨论】:

    【解决方案2】:

    您能否打印完整的响应以查看您是否在响应中获得消息 ID?如果是这样,权限似乎没有问题。 1.您可以在SES控制台中为已验证的身份启用SNS通知Bounce/Delivery/complaint,并查看您在拨打sendmail api调用后是否收到任何通知。 https://docs.aws.amazon.com/ses/latest/DeveloperGuide/notifications-via-sns.html

    1. 此外,还要检查收件人垃圾邮件框。

    【讨论】:

    • 这很好,它在我的垃圾邮件文件夹中。但是,我已经实现了通过 SNS 添加通知的建议。谢谢。
    猜你喜欢
    • 2018-11-17
    • 2020-11-25
    • 2016-09-28
    • 2019-08-22
    • 2014-11-04
    • 2018-09-09
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多