Node.js使用Nodemailer运行sendEmail.js报错:未定义EMAIL_SMTP配置项
解决Nodemailer配置读取失败问题
针对你遇到的配置目录未找到和Error: Configuration property "EMAIL_SMTP" is not defined问题,按以下步骤排查:
1. 修正config模块的路径指向
config模块默认读取项目根目录下的config文件夹,而你的配置目录在/home/ayeen/manage/proj-ang/server/utils/config,需要手动指定路径:
// sendEmail.js 顶部添加路径设置 const config = require('config'); config.util.setPath('/home/ayeen/manage/proj-ang/server/utils/config'); // 之后再获取配置 const emailSmtp = config.get('EMAIL_SMTP');
或者通过环境变量提前指定:
# 运行项目前设置 export NODE_CONFIG_DIR=/home/ayeen/manage/proj-ang/server/utils/config
2. 检查default.json的格式与内容
确保JSON无语法错误,且EMAIL_SMTP为顶级配置项:
// /home/ayeen/manage/proj-ang/server/utils/config/default.json { "EMAIL_SMTP": { "host": "smtp.gmail.com", "port": 587, "secure": false, "auth": { "user": "your-email@domain.com", "pass": "your-app-password" } } }
注意:JSON不允许末尾多余逗号,可使用jsonlint工具快速校验格式。
3. 验证config模块的读取逻辑
在sendEmail.js中添加调试代码,确认配置是否被正确加载:
const config = require('config'); config.util.setPath('/home/ayeen/manage/proj-ang/server/utils/config'); // 打印全部配置,确认是否包含EMAIL_SMTP console.log('Loaded config:', config); try { const emailSmtp = config.get('EMAIL_SMTP'); console.log('Email SMTP config:', emailSmtp); } catch (err) { console.error('Config error:', err.message); }
如果打印的config为空,说明路径或文件权限存在问题。
4. 检查文件权限与路径拼写
Linux系统下确保config目录和default.json有可读权限:
chmod -R 644 /home/ayeen/manage/proj-ang/server/utils/config
同时确认路径拼写无大小写错误(Linux路径区分大小写)。
5. 排除环境变量干扰
如果设置了NODE_ENV,config模块会优先加载对应环境的配置文件(比如development.json),若该文件未定义EMAIL_SMTP会报错。可以临时取消环境变量测试:
unset NODE_ENV node sendEmail.js
内容的提问来源于stack exchange,提问作者Student mern
相关产品推荐
相关产品推荐

