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

Node.js使用@emailjs/nodejs时出现模块找不到错误求助

解决Node.js中@emailjs/nodejs的ES模块导入错误

问题原因

错误提示找不到EmailJSResponseStatus模块,本质是Node.js的ES模块解析规则要求导入必须包含完整文件扩展名,但@emailjs/nodejs包内的mjs/index.js文件中使用了省略扩展名的导入路径(比如./models/EmailJSResponseStatus),导致Node.js无法定位到对应的.js文件。

解决方案

1. 临时修复(快速生效)

手动修改node_modules/@emailjs/nodejs/mjs/index.js中的导入语句,补充完整的.js扩展名:

// 修改前
import { EmailJSResponseStatus } from './models/EmailJSResponseStatus';
import { init } from './methods/init/init';
import { send } from './methods/send/send';

// 修改后
import { EmailJSResponseStatus } from './models/EmailJSResponseStatus.js';
import { init } from './methods/init/init.js';
import { send } from './methods/send/send.js';

注意:此修复是临时的,重新执行npm install会覆盖修改内容。

2. 改用CommonJS语法(长期稳定)

如果项目允许切换模块系统,将ES模块语法改为CommonJS:

  • 修改emailService.js的导入方式:
const emailjs = require("@emailjs/nodejs");

exports.sendPasswordResetEmail = async (emailData) => {
  try {
    const response = await emailjs.send(
      process.env.EMAIL_SERVICE_ID,
      process.env.EMAIL_TEMPLATE_ID,
      {
        to_email: emailData.receiver,
        subject: "Password Reset",
        template_params: {
          user_email: emailData.receiver,
          message: `Click the following link to reset your password: ${emailData.link}`,
        },
      },
      process.env.EMAIL_USER_ID
    );
    console.log('Email sent successfully:', response);
  } catch (error) {
    console.error('Error sending email:', error);
    throw error;
  }
}
  • 如果你的package.json中设置了"type": "module",可以移除该配置,或者将emailService.js重命名为emailService.cjs。

3. 反馈包问题(从根源解决)

这是@emailjs/nodejs包本身的ES模块兼容性问题,你可以:

  • 前往该包的GitHub仓库提交Issue,说明Node.js ES模块需要完整文件扩展名的问题。
  • 尝试降级到该包的旧版本,查看是否存在没有此问题的版本(比如查看包的release日志)。

内容的提问来源于stack exchange,提问作者Shahood Amir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:20:15