You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js+Resend邮件提交组件出现500内部服务器错误求助

排查Next.js + Resend邮件表单的500错误(EmailTemplate is not a function)

1. 检查EmailTemplate组件的导出与定义

核心问题大概率是组件导出/导入不匹配,或者组件本身未正确定义为函数:

  • 默认导出示例(推荐):
// EmailTemplate.jsx
export default function EmailTemplate({ name, email, message }) {
  return (
    <div>
      <h2>新的联系消息</h2>
      <p>发送人:{name}</p>
      <p>邮箱:{email}</p>
      <p>内容:{message}</p>
    </div>
  );
}
  • 如果用命名导出,要确保导入时对应:
// EmailTemplate.jsx
export function EmailTemplate({ name, email, message }) { /* 组件内容 */ }

// 导入时必须加花括号
import { EmailTemplate } from '@/components/EmailTemplate';

2. 修正API路由(route.js)的导入与调用

确保在API路由中正确导入组件,并以函数方式调用传递props:

// app/api/contact/route.js
import { Resend } from 'resend';
import EmailTemplate from '@/components/EmailTemplate'; // 对应默认导出

const resend = new Resend(process.env.RESEND_API_KEY);

export async function POST(request) {
  try {
    const { name, email, message } = await request.json();
    
    const { data, error } = await resend.emails.send({
      from: '表单通知 <onboarding@resend.dev>',
      to: ['你的目标邮箱@example.com'],
      subject: '新的联系表单提交',
      react: EmailTemplate({ name, email, message }), // 必须是函数调用,传递参数
    });

    if (error) return Response.json({ error }, { status: 400 });
    return Response.json(data);
  } catch (err) {
    return Response.json({ error: err.message }, { status: 500 });
  }
}

3. 确认Contact.jsx的表单提交逻辑

保证表单提交时正确发送JSON格式数据到API:

// Contact.jsx
'use client';

export default function Contact() {
  const handleSubmit = async (e) => {
    e.preventDefault();
    const formData = new FormData(e.target);
    const payload = Object.fromEntries(formData);

    try {
      const res = await fetch('/api/contact', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(payload),
      });

      if (!res.ok) throw new Error('提交失败');
      alert('消息发送成功');
      e.target.reset();
    } catch (err) {
      alert(`提交出错:${err.message}`);
    }
  };

  return (
    <form onSubmit={handleSubmit} className="space-y-4">
      <input type="text" name="name" placeholder="姓名" required />
      <input type="email" name="email" placeholder="邮箱" required />
      <textarea name="message" placeholder="你的消息" rows={4} required />
      <button type="submit" className="px-4 py-2 bg-blue-500 text-white">发送</button>
    </form>
  );
}

4. 常见错误排查清单

  • 导出/导入不匹配:默认导出对应无花括号导入,命名导出必须带花括号
  • EmailTemplate未定义为函数组件(比如写成类组件,或未返回JSX)
  • API路由中调用EmailTemplate时未传递必要的props
  • 环境变量RESEND_API_KEY未在.env.local中正确配置

内容的提问来源于stack exchange,提问作者Mohammed Al-Musawi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:57:44