如果任何术语或逻辑是荒谬的,我深表歉意,我已经因这个问题而陷入困境,我还是新手。我雇主以前的 Web 开发人员在一个静态网站上实施了一个联系表单,该网站利用 AWS 和 Amazon SES 转发电子邮件。我完全不知道这在亚马逊后端是如何工作的,而且我是办公室里唯一与技术相关的人,所以这一切都在我身上。我没有上级可以求助。这个附属的 AWS 账户不属于我的雇主所有 - 这是他以前员工的个人账户,所以我根本无法访问它。我必须自己重新做这件事。
据我所知,提交表单将数据发送到 AWS API,然后触发调用 Lambda 函数的某些东西,然后让 SES 向我的雇主发送一封包含客户信息的电子邮件。
我用谷歌搜索了 AWS+Amazon SES 邮件转发并看到了这个教程:https ://www.freecodecamp.org/news/how-to-receive-emails-via-your-sites-contact-us-form-with- aws-ses-lambda-api-gateway/
这正是正在使用的内容以及我需要实施的内容,但我遇到了问题。
通过教程,我设置了:
- SES(已验证我的电子邮件地址)
- IAM 政策
- IAM 角色,附加到 lambda 并链接到权限策略
- 创建了 Lambda 函数并对其进行了测试(它成功地从 Lambda 函数仪表板向我发送了电子邮件)
- API 网关
Lambda 函数和 SES 一样有效。如果没有,我将不会收到测试电子邮件。我按照教程的下一部分要求我使用此代码:
const form = document.querySelector("form");
form.addEventListener("submit", (event) => {
// prevent the form submit from refreshing the page
event.preventDefault();
const { name, email, message } = event.target;
// Use your API endpoint URL you copied from the previous step
const endpoint =
"<https://XXXXXXXXXX.execute-api.us-east-2.amazonaws.com/default/sendContactEmail>";
// We use JSON.stringify here so the data can be sent as a string via 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("Error in fetch");
return response.json();
})
.then((response) => {
document.getElementById("result-text").innerText =
"Email sent successfully!";
})
.catch((error) => {
document.getElementById("result-text").innerText =
"An unkown error occured.";
});
});
显然我复制/粘贴了我的 API 网关而不是 XXXXXXXXX。
我已经在两个环境中对此进行了测试,我的本地机器与 Visual Studio Code 实时服务器和网站。当我在其中任何一个上提交表单时,我都会收到两个单独的错误。
本地 VSC 错误:405 - 方法不允许
网站错误:404 - 未找到
我不确定问题出在哪里,但如果我必须做出有根据的猜测,它必须与 API 做一些事情。我不确定为什么错误不同,我将完全相同的文件上传到 Web 服务器。我难住了。电子邮件没有通过,更糟糕的是,我收到“发生未知错误”消息。
任何帮助,将不胜感激。
编辑:我想出了问题所在。我遵循的教程有由 < 和 > 包围的 API 端点(你可以在上面看到。)那些不应该在那里。就像我提到的那样,这对我来说是新的,所以我用我自己的替换了示例键。我知道网址有问题...