簡體   English   中英

發送電子郵件時,Node.Js AWS SES-ETIMEDOUT

[英]Node.Js AWS SES - ETIMEDOUT when sending Email

我想向通過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 }

我不確定錯誤是否是由於我的代碼中的錯誤導致的,因為我目前僅使用沙盒環境。 但是我驗證了發送和接收電子郵件,即使在沙盒模式下也可以正常工作。


PS:我不確定在沙盒模式下如何正確測試我的應用程序,因為不允許發送未經驗證的電子郵件。 如果沒有運行適當的應用程序,是否可以請求生產訪問權限?

這並不明顯,因此我們需要進行一些故障排除。

首先,讓我們看看是否可以使用AWS CLI從本地計算機連接到SES API。 確保使用aws configure設置了aws憑證,然后嘗試:

aws ses list-identities

如果可行,您應該會看到經過驗證的電子郵件地址列表。 如果沒有,您將看到一個錯誤(可能是權限),或者超時提示網絡連接問題。

關於憑證的注意事項:不要在代碼中包含憑證,請配置.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,請確保安全組允許訪問AWS API。
  • 我希望它現在能正常運行,如果不能,我只能說轉到本頁並確保您沒有錯過任何明顯的內容。

您需要將區域從eu-central-1更改為端點存在的區域(例如eu-west-1),以便發送電子郵件

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

您需要確保您的用戶用來發送電子郵件

my_accessKeyId,
    my_secretAccessKey,

具有正確的IAM權限(已附加角色)以發送帶有ses的電子郵件。 我相信,請對角色SES進行完全訪問進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM