【发布时间】:2022-01-09 07:55:20
【问题描述】:
我正在 AWS Lambda 上运行一个通过 SMTP 发送电子邮件的简单函数。
该函数使用来自event 的各种参数,例如"event["reply_to_msg_id"]" 和"event["sender_name"]"。
import smtplib
from email.message import EmailMessage
from email.utils import make_msgid
def lambda_handler(event, context):
msg = EmailMessage()
if event["reply_to_msg_id"] != "":
msg['References'] = event["reply_to_msg_id"]
msg['In-Reply-To'] = event["reply_to_msg_id"]
msg['subject'] = "Re: " + event["content"]["Subject Line"]
else:
msg['subject'] = event["content"]["Subject Line"]
msg['from'] = event["sender_name"]
msg['To'] = event["target_email"]
msg['Message-ID'] = make_msgid('random_client_id')
msg.add_header('Content-Type', 'text/html')
msg.set_payload(event["content"]["Body"])
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
result = {"Message-ID": msg['Message-ID']}
try:
server.login(event["email_account"]["email_address"], event["email_account"]["password"])
server.send_message(msg)
server.quit()
result["Status"] = "Success"
except Exception as E:
result["Status"] = str(E)
return {
'statusCode': 200,
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
},
'body': json.dumps(result),
"isBase64Encoded": False
}
当我在 AWS Lambda 中使用以下主体运行测试事件时,一切正常:
{
"reply_to_msg_id": "",
"content": {
"Subject Line": "Test subject line.",
"Body": "This is <b>a body</b>."
},
"sender_name": "Joe Peschi",
"target_email": "test@gmail.com",
"email_account": {
"email_address": "***********",
"password": "***********"
}
}
问题:
我不知道如何使用 API 网关实际重现此内容。我为此函数创建了一个 API Gateway 触发器,但无论我尝试什么 - 我都无法正确地将上述参数传递给事件,就像我运行 Lambda 测试时一样。
【问题讨论】:
标签: amazon-web-services aws-lambda aws-api-gateway