为了满足以下要求,我需要解决我面临的一个问题:
要求:1.通过POST方法将HTML表单中的表单数据提交到lambda函数的API网关。电子邮件地址中的参数之一。2.将参数从POST请求传递到lambda函数。Lambda函数应通过SES向收件人发送电子邮件
问题:我可以通过POST调用来执行lambda函数,但无法传递变量。
测试用例:为了测试功能,我已经对收件人地址进行了硬编码,以便在lambda函数被点击时会收到一封电子邮件。我正在尝试传递“名称”参数,并让电子邮件的正文响应-嗨,“名称”。目前,我得到的答复是-Hi hi undefined。
下面是我正在使用的代码
// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
var aws = require('aws-sdk');
var ses = new aws.SES({ region: 'us-west-2' });
exports.handler = (event, context, callback) => {
const emailbody = JSON.parse(event.body)
var params = {
Destination: {
ToAddresses:
},
Message: {
Body: {
Text: {
Data: "Hi" + JSON.stringify(emailbody.name)
}
},
Subject: {
Data: "Test Email from lambda"
}
},
Source: "[email protected]"
};
ses.sendEmail(params, function (err, data) {
callback(null, { err: err, data: data });
if (err) {
console.log(err);
context.fail(err);
} else {
console.log(data);
context.succeed(event);
参考:https : //aws.amazon.com/premiumsupport/knowledge-center/lambda-send-email-ses/
我也尝试直接通过event.name传递变量,但没有成功插入变量。
// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
var aws = require('aws-sdk');
var ses = new aws.SES({ region: 'ap-south-1' });
exports.handler = (event, context, callback) => {
// const emailbody = JSON.parse(event.body);
var params = {
Destination: {
ToAddresses: ["[email protected]"]
},
Message: {
Body: {
Text: {
Data: "Hi" + JSON.stringify(event.name)
}
},
Subject: {
Data: "Test Email from lambda"
}
},
Source: "[email protected]"
};
ses.sendEmail(params, function (err, data) {
callback(null, { err: err, data: data });
if (err) {
console.log(err);
context.fail(err);
} else {
console.log(data);
context.succeed(event);
}
});
};
我对开发和API世界非常陌生。任何帮助,将不胜感激 :)
活动主体
{"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","Accept-Encoding":"gzip, deflate, br","Accept-Language":"en-US,en;q=0.9","cache-control":"max-age=0","CloudFront-Forwarded-Proto":"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Mobile-Viewer":"false","CloudFront-Is-SmartTV-Viewer":"false","CloudFront-Is-Tablet-Viewer":"false","CloudFront-Viewer-Country":"JP","content-type":"application/x-www-form-urlencoded","Host":"8x4r6h1ko3.execute-api.ap-south-1.amazonaws.com","origin":"null","sec-fetch-mode":"navigate","sec-fetch-site":"cross-site","sec-fetch-user":"?1","upgrade-insecure-requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36","Via":"2.0 1eaa44d3cb0c85af04bf84d0f0c5256f.cloudfront.net (CloudFront)","X-Amz-Cf-Id":"z5idar1dflmmUP7OeYfF6lc70fTpb9_hOeZHjDaNkVKVyy31tB8u_Q==","X-Amzn-Trace-Id":"Root=1-5e173941-6ad68db372cf676f8268bfa7","X-Forwarded-For":"126.51.226.203, 64.252.167.136","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"multiValueHeaders":{"Accept":["text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"],"Accept-Encoding":["gzip, deflate, br"],"Accept-Language":["en-US,en;q=0.9"],"cache-control":["max-age=0"],"CloudFront-Forwarded-Proto":["https"],"CloudFront-Is-Desktop-Viewer":["true"],"CloudFront-Is-Mobile-Viewer":["false"],"CloudFront-Is-SmartTV-Viewer":["false"],"CloudFront-Is-Tablet-Viewer":["false"],"CloudFront-Viewer-Country":["JP"],"content-type":["application/x-www-form-urlencoded"],"Host":["8x4r6h1ko3.execute-api.ap-south-1.amazonaws.com"],"origin":["null"],"sec-fetch-mode":["navigate"],"sec-fetch-site":["cross-site"],"sec-fetch-user":["?1"],"upgrade-insecure-requests":["1"],"User-Agent":["Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"],"Via":["2.0 1eaa44d3cb0c85af04bf84d0f0c5256f.cloudfront.net (CloudFront)"],"X-Amz-Cf-Id":["z5idar1dflmmUP7OeYfF6lc70fTpb9_hOeZHjDaNkVKVyy31tB8u_Q=="],"X-Amzn-Trace-Id":["Root=1-5e173941-6ad68db372cf676f8268bfa7"],"X-Forwarded-For":["126.51.226.203, 64.252.167.136"],"X-Forwarded-Port":["443"],"X-Forwarded-Proto":["https"]},"queryStringParameters":null,"multiValueQueryStringParameters":null,"pathParameters":null,"stageVariables":null,"requestContext":{"resourceId":"mmrduj26lk","resourcePath":"/","httpMethod":"POST","extendedRequestId":"GCXiOG99BcwFkdA=","requestTime":"09/Jan/2020:14:31:29 +0000","path":"/POST_Dev_Test","accountId":"856365680740","protocol":"HTTP/1.1","stage":"POST_Dev_Test","domainPrefix":"8x4r6h1ko3","requestTimeEpoch":1578580289353,"requestId":"010988e0-4598-4e88-af41-de42fa0b607e","identity":{"cognitoIdentityPoolId":null,"accountId":null,"cognitoIdentityId":null,"caller":null,"sourceIp":"126.51.226.203","principalOrgId":null,"accessKey":null,"cognitoAuthenticationType":null,"cognitoAuthenticationProvider":null,"userArn":null,"userAgent":"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36","user":null},"domainName":"8x4r6h1ko3.execute-api.ap-south-1.amazonaws.com","apiId":"8x4r6h1ko3"},"body":"name=Tera&email=aditya.prakash%40psyora.com","isBase64Encoded":false}
热烈的问候,阿迪
您所拥有的是一个查询字符串。查询是字符串,是您将值传递为的位置key=value&key2=value2
从API网关进行测试时,应在称为的部分下添加查询字符串,Query Strings
而不是Request Body
在您的情况下,查询字符串为:
name=Tera&email=aditya.prakash%40psyora.com
您应该在lambda内部以如下方式访问它event. queryStringParameters.name
:
您event.body
包含的值name=Tera&email=aditya.prakash%40psyora.com
表示您的表单已过帐x-www-form-urlencoded
。那就是从html表单提交表单的类型,因此,在您的情况下,您需要对lambda中的编码字符串进行解码。
const qs = require('querystring')
exports.handler = (event, context, callback) => {
const parsedQueryString = qs.parse(event.body)
const name = parsedQueryString.name
}
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句