使用 AWS SES 发送电子邮件时,节点 js 无法捕获错误
Node js unable to catch errors when sending an email using AWS SES
我需要能够捕获在使用 Express 和 AWS SES 发送电子邮件的过程中发生的错误。如果发生错误,例如错误的电子邮件,API 本身会显示 CORS 错误,而在 nodemon 控制台中会记录错误。
const AWS = require('aws-sdk');
const SES_CONFIG = {
accessKeyId: '...',
secretAccessKey: '...',
region: '...',
};
const AWS_SES = new AWS.SES(SES_CONFIG);
let sendEmail = (recipientEmail, name) => {
let params = {
Source: '...@gmail.com',
Destination: {
ToAddresses: [
recipientEmail
],
},
ReplyToAddresses: [],
Message: {
Body: {
Html: {
Charset: 'UTF-8',
Data: 'This is the body of my email!',
},
},
Subject: {
Charset: 'UTF-8',
Data: `Hello, ${name}!`,
}
},
};
return AWS_SES.sendEmail(params).promise();
};
API端点:
router.post('/emailTest', async (req, res) => {
try {
sendEmail('...@gmail.com', '...', function (err, data) {
if (err)
res.send(err);
res.send(data);
});
} catch (error) {
res.json({
Status: 500,
header: 'Error',
message: 'Internal Server Error. ' + error.message
});
} })
您正在使用回调调用 sendEmail 函数,但您的函数未使用任何回调。它 returns 一个承诺。
尝试使用 await。
router.post('/emailTest', async (req, res) => {
try {
const data = await sendEmail('...@gmail.com', '...');
res.send(data);
} catch (error) {
res.json({
Status: 500,
header: 'Error',
message: 'Internal Server Error. ' + error.message
});
} })
我需要能够捕获在使用 Express 和 AWS SES 发送电子邮件的过程中发生的错误。如果发生错误,例如错误的电子邮件,API 本身会显示 CORS 错误,而在 nodemon 控制台中会记录错误。
const AWS = require('aws-sdk');
const SES_CONFIG = {
accessKeyId: '...',
secretAccessKey: '...',
region: '...',
};
const AWS_SES = new AWS.SES(SES_CONFIG);
let sendEmail = (recipientEmail, name) => {
let params = {
Source: '...@gmail.com',
Destination: {
ToAddresses: [
recipientEmail
],
},
ReplyToAddresses: [],
Message: {
Body: {
Html: {
Charset: 'UTF-8',
Data: 'This is the body of my email!',
},
},
Subject: {
Charset: 'UTF-8',
Data: `Hello, ${name}!`,
}
},
};
return AWS_SES.sendEmail(params).promise();
};
API端点:
router.post('/emailTest', async (req, res) => {
try {
sendEmail('...@gmail.com', '...', function (err, data) {
if (err)
res.send(err);
res.send(data);
});
} catch (error) {
res.json({
Status: 500,
header: 'Error',
message: 'Internal Server Error. ' + error.message
});
} })
您正在使用回调调用 sendEmail 函数,但您的函数未使用任何回调。它 returns 一个承诺。
尝试使用 await。
router.post('/emailTest', async (req, res) => {
try {
const data = await sendEmail('...@gmail.com', '...');
res.send(data);
} catch (error) {
res.json({
Status: 500,
header: 'Error',
message: 'Internal Server Error. ' + error.message
});
} })