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

Nodemailer v6.6.3 发送本地磁盘文件附件为空该如何解决?

排查解决步骤
  • 首先停止使用驼峰格式的fileName/pathName参数,Nodemailer v6.6.3官方配置仅识别全小写的filename和path参数,你修改参数名后没有报错是因为Nodemailer直接忽略了不识别的字段,相当于没有传入有效的文件读取配置,自然附件为空。
  • 先解决原始的ENOENT报错,这是问题的核心根源:
    1. 打印你传入的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
      }
    ]
    
    1. 单独用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:39:02