我想创建一个简单的 CRUD 应用程序,一旦用户将项目输入到待办事项列表中,它就会执行两件事:
技术堆栈是 Next、Supabase、Mailgun。 基本思想是结合两个已有的快速入门示例,请参阅详细信息此处。
我将此文件放在
./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.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} 错误(未经授权),尽管:
为什么? 为什么使用 .env 文件会改变 Mailgun.js 的行为?
我考虑过客户端/服务器组件是否可能导致该问题。 但无论我在
export async function sendEmail(email: any) {
行之后添加“使用客户端”还是“使用服务器”,问题仍然存在。
我考虑过让mailgun.js 返回更有意义的错误消息,但没有成功。
我的推理是正确的。 我被 .env 文件上的 API 密钥不匹配的尾随“所困扰。