簡體   English   中英

節點 AWS-SDK SES 電子郵件發送驗證失敗

[英]Node AWS-SDK SES email send verification fail

我正在使用 aws-sdk 和 Node 發送 AWS SES 電子郵件,並且我能夠使用 AWS CLI 成功發送電子郵件。 但是,在我的 Node 腳本中,由於某種原因,我的電子郵件驗證失敗。

下面是代碼:

const aws = require('aws-sdk')
const ses = new aws.SES()

const message = {
        Destination: {
            ToAddresses: ['example@example.com']
        },
        Message: {
            Body: {
                Text: {
                    Charset: 'UTF-8',
                    Data: 'Test body'
                }
            },
            Subject: {
                Charset: 'UTF-8',
                Data: 'Test subject'
            }
        },
        Source: 'example@example.com'
    }

ses.sendEmail(message, function (err, data) {
    if (err) console.log(err);
    else console.log(data);
});

以下是錯誤:

message: 'Email address is not verified. The following identities failed the check in region US-EAST-1: example@example.com',
  code: 'MessageRejected',
  time: 2017-12-15T15:37:26.312Z,
  requestId: 'random-id',
  statusCode: 400,
  retryable: false,
  retryDelay: 15.030260565173382

請幫忙! 謝謝!

根據AWS 故障排除文檔

電子郵件地址未驗證。 以下身份未能通過區域 (region) 簽入:(identity1)、(identity2)、(identity3) — 您正在嘗試從尚未使用 Amazon SES 驗證的電子郵件地址或域發送電子郵件。 此錯誤可能適用於“發件人”、“來源”、“發件人”或“返回路徑”地址。

如果您的賬戶仍在沙箱中,您還必須驗證每個收件人電子郵件地址,但 Amazon SES 郵箱模擬器提供的收件人除外。 如果 Amazon SES 無法顯示所有失敗的身份,則錯誤消息以省略號結尾。

注意:Amazon SES 在多個 AWS 區域具有終端節點,並且每個 AWS 區域的電子郵件地址驗證狀態是不同的。 您必須為要使用的 AWS 區域中的每個發件人完成驗證過程。

我強烈懷疑您的應用程序的配置與您用於通過 CLI 成功發送測試電子郵件的配置不是 100% 匹配。

檢查以下配置:

  • “源”地址必須是 us-east-1 區域中經過 SES 驗證的發件人。 檢查您希望從中發送電子郵件的源地址是否是您打算從中發送電子郵件的每個區域中經過驗證的發件人。
  • 如果啟用了 SES 沙盒模式,電子郵件收件人(“ToAddresses”值)也必須是 us-east-1 區域中經過 SES 驗證的發件人。 有關如何刪除此限制的說明,請參閱“ 退出 Amazon SES 沙盒”。
  • 確保您正在測試的所有客戶端都在同一區域中進行測試,因為每個區域的配置都需要不同。 錯誤消息提到應用程序試圖在 us-east-1 中命中 SES,因此請使用--region選項再次明確地在 us-east-1 區域中執行 CLI 測試。 如果使用 CLI 默認區域,則初始 CLI 測試可能存在缺陷,而該區域恰好不是 us-east-1。
  • 如果以上所有內容看起來都正確,請仔細檢查您的節點應用程序。 確保為您希望使用的區域配置了 SES 客戶端,並且客戶端正確地將您希望發送到 SES 請求的電子郵件寫入。

延伸閱讀

這是我使用帶有 express、ejs 和 npm 包 node-ses 的 node.js 的代碼

上面提到了解決方案,但很容易錯過。 這是第三部分,在密鑰和秘密之后,對亞馬遜的回調 - 網址需要在那里並且需要為您的地區定制,在我的例子中是 eu-west-1,另外兩個選擇是 us-east-1或 us-west-2。

在 IAM - User 中找到了密鑰和秘密。 一旦您設置了具有編程訪問權限和 AmazonSESFullAccess 權限的用戶。 選擇您的用戶,然后選擇“安全憑據”選項卡。 向下滑動並單擊創建訪問密鑰。

您只能訪問一次您的秘密密碼。 當您獲得訪問權限時,突出顯示秘密密碼,將其復制並與您的密鑰一起安全地粘貼到某處。

您的發件人電子郵件必須與在 AWS SES 頁面上注冊的域相關。 如果您不使用 Route 53 進行托管,您還需要在 AWS SES 頁面上注冊並驗證電子郵件。

路由器代碼如下:

app.post('/email', function(req, res) {
        var ses = require('node-ses'), 
          client = ses.createClient({ 
             key: 'xxx', 
             secret: 'xxx',
             amazon: 'https://email.eu-west-1.amazonaws.com'});
        client.sendEmail({
            to: 'xxx'
          , from: 'xxx'
          , cc: ''
          , bcc: ''
          , subject: 'greetings'
          , message: 'your <b>message</b> goes here'
          , altText: 'plain text'
         }, function (err, data, res) {
            if (err) {
                console.log('Email send Error: ',JSON.stringify(err, null, 2));
            } else {
                console.log('Email send Success: ', JSON.stringify(data,null,2));
            }
         });
    });

暫無
暫無

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

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