[英]Call external mail api within lambda function
我使用claudiajs apibuilder开发一些REST API。 我想在这个api中使用pepipost email api来发送交易电子邮件。 在测试期间,api在我的lambda函数之外工作得很好。 当我在lambda中包含epi时,它们会停止工作并且不会抛出任何错误。
有一些权限设置? 或其他设置调用外部api所需的设置?
我试图清理该功能,只留下发送的电子邮件,以便更好地调试它
这是测试终结
api.post('/users/test', function(request) {
return new Promise((resolve, reject) => {
let eTo = "email@email.com",
eSubject = 'Activate your account',
eAttributes = {
THE_NAME : "userData.name",
THE_ACTIVATION_URL : "config.activationUrl"+"/123456",
THE_ACTIVATION_LINK : "config.activationLink",
THE_ACTIVATION_CODE : "aToken"
},
eType = 'eTActivationEN',
eTags = 'activation';
sendemail( eTo, eSubject, eAttributes, eType, eTags );
resolve( { "success" : "works" } );
});
},{ success : { code : 200}, error : { code : 401 } });
这是发送电子邮件的模块:
var http = require("https");
var e = require('./../config.json');
module.exports.send = ( eTo, eSubject, eAttributes, eType, eTags ) => {
return new Promise( (resolve, reject) => {
var options = {
"method": "POST",
"hostname": "api.pepipost.com",
"port": null,
"path": "/v2/sendEmail",
"headers": {
"content-type": "application/json",
"api_key": e.ePepipostToken
}
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
output = body.toString();
resolve ( output );
});
});
req.write(JSON.stringify({
personalizations: [
{
recipient: eTo,
attributes: eAttributes
}
],
from: { fromEmail: e.eFromAddress, fromName: e.eFromName },
subject: eSubject,
templateId: 18924,
tags: eTags,
content: "content" }));
req.end();
}) // end Promise
}
同样的模块在lambda之外运行良好,但不在内部工作。 当我尝试呼叫端点时,我收到{“success”:“works”}但没有电子邮件。 没有错误il cloudwatch控制台。
更新:
如果我包含它的所有发送电子邮件代码:
api.post('/users/test2', function(request) {
return new Promise((resolve, reject) => {
var http = require("https");
var options = {
"method": "POST",
"hostname": "api.pepipost.com",
"port": null,
"path": "/v2/sendEmail",
"headers": {
"content-type": "application/json",
"api_key": config.ePepipostToken
}
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
output = body.toString();
resolve ( output );
});
});
eAttributes = {
THE_NAME : "userData.name",
THE_ACTIVATION_URL : "config.activationUrl"+"/123456",
THE_ACTIVATION_LINK : "config.activationLink",
THE_ACTIVATION_CODE : "aToken"
}
req.write(JSON.stringify({
personalizations: [
{
recipient: "email@email.com",
attributes: eAttributes
}
],
from: { fromEmail: "devm425tj@pepisandbox.com", fromName: "me" },
subject: "eSubject",
templateId: 18924,
tags: "activation",
content: "content" }));
req.end();
});
},{ success : { code : 200}, error : { code : 401 } });
问题是我不能为每个需要发送的电子邮件包含相同的代码。 我需要让它从外部模块工作。
第二次更新:代码运行良好,问题出在caludiajs apibuilder,我无法从api.post(“something”)块调用外部函数,我会试着理解如何...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.