簡體   English   中英

Lambda 中的 SES.sendEmail 未調用 Promise

[英]SES.sendEmail in Lambda not calling Promise

當我調用 ses.sendEmail 時,永遠不會調用 promise。 這是我的 lambda 層中的 function 被我的 lambda function 調用。

這是我的 sendEmail function..

var aws = require ('aws-sdk')
var ses = new aws.SES ({region: 'us-west-2'});

exports.sendEmail = async (to, from, subject, body) => {

var params = {
    Destination: {
        ToAddresses : [to]
    },
    Message: {
        Body: {
            Html: { 
                Charset: "UTF-8",
                Data : body
            }
        },
        Subject: {
            Charset: "UTF-8",
            Data : subject
        }
    },
    Source: from
}

console.log ("Sending email with params (stringify) : ", JSON.stringify(params));

console.log ("SES = ", ses);

await ses.sendEmail (params, function (err, data) {

    console.log ("inside email");
});
}

我看到“Sending email with params (stringify)”日志 output 和“SES =”日志 output(顯示似乎是有效的 SES)。 但我從未在日志中看到“內部電子郵件”,也沒有收到任何電子郵件。

我也在 ses 沙箱之外,因為我在設置域並成功驗證所有內容后獲得了批准。 我在 us-west-2 區域。 我沒有驗證任何 email 地址。 只是域(即 name@user.host ... user.host 已驗證),正如我假設的那樣,如果域已驗證,那么來自該域的任何 email 都應該適合在“來自”中使用。

我使用 async await 而不是 promises。 我遇到了同樣的問題。 Email 在我的本地計算機上成功調度,但是當我部署 lambda 並開始對其進行實時測試時。 電子郵件未發送到提到的 email 地址。

    async function sendMail(content, email) {      
const params = {
        Destination: {
            ToAddresses: [email.toLowerCase()],
        },
        Message: {
            Body: {
                Text: {
                    Charset: "UTF-8",
                    Data: content.text,
                },
                Html: {
                    Charset: "UTF-8",
                    Data: content.html,
                },
            },
            Subject: {
                Charset: "UTF-8",
                Data: content.subject,
            },
        },
        Source: secretManagerData.senderEmail,
    };

    const sendPromise = await AWS_SES.sendEmail(params).promise();
    console.log(sendPromise);
   }

調用函數有錯誤。 當你調用 function 時,你不需要給它一個空間。

var aws = require('aws-sdk'); // these are functions, call them without space 
var ses = new aws.SES({region: 'us-west-2'}); // this

exports.sendEmail = async (to, from, subject, body) => {

try {
var params = {
    Destination: {
        ToAddresses : [to]
    },
    Message: {
        Body: {
            Html: { 
                Charset: "UTF-8",
                Data : body
            }
        },
        Subject: {
            Charset: "UTF-8",
            Data : subject
        }
    },
    Source: from
}

console.log("Sending email with params (stringify) : ", JSON.stringify(params));

console.log("SES = ", ses);

const data = await ses.sendEmail(params);
return data;
} catch (e) {
   console.log(e);
}
}

當你必須使用 async/await 時,你不需要使用回調並且總是使用 try/catch 和 async/await。

我遇到了同樣的問題,在使用 promise 調用 sendEmail 之前使用await並為 SES object 添加了 API 版本后解決了這個問題。

const AWS = require ('aws-sdk')
const SES = new AWS.SES({apiVersion: '2010-12-01'});
try{
await SES.sendEmail(params).promise();
      console.log("Email sent successfully");
}catch(err){
       console.log("Failed to send email");
}

暫無
暫無

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

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