Nodemailer v6.6.3 发送本地磁盘文件附件为空该如何解决?
排查解决步骤
- 首先停止使用驼峰格式的
fileName/pathName参数,Nodemailer v6.6.3官方配置仅识别全小写的filename和path参数,你修改参数名后没有报错是因为Nodemailer直接忽略了不识别的字段,相当于没有传入有效的文件读取配置,自然附件为空。 - 先解决原始的
ENOENT报错,这是问题的核心根源:- 打印你传入的
path路径,确认路径正确性:Node.js 中相对路径是相对于进程启动目录(process.cwd())而非当前JS文件所在目录,90%以上的路径报错都是这个原因导致。建议用path.resolve拼接绝对路径避免出错,示例代码如下:
const path = require('path') // 假设file.txt和当前JS文件在同一目录 const filePath = path.resolve(__dirname, './file.txt') attachments: [ { filename: 'text3.txt', path: filePath } ]- 单独用fs模块测试路径是否可读取,排除路径本身错误:
如果这段代码也抛出const fs = require('fs') // 替换为你实际用的路径 console.log(fs.readFileSync('/path/to/file.txt', 'utf-8'))ENOENT错误,说明是路径填写错误,和Nodemailer本身无关,修正路径即可。 - 打印你传入的
- 路径和参数名修正后如果还是有问题,可以开启Nodemailer debug模式定位问题:
运行后查看控制台输出的邮件原始内容,确认附件内容块是否正常写入,若能看到内容则是接收邮箱客户端的渲染问题,看不到内容再进一步排查文件读取权限问题。const transporter = nodemailer.createTransport({ // 你的原有邮箱服务配置 debug: true, logger: true }) - 临时验证方案:可以手动读取文件内容传入
content参数,绕过path配置逻辑:
该方案如果能正常发送非空附件,即可完全确认你之前的const fs = require('fs') attachments: [ { filename: 'text3.txt', content: fs.readFileSync('/path/to/file.txt') } ]path参数配置的路径存在错误。
内容的提问来源于stack exchange,提问作者Ricardo Caballero
相关产品推荐
相关产品推荐

