Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.Js AWS SES-发送电子邮件时发出ETIMEDOUT_Node.js_Amazon Web Services_Email_Amazon Ses - Fatal编程技术网

Node.Js AWS SES-发送电子邮件时发出ETIMEDOUT

Node.Js AWS SES-发送电子邮件时发出ETIMEDOUT,node.js,amazon-web-services,email,amazon-ses,Node.js,Amazon Web Services,Email,Amazon Ses,我想向通过Node.js中的AWS SES注册的新用户发送验证电子邮件: var params = { Destination: { ToAddresses: [ '...', ] }, Message: { Body: { Html: { Data: '...', Charset: 'utf-8'

我想向通过Node.js中的AWS SES注册的新用户发送验证电子邮件:

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 }
我不确定错误是否由代码中的错误导致,因为我目前只使用沙盒环境。但是我验证了发送和接收电子邮件,即使在沙箱模式下也应该可以正常工作



另外,我不太确定在沙盒模式下如何正确测试我的应用程序,因为我不允许发送未经验证的电子邮件。是否可以在没有正常运行应用程序的情况下请求生产访问权限?

您需要确保您的用户使用您的电子邮件发送电子邮件

my_accessKeyId,
    my_secretAccessKey,

具有正确的IAM权限(附加到该权限的角色)以使用ses发送电子邮件。我相信,使用SES完全访问权限进行测试。

您需要将区域从eu-central-1更改为端点存在的区域(例如eu-west-1),以便发送电子邮件


这并不明显,因此我们需要进行一些故障排除

首先,让我们看看是否可以使用AWS CLI从本地计算机连接到SES API。确保已使用aws配置设置了,然后尝试:

aws ses list-identities
如果这样做有效,您应该会看到一个经过验证的电子邮件地址列表。 如果没有,您将看到一个错误(可能是权限),或者超时表明存在网络连接问题

关于凭据的注意事项:也不要在代码中包含凭据,这在您使用上述
aws configure
或使用环境变量(aws\u ACCESS\u KEY\u ID和aws\u SECRET\u ACCESS\u 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'})
其他需要检查的事项:

  • 确保所有电子邮件地址都是(“发件人”、“来源”、“发件人”或“返回路径”)
  • 确保你有正确的答案
  • 如果使用EC2,请确保安全组允许访问AWS API
  • 我希望它现在起作用了,如果没有,我只能说去看看,确保你没有错过任何明显的东西

我已经向用户添加了
AmazonSESFullAccess
,但在大约一分钟没有发生任何事情后,我仍然收到超时错误。您在哪里运行此操作?Lambda,EC2,other?目前在本地运行,但我计划在EC2 instanceTry ListIdentifies上运行它以排除网络连接:修复非常简单:我使用了错误的区域。但我真的很感激你详细的回答,它也真的很有帮助!最好先检查cli。