AWS Lambda无法将电子邮件发送到经过验证的SES电子邮件地址

时间:2019-05-20 14:52:45

标签: amazon-web-services amazon-s3 aws-lambda aws-api-gateway amazon-ses

我有一个静态的基于表单的HTML联系人页面,用户需要删除其姓名,电子邮件地址,主题和消息,最终我的脚本将通过AWS API-> Lambda-> my Gmail。

因此,为此,我在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中的“测试”按钮时,它会给我返回码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": "*"
        }
    ]
}

2 个答案:

答案 0 :(得分:1)

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

第二,作为替代和补充的步骤,您可以使用来自AWS的以下reference

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

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

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

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

答案 1 :(得分:1)

您可以打印完整的响应以查看是否在响应中得到消息ID吗?如果是这样,则许可似乎没有问题。 1.您可以在SES控制台中为已验证身份启用“退回/传递/投诉”的SNS通知,并查看在进行sendmail api调用后是否收到任何通知。 https://docs.aws.amazon.com/ses/latest/DeveloperGuide/notifications-via-sns.html

  1. 此外,还要选中收件人垃圾邮件框。