javascript - AWS Lambda nodejs 电子邮件发件人
问题描述
我是 aws 的新手,我正在尝试使用 lambda 无服务器服务发送电子邮件。我找到了 ses 电子邮件发件人功能并部署了它,但我遇到了错误。代码的第一部分(出现问题的地方):
const AWS = require('aws-sdk'),
SES = new AWS.SES(),
processResponse = require('./process-response.js'),
FROM_EMAIL = process.env.FROM_EMAIL,
UTF8CHARSET = 'UTF-8';
exports.handler = (event) => {
if (event.httpMethod === 'OPTIONS') {
return Promise.resolve(processResponse(true));
}
if (!event.body) {
return Promise.resolve(processResponse(true, 'Please specify email parameters: toEmails, subject, and message Wywala pierwsze ', 400));
}
const emailData = JSON.parse(event.body);
if (!emailData.toEmails || !emailData.subject || !emailData.message) {
return Promise.resolve(processResponse(true, 'Please specify email parameters: toEmails, subject and message', 400));
}
const destination = {
ToAddresses: emailData.toEmails
}
if (emailData.ccEmails) {
destination.CcAddresses = emailData.ccEmails;
}
const body = (emailData.message && isHTML(emailData.message)) ?
{ Html: { Charset: UTF8CHARSET, Data: emailData.message } } :
{ Text: { Charset: UTF8CHARSET, Data: emailData.message } };
const emailParams = {
Destination: destination,
Message: {
Body: body,
Subject: {
Charset: UTF8CHARSET,
Data: emailData.subject
}
},
Source: FROM_EMAIL
};
if (emailData.replyToEmails && Array.isArray(emailData.replyToEmails)) {
emailParams.ReplyToAddresses = emailData.replyToEmails;
}
return SES.sendEmail(emailParams).promise()
.then(() => (processResponse(true)))
.catch(err => {
console.error(err, err.stack);
const errorResponse = `Error: Execution update, caused a SES error, please look at your logs.`;
return processResponse(true, errorResponse, 500);
});
};
function isHTML(value) {
value = value.trim();
return value.startsWith('<') && value.endsWith('>') &&
(value.includes('<body') || value.includes('<div') || value.includes('<s') || value.includes('<h') || value.includes('<p'));
}
}
这就是我的发布请求的样子:
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"message":"messageexample", "subject":"sbujectexample", "toEmails":"myemail@gmail.com"}' https://mypath.execute-api.eu-west-1.amazonaws.com/Prod/send
在 curl 我收到这个错误:
curl: (3) Port number ended with 't'
curl: (3) [globbing] unmatched close brace/bracket in column 35
{"message": "Internal server error"}
我也尝试通过 Postman 应用程序发送它,但它也不起作用。
我究竟做错了什么?
这是我的 process-response.js:
module.exports = (isCors, body, statusCode) => {
const status = statusCode || (body ? 200 : 204);
const headers = { 'Content-Type': 'application/json' };
if (isCors) {
Object.assign(headers, {
'Access-Control-Allow-Headers': 'Content-Type,Authorization,X-Amz-Date,X-Api-Key,X-Amz-Security-Token',
'Access-Control-Allow-Methods': 'OPTIONS,POST',
'Access-Control-Allow-Origin': process.env.CORS_ORIGIN,
'Access-Control-Max-Age': '86400'
});
}
return {
statusCode: status,
body: JSON.stringify(body) || '',
headers: headers
};
};
解决方案
escaping double quote
在你的cURL
. double quote
通常,由于破坏了您的编码,应该会遇到这些错误。
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{\"message\":\"messageexample\", \"subjec\t":\"sbujectexample\", \"toEmails\":\"myemail@gmail.com\"}' https://mypath.execute-api.eu-west-1.amazonaws.com/Prod/send
推荐阅读
- javascript - 具有无服务器框架的 AWS Lambda 的导出处理程序函数
- mysql - 如何在mysql中选择表的其余部分?
- kubernetes - helm3 安装失败:安装后失败:等待条件超时
- git - Flutter 应用程序在 git 上使用 firebase 的问题
- kurento - Ant 媒体服务器与 Kurento 媒体服务器
- javascript - 空时将项目移动到左侧css html
- rest - Quarkus 找不到内容类型多部分/表单数据休息客户端的编写器
- python - 尝试使用 for 循环在 numpy 数组中追加新列
- c# - .net core,在 docker 中运行默认的 Angular 模板
- java - dl4j lstm 不成功