【问题标题】:aws ses.sendEmail working from local but not remoteaws ses.sendEmail 从本地工作但不是远程工作
【发布时间】:2022-01-14 09:33:09
【问题描述】:

我有一个应该发送电子邮件的 node.js 函数。当我使用 NODE REPL 在本地运行脚本时,它工作正常,并且我收到了预期的电子邮件。但是,当我将它部署到 AWS 时,我没有收到任何电子邮件。

我确实看到了类似标题的结果:aws ses.sendEmail is not being called from lambda function,但是,我没有使用异步。

let aws = require('aws-sdk'),
        ses = new aws.SES({ region: 'us-east-1' }),
        makeParams = request => {
            console.log('send' + request)
            // console.log('markparam: '+request)
            var emailBody = 'BOO bOO BAR';
            // console.log(request.body)
            for (var a in request.body) {
                // console.log(a);
                // emailBody +=' test'
                // console.log(request.body[a]);
                // emailBody += `${a}: ${request.body[a]}<br />`
            }

            return {
                Destination: { /* required */
                    ToAddresses: [
                        creators@xxxxxxxx.com
                    ]
                },
                Message: { /* required */
                    Body: { /* required */
                        Html: {
                            Data: emailBody, /* required */
                            Charset: 'UTF-8'
                        },
                        Text: {
                            // Data: emailBody.replace(/<br \/>/, "\r\n"), /* required */
                            Data: emailBody,
                            Charset: 'UTF-8'
                        }
                    },
                    Subject: { /* required */
                        Data: 'New Opportunity Submitted', /* required */
                        Charset: 'UTF-8'
                    }
                },
                Source: 'creators@xxxxxxxx.org'
                
            }
        },
        send = request => {
            console.log('send request: '+request.body)
            return ses.sendEmail(makeParams(request)).promise().then(function(data){
                console.log('data: '+data)
            }).catch(function(err){console.log('error: '+ err,err.stack)});
        };

When I run it locally using NODE this is my output:

Welcome to Node.js v14.17.6.
Type ".help" for more information.
> let b = require('./app/bindings.js')
undefined
> b.send({body: {foo:'bar',bar:'baz'}})
send request: [object Object]
send[object Object]
Promise { <pending> }
> data: [object Object]
> .exit

在这里您可以看到它在发送电子邮件后打印数据,向我确认它已发送。

但是,如果我尝试从我的网络应用程序远程执行此操作,或者使用 CURL 作为:

curl -X POST -d '{body: { foo:"bar",bar:"baz" }}' https://xxxxx4d.execute-api.us-east-1.amazonaws.com/latest/new-opportunity/

这会产生如下的 cloudwatch 日志:

2022-01-13T16:27:50.649-05:00   START RequestId: b7611af9-2b5a-4d29-a59f-ad074683982f Version: $LATEST

2022-01-13T16:27:50.653-05:00   2022-01-13T21:27:50.653Z b7611af9-2b5a-4d29-a59f-ad074683982f INFO request[object Object]

2022-01-13T16:27:50.653-05:00   2022-01-13T21:27:50.653Z b7611af9-2b5a-4d29-a59f-ad074683982f INFO send request: undefined

2022-01-13T16:27:50.673-05:00   2022-01-13T21:27:50.673Z b7611af9-2b5a-4d29-a59f-ad074683982f INFO send{body:{foo:'bar',bat:'baz'}}

2022-01-13T16:27:51.076-05:00   END RequestId: b7611af9-2b5a-4d29-a59f-ad074683982f

它似乎没有发送。这是相同的代码,没有任何更改,但我不知道为什么它会在本地运行和远程运行时发送电子邮件。

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda


    【解决方案1】:

    所以问题和解决方案是更早的。在我的index.js 中,我有实际的 API 调用:

    api.post('/new-opportunity', request =&gt; {console.log('request: '+request); bindings.send(request)});

    当我删除 console.log 并留下这个:

    api.post('/new-opportunity', request =&gt; bindings.send(request));

    它就像一个魅力。我不确定为什么是 console.log,对我和未来读者的任何见解将不胜感激。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 2021-07-14
      • 2015-09-12
      • 1970-01-01
      • 2023-04-03
      相关资源
      最近更新 更多