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

发送验证邮件时出现Internal Server Error问题求助

发送验证邮件时触发内部服务器错误的排查请求

问题描述

给新用户发送验证邮件时,点击触发按钮后出现Internal Server Error(内部服务器错误),请求协助排查并修复该问题。

报错截图

  • 错误提示截图:发送验证邮件时触发内部服务器错误
  • 错误详情截图:错误详情

备注:发送验证邮件时出现内部服务器错误

触发按钮截图

触发发送验证邮件的按钮

实现代码

// 发送验证邮件
const sendVerificationEmail = asyncHandler(async (req, res) => {
  const user = await User.findById(req.user._id);

  if (!user) {
    res.status(404);
    throw new Error("用户未找到");
  }

  if (user.isVerified) {
    res.status(400);
    throw new Error("用户已验证");
  }

  // 如果数据库中存在旧令牌则删除
  let token = await Token.findOne({ userId: user._id });
  if (token) {
    await token.deleteOne();
  }

  // 创建验证令牌并保存
  const verificationToken = crypto.randomBytes(32).toString("hex") + user._id;
  console.log(verificationToken);

  // 哈希令牌并保存到数据库
  const hashedToken = hashToken(verificationToken);
  await new Token({
    userId: user._id,
    vToken: hashedToken,
    createdAt: Date.now(),
    expiresAt: Date.now() + 60 * (60 * 1000), // 有效期60分钟
  }).save();

  // 构建验证链接
  const verificationUrl = `${process.env.FRONTEND_URL}/verify/${verificationToken}`;
  // 发送验证邮件

  const subject = "验证您的账户 - PrimeLodge";
  const send_to = user.email;
  const sent_from = process.env.EMAIL_USER;
  const reply_to = "noreply@primelodge.com";
  const template = "verifyEmail";
  const name = user.name;
  const link = verificationUrl;

  try {
    await sendEmail(
      subject,
      send_to,
      sent_from,
      reply_to,
      template,
      name,
      link
    );
    res.status(200).json({ message: "邮件已发送" });
  } catch (error) {
    console.error(error); // 打印错误日志
    res.status(500).json({ error: "邮件发送失败,请重试" });
  }
});

排查与修复方向

  • 检查未定义依赖:确认crypto模块是否正常引入(Node.js默认自带,需确保未误删);确认hashToken函数已正确定义,参数传递是否符合函数要求。
  • 数据库操作校验:检查Token模型的字段定义是否与代码匹配(比如vToken是否为字符串类型、expiresAt是否设置正确);确认数据库连接正常,操作权限无问题。
  • 环境变量验证:检查process.env.FRONTEND_URL和process.env.EMAIL_USER是否已正确配置,缺失会导致链接拼接或邮件发送失败。
  • sendEmail函数排查:核对邮件服务商的SMTP配置是否正确;确认verifyEmail模板存在;检查sendEmail的参数顺序是否与函数定义一致,避免参数错位引发错误。
  • 查看完整错误日志:服务器端的错误栈日志能定位具体出错行,比如是哈希令牌、保存令牌还是发送邮件环节出问题,优先查看这部分内容。

内容的提问来源于stack exchange,提问作者Cynos 28

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:50:09