AWS Lambda не может отправить электронное письмо на подтвержденный электронный адрес SES - PullRequest
1 голос
/ 20 мая 2019

У меня есть статическая HTML-страница контактов, на которой пользователю необходимо указать свое имя, адрес электронной почты, тему и сообщение, и в конечном итоге мой сценарий перенаправит все необходимые значения через AWS API -> Lambda -> my.Gmail.

Итак, для этого у меня есть подтвержденный аккаунт GMAIL в SES.А моя функция 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 я создал политику и прикрепил ее кэта лямбда-функция.Затем я создал API, чтобы использовать эту функцию для своих целей.

Теперь, когда я нажимаю кнопку TEST в API, он дает мне код возврата 200. Это здорово.Но проблема в том, что я не вижу ни одного письма в моей подтвержденной учетной записи Gmail.

Я использую это как мое тестовое сообщение,

{
      "email": XXXX@example.com,
      "subject": Test,
      "message": This is a Test message
    }

Iпопытался также использовать почтальон и почтальон говорит, что все в порядке с 200 в качестве кода возврата.Но все равно нет электронной почты для моей учетной записи Gmail .Я проверил в журналах наблюдения за облаками все зеленое.Так что не знаю, почему мой проверенный Gmail не получает никаких тестовых сообщений.Может ли кто-нибудь пролить здесь свет?

Настроенная роль выглядит следующим образом:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendTemplatedEmail",
                "ses:SendRawEmail"
            ],
            "Resource": "*"
        }
    ]
}

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Вы можете распечатать полный ответ, чтобы увидеть, если вы получите идентификатор сообщения в ответе?если это так, то, похоже, нет проблем с разрешением.1. Вы можете включить уведомление SNS для Bounce / Delivery / жалобу для подтвержденной личности в консоли SES и посмотреть, получите ли вы какое-либо уведомление после выполнения вызова sendmail api.https://docs.aws.amazon.com/ses/latest/DeveloperGuide/notifications-via-sns.html

Кроме того, также установите флажок для спама получателя.
1 голос
/ 20 мая 2019

Я бы порекомендовал вам две вещи: сначала попытайтесь развернуть свой код, используя безсерверную инфраструктуру , которая может помочь вам с такими зависимостями, как роли IAM.

Во-вторых, в качестве альтернативы и дополнительных шагов вы можете использовать следующую ссылку от AWS:

  1. Откройте консоль Amazon SES на https://console.aws.amazon.com/ses/.
  2. В столбце слева выберите адреса электронной почты или домены.
  3. Выберите подтвержденный адрес электронной почты или домен, а затем выберите Отправить

  4. Проверка электронной почты. Для To: введите bounce@simulator.amazonses.com. За Тема и текст, введите образец текста. Выберите Отправить тестовое письмо.

  5. Повторите шаги 3 и 4, чтобы создать другое тестовое сообщение, но на этот раз, для To: введите жалобу@simulator.amazonses.com.

  6. Откройте Amazon SQS консоль на https://console.aws.amazon.com/sqs/. сообщения Доступный столбец должен указывать, что доступны 2 сообщения.
...