Node.Js AWS SES - ETIMEDOUT при отправке электронной почты - PullRequest
0 голосов
/ 18 октября 2018

Я хочу отправить подтверждение по электронной почте новым людям, подписавшимся через AWS SES в Node.js:

var params = {
    Destination: {
        ToAddresses: [
            '...',
        ]
    },
    Message: {
        Body: {
            Html: {
                Data: '...',
                Charset: 'utf-8'
            },
            Text: {
                Data: '...',
                Charset: 'utf-8'
            }
        },
        Subject: {
            Data: '...',
            Charset: 'utf-8'
        }
    },
    Source: '...',
    ReturnPath: '...',
};
const ses = new AWS.SES({
    my_accessKeyId,
    my_secretAccessKey,
    my_region,
})
ses.sendEmail(params, function (err, data) {
    // ...
});

К сожалению, ничего не происходит, и через минуту или около того я получаю следующую ошибку:

{ Error: connect ETIMEDOUT 35.157.44.176:443
    at Object._errnoException (util.js:992:11)
    at _exceptionWithHostPort (util.js:1014:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1186:14)
  message: 'connect ETIMEDOUT 35.157.44.176:443',
  code: 'NetworkingError',
  errno: 'ETIMEDOUT',
  syscall: 'connect',
  address: '35.157.44.176',
  port: 443,
  region: 'eu-central-1',
  hostname: 'email.eu-central-1.amazonaws.com',
  retryable: true,
  time: 2018-10-18T16:52:00.803Z }

Я не уверен, является ли ошибка результатом ошибки в моем коде, поскольку в настоящее время я использую только среду песочницы.Но я проверил отправку и получение электронной почты, которая должна нормально работать даже в режиме «песочницы».


PS Я не совсем уверен, как правильно протестировать свое приложение в режиме «песочницы», так как мне не разрешеноотправлять на непроверенные письма.Возможно ли запросить производственный доступ без надлежащего запуска приложения?

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Вам нужно изменить регион с eu-central-1 на регион, в котором существует конечная точка (например, eu-west-1), чтобы отправлять электронные письма

https://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html

0 голосов
/ 26 октября 2018

Это неочевидно, поэтому нам нужно устранить неполадки.

Сначала давайте посмотрим, можно ли подключиться с локального компьютера к API SES с помощью интерфейса командной строки AWS.Убедитесь, что вы установили учетные данные aws с использованием aws configure и попробуйте:

aws ses list-identities

Если это работает, вы должны увидеть список проверенных адресов электронной почты.Если нет, то вы увидите ошибку (возможно, разрешения) или тайм-аут предполагает проблему с сетевым подключением.

Примечание по учетным данным: не включайте свои учетные данные в свой код, либо configureфайл .credentials , который происходит, когда вы используете aws configure выше, загружаете его из общего файла json или используете переменные среды (AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY).

Далее попробуйте сделать то же самое в коде:

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region 
AWS.config.update({region: 'eu-central-1'});
// Create SES Client
const ses = new AWS.SES({apiVersion: '2010-12-01'})
// Create params
var params = {
  IdentityType: "EmailAddress", 
  MaxItems: 123, 
  NextToken: ""
};
ses.listIdentities(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);           // successful response
});

После того, как вы настроили свои учетные данные, как упомянуто выше, используйте это в своем коде отправки электронной почты для создания клиента ses:

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region 
AWS.config.update({region: myregion});
// Create SES Client
const ses = new AWS.SES({apiVersion: '2010-12-01'})

Другие вещи для проверки:

  • Убедитесь, что все адреса электронной почты проверены («От», «Источник», «Отправитель» или «Обратный путь»).)
  • Убедитесь, что у вас есть правильные ключи доступа SES
  • При использовании EC2 убедитесь, что группы безопасности разрешают доступ к API AWS.
  • Я надеюсь, что это уже работает, если нет, я могу только сказать перейти к tего страницу и убедитесь, что вы не пропустили ничего очевидного.
0 голосов
/ 18 октября 2018

Вы должны убедиться, что ваш пользователь использует отправку электронной почты.

my_accessKeyId,
    my_secretAccessKey,

имеет правильные разрешения IAM (роль, назначенная ему) для отправки электронной почты с помощью ses.Тест с ролью полного доступа SES я считаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...