如何获得我的 Next.JS API 电子邮件路由以将主机 IP 地址发送到 SendGrid?
How can I get my Next.JS API email route to send the host IP address to SendGrid?
我在 Next.js 应用程序中使用 /api 端点发送电子邮件。请求来自这样的客户端表单
(为简洁和安全而编辑了一些代码):
const onSubmit = async (data) => {
const result = await fetch('/api/customer_enquiry', {
method: 'POST',
body: JSON.stringify(data)
})
.then(res => {
router.push({
pathname: '/thanks'
})
})
}
并且 /api/customer_enquiry 端点是这样的:
...
const response = fetch(`https://api.sendgrid.com/v3/mail/send`, requestOptions)
res.status(200).json(response)
我选择了 IP 'allow-list'。我的 SendGrid 帐户中的 IP 地址有助于提高安全性,我假设 Next.js 的 /api 端点在 Next.js 上运行 webhost-side,所以我期望 IP 地址将是虚拟主机的,因此每次都相同。但是,发送的 IP 地址不是网络主机的 IP 地址,而是客户端计算机的 IP 地址,因此 'block-listed'。我对 Next.js /api 运行 webhost-side 做出了错误的假设还是我做错了什么?
非常感谢。
事实证明,Heroku 的主机 IP 是动态的,因此它们会不时发生变化。您可以下载免费(受限)或付费插件,例如QuotaGuard 或 Fixie 以确保您的应用始终显示为静态地址。
最后,我在自己的 API 上创建了自己的代理。我的应用程序从我的应用程序和代理 API 'relays' 发送 SendGrid 电子邮件请求到 SendGrid。我的 API 的 IP 是固定的,我将其添加到允许列表中。有点痛,但你知道了。
我在 Next.js 应用程序中使用 /api 端点发送电子邮件。请求来自这样的客户端表单 (为简洁和安全而编辑了一些代码):
const onSubmit = async (data) => {
const result = await fetch('/api/customer_enquiry', {
method: 'POST',
body: JSON.stringify(data)
})
.then(res => {
router.push({
pathname: '/thanks'
})
})
}
并且 /api/customer_enquiry 端点是这样的:
...
const response = fetch(`https://api.sendgrid.com/v3/mail/send`, requestOptions)
res.status(200).json(response)
我选择了 IP 'allow-list'。我的 SendGrid 帐户中的 IP 地址有助于提高安全性,我假设 Next.js 的 /api 端点在 Next.js 上运行 webhost-side,所以我期望 IP 地址将是虚拟主机的,因此每次都相同。但是,发送的 IP 地址不是网络主机的 IP 地址,而是客户端计算机的 IP 地址,因此 'block-listed'。我对 Next.js /api 运行 webhost-side 做出了错误的假设还是我做错了什么?
非常感谢。
事实证明,Heroku 的主机 IP 是动态的,因此它们会不时发生变化。您可以下载免费(受限)或付费插件,例如QuotaGuard 或 Fixie 以确保您的应用始终显示为静态地址。
最后,我在自己的 API 上创建了自己的代理。我的应用程序从我的应用程序和代理 API 'relays' 发送 SendGrid 电子邮件请求到 SendGrid。我的 API 的 IP 是固定的,我将其添加到允许列表中。有点痛,但你知道了。