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

Express后端使用EmailJS发送Gmail邮件报错问题排查

解决Express后端用EmailJS发送Gmail的问题

你用错了EmailJS的包,这是导致两个错误的核心原因:

  • emailjs包现在是纯ESM模块,如果你用CommonJS的require()导入,就会触发ERR_REQUIRE_ESM错误,因为它不再支持CommonJS的同步导入方式。
  • @emailjs/browser是专门为浏览器环境设计的SDK,后端Node.js环境下缺少它依赖的浏览器API,所以调用时会出现SMTPClient is not a constructor这类兼容性错误。

下面是两种可行的解决方案:

方案一:改用ESM格式使用emailjs包

  1. 修改项目根目录的package.json,添加一行"type": "module",让Node.js把所有.js文件当作ESM模块处理。
  2. 安装emailjs包:
npm install emailjs
  1. 在server.js中用import导入并实现路由:
import express from 'express';
import { SMTPClient } from 'emailjs';

const app = express();
app.use(express.json());

// 初始化SMTP客户端(Gmail配置)
const emailClient = new SMTPClient({
  user: '你的Gmail邮箱地址',
  password: '你的Gmail应用专用密码', // 注意:开启两步验证后必须用应用专用密码,不能用普通密码
  host: 'smtp.gmail.com',
  ssl: true,
});

// 邮件发送路由
app.post('/send-email', async (req, res) => {
  try {
    const emailContent = {
      text: req.body.message,
      from: '你的Gmail邮箱地址',
      to: '接收邮件的Gmail地址',
      subject: 'Express后端发送的邮件',
    };

    await emailClient.sendAsync(emailContent);
    res.status(200).send('邮件发送成功');
  } catch (err) {
    console.error('邮件发送失败:', err);
    res.status(500).send('邮件发送失败');
  }
});

app.listen(3000, () => {
  console.log('服务器运行在http://localhost:3000');
});

方案二:使用EmailJS REST API(无需处理模块兼容)

如果不想修改项目的模块格式,可以直接调用EmailJS的REST API,用HTTP请求完成邮件发送:

  1. 安装axios(或node-fetch)用于发送HTTP请求:
npm install axios
  1. 在server.js中实现路由:
const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.json());

app.post('/send-email', async (req, res) => {
  try {
    await axios.post('https://api.emailjs.com/api/v1.0/email/send', {
      service_id: '你的EmailJS服务ID', // 在EmailJS控制台创建的服务ID
      template_id: '你的EmailJS模板ID', // 自定义的邮件模板ID
      user_id: '你的EmailJS用户ID', // 控制台的Public Key
      accessToken: '你的EmailJS访问令牌', // 控制台的Private Key
      template_params: {
        from_name: req.body.senderName,
        message: req.body.message,
        to_email: '接收邮件的Gmail地址',
      },
    });

    res.status(200).send('邮件发送成功');
  } catch (err) {
    console.error('发送失败:', err.response?.data || err.message);
    res.status(500).send('邮件发送失败');
  }
});

app.listen(3000, () => {
  console.log('服务器运行在http://localhost:3000');
});

关键注意事项

  • 用Gmail发送邮件时,必须开启SMTP服务,并且如果你的账号开启了两步验证,需要在Google账号设置中生成应用专用密码,不能使用普通的登录密码。
  • EmailJS控制台的服务、模板、密钥信息需要正确对应,否则会出现权限或参数错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:31:00