【问题标题】:Call external mail api within lambda function在 lambda 函数中调用外部邮件 api
【发布时间】:2019-04-23 21:43:37
【问题描述】:

我使用 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"} 但没有电子邮件。并且 cloudwatch 控制台没有错误。

【问题讨论】:

    标签: amazon-web-services api aws-lambda


    【解决方案1】:

    更新:

    如果我包含所有发送电子邮件代码,它可以工作:

    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 } });
    
    

    问题是我无法为需要发送的每封电子邮件包含相同的代码。我需要让它从外部模块工作。

    【讨论】:

      【解决方案2】:

      第二次更新:代码运行良好,问题出在 caludiajs apibuilder 中,我无法从 api.post("something") 块调用外部函数,我将尝试了解如何..

      【讨论】:

        猜你喜欢
        • 2020-11-21
        • 2018-07-28
        • 2021-07-29
        • 1970-01-01
        • 2019-04-08
        • 1970-01-01
        • 2017-09-25
        • 2023-02-21
        • 1970-01-01
        相关资源
        最近更新 更多