【问题标题】:How can I get my Next.JS API email route to send the host IP address to SendGrid?如何获取我的 Next.JS API 电子邮件路由以将主机 IP 地址发送到 SendGrid?
【发布时间】:2021-11-15 12:12:59
【问题描述】:

我在 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“允许列表”。我的 SendGrid 帐户中的 IP 地址有助于提高安全性,我一直假设 Next.js 的 /api 端点在 Next.js 上运行 webhost 端,因此我期望 IP 地址是 webhost 的 IP 地址,因此是相同的每次。但是,发送的 IP 地址不是虚拟主机的 IP 地址,而是客户端计算机的 IP 地址,因此被“列入黑名单”。我是否对 Next.js /api 运行 webhost 端做出了错误的假设,还是我做错了什么?

非常感谢。

【问题讨论】:

  • API 路由确实在服务器上运行。你如何测试这个?启动 Next.js 服务器的机器是否与在浏览器中访问应用程序的机器相同?还是您远程托管 Next.js 应用程序?
  • 谢谢@juliomalves。对于测试,该应用程序托管在 Heroku 上。所以我假设 /api 端点也会在服务器上运行?但是,当 api 路由进行 fetch 调用时,SendGrid 看起来好像它来自客户端计算机。 SendGrid 向我发送一封电子邮件,警告说一个不允许的列表 IP 已尝试连接到该服务。它还给了我有问题的 IP,这与测试客户端的 IP 相匹配。希望这是有道理的。

标签: next.js sendgrid sendgrid-api-v3


【解决方案1】:

事实证明 Heroku 的主机 IP 是动态的,因此它们会不时变化。您可以下载免费(有限)或付费插件,例如QuotaGuard 或 Fixie 以确保您的应用始终显示为静态地址。

最后,我在自己拥有的 API 上创建了自己的代理。我的应用程序从我的应用程序发送 SendGrid 电子邮件请求,代理 API 将其“中继”到 SendGrid。我的 API 的 IP 是固定的,我将其添加到允许列表中。有点痛,但你有它。

【讨论】:

    猜你喜欢
    • 2021-07-10
    • 2012-01-21
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多