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包
- 修改项目根目录的
package.json,添加一行"type": "module",让Node.js把所有.js文件当作ESM模块处理。 - 安装
emailjs包:
npm install emailjs
- 在
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请求完成邮件发送:
- 安装
axios(或node-fetch)用于发送HTTP请求:
npm install axios
- 在
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
相关产品推荐
相关产品推荐

