.env 文件更改了 mailgun.js 的行为

问题描述 投票:0回答:1

动机和预期行为

我想创建一个简单的 CRUD 应用程序,一旦用户将项目输入到待办事项列表中,它就会执行两件事:

  1. 将其保存到数据库 (Supabase) 中的表中。
  2. 将项目发送到特定电子邮件地址 (Mailgun)。

技术堆栈是 Next、Supabase、Mailgun。 基本思想是结合两个已有的快速入门示例,请参阅详细信息此处

文件中的API_KEY和DOMAIN没有明显问题

我将此文件放在

./components
目录下。

import FormData from "form-data"
import Mailgun from "mailgun.js"

const API_KEY = "secret"
const DOMAIN = "secret.mailgun.org"

export async function sendEmail(email: any) {
  console.log(API_KEY)
  console.log(DOMAIN)

  const mailgun = new Mailgun(FormData)
  const client = mailgun.client({ username: "api", key: API_KEY })

  const messageData = {
    from: ` Contact <contact@${DOMAIN}>`,
    // to: specified email
    subject: "new item!",
    text: `Hello!  Here is the new item${item}.
    `,
  }
  try {
    const emailRes = await client.messages.create(DOMAIN, messageData)
    console.log(emailRes)
  } catch (err: any) {
    console.log("an error")
    console.log(err)
  }
}

然后我在其他组件中导入并调用

sendEmail()
TodoList.tsx

此控制台记录一条 {status: 200} 消息,不久之后我指定的电子邮件就会收到该电子邮件。

.env 改变行为

但是当我使用 .env 和 .env.local 代替时,即将 API_KEY 和 DOMAIN 更改为:

require("dotenv").config()

// I understand I should not use "NEXT_PUBLIC_", but just for illustration purpose.
const API_KEY = process.env.NEXT_PUBLIC_MAILGUN_API_KEY as string
const DOMAIN = process.env.NEXT_PUBLIC_MAILGUN_DOMAIN as string

Mailgun 给我一个 {status: 401} 错误(未经授权),尽管:

  • 我的控制台仍然正确注销 api 密钥和域。
  • 其他一切都没有改变。

为什么? 为什么使用 .env 文件会改变 Mailgun.js 的行为?

调试尝试

  • 我考虑过客户端/服务器组件是否可能导致该问题。 但无论我在

    export async function sendEmail(email: any) {
    行之后添加“使用客户端”还是“使用服务器”,问题仍然存在。

  • 我考虑过让mailgun.js 返回更有意义的错误消息,但没有成功。

next.js supabase mailgun dotenv .env
1个回答
0
投票

我的推理是正确的。 我被 .env 文件上的 API 密钥不匹配的尾随“所困扰。

© www.soinside.com 2019 - 2024. All rights reserved.