AWS SES搭配Lambda部署后表单提交API返回404、405错误求助
基于AWS SES+Lambda+API网关实现静态站联系表单邮件转发的部署问题
若存在术语或逻辑表述不当还请谅解,我刚接触相关技术就遇到该问题。我司前开发人员在静态网站上实现了一套依托AWS和Amazon SES转发邮件的联系表单,我完全不了解亚马逊后端运行逻辑,且公司无其他技术人员可对接,关联AWS账户归属前员工个人我无法访问,只能自行重新实现这套功能。
我梳理得出的流程是:表单提交后将数据发送到AWS API,触发Lambda函数调用SES向我司负责人发送携带客户信息的邮件。
我搜索AWS+Amazon SES邮件转发相关内容时找到匹配我需求的实现教程,部署过程中遇到了问题。
我按照教程完成了如下配置:
- SES(已完成邮箱地址验证)
- IAM Policy
- IAM Role(绑定到Lambda并关联了权限策略)
- 创建Lambda函数并完成测试,在Lambda控制台可成功发送测试邮件
- API Gateway配置
Lambda和SES功能均正常,否则我无法收到测试邮件。后续我按照教程要求使用如下前端代码:
const form = document.querySelector("form"); form.addEventListener("submit", (event) => { // 阻止表单提交刷新页面 event.preventDefault(); const { name, email, message } = event.target; // 替换为上一步复制的API端点URL const endpoint = "<https://XXXXXXXXXX.execute-api.us-east-2.amazonaws.com/default/sendContactEmail>"; // 调用JSON.stringify将数据转换为HTTP可传输的字符串格式 const body = JSON.stringify({ senderName: name.value, senderEmail: email.value, message: message.value }); const requestOptions = { method: "POST", body }; fetch(endpoint, requestOptions) .then((response) => { if (!response.ok) throw new Error("请求出错"); return response.json(); }) .then((response) => { document.getElementById("result-text").innerText = "邮件发送成功!"; }) .catch((error) => { document.getElementById("result-text").innerText = "发生未知错误。"; }); });
我将代码中的占位符替换为自己的API网关地址后,在两个环境测试:Visual Studio Code本地live server环境和线上网站环境,提交表单时返回两个不同错误:本地VS环境报405 - Method Not Allowed,线上网站报404 - Not Found。我上传到服务器的代码和本地完全一致,不清楚为什么报错不同,猜测是API相关配置问题,邮件无法成功发送,前端提示未知错误,恳请各位帮忙排查。
更新
我已找到问题根源:教程中的API endpoint地址外层包裹了<和>符号,实际使用时需要去掉这两个符号,我此前仅替换了占位的API标识,没有去掉符号,才导致URL错误。
内容的提问来源于stack exchange,提问作者Sanobelk
相关产品推荐
相关产品推荐

