[英]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.