Nodemailer发送txt附件时报ENOENT错误找不到指定文件问题求助
故障根因
你遇到的ENOENT报错本质是相对路径解析错误:本地运行时你是在js脚本所在目录启动Node进程,进程的工作目录(cwd)和脚本目录一致,所以data.txt的相对路径可以正常解析;但线上环境启动Node进程的工作目录通常不是脚本存放目录,相对路径会被解析到错误的位置,自然找不到文件。
解决方案
修改附件路径为绝对路径,使用Node内置的__dirname变量(该变量固定指向当前执行的js文件所在目录的绝对路径,不受进程启动位置影响),推荐搭配path模块拼接路径兼容多平台:
- 先引入path模块:
const path = require('path');
- 修改
mailoptions中的附件路径配置:
attachments: [ { filename: 'report.txt', path: path.join(__dirname, 'data.txt') // 替换原来的相对路径'data.txt' } ]
额外排查项
如果修改后仍报错,可以按顺序核对:
- 确认线上部署包中确实包含
data.txt文件,部分部署配置会默认忽略.txt后缀的非代码文件 - 确认Node进程对
data.txt文件有读取权限,权限不足时部分系统也会抛出ENOENT错误 - 可以在发送邮件的逻辑前加日志验证路径是否正确:
console.log('文件路径:', path.join(__dirname, 'data.txt')) console.log('文件是否存在:', require('fs').existsSync(path.join(__dirname, 'data.txt')))
内容的提问来源于stack exchange,提问作者SlugLord
相关产品推荐
相关产品推荐

