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

如何使用nodemailer正确发送gzip格式的MongoDB备份文件附件

修复步骤

  1. 修正路径和文件名匹配错误
    你实际存储的备份文件路径是/public/myfile.gzip,但你脚本里的附件配置存在两个明显问题:
  • 文件名不一致:配置里写的是mygzip.gzip,和实际的myfile.gzip不符
  • 路径拼接错误:如果你要访问系统根目录下的/public路径,不需要加__dirname前缀,__dirname是当前脚本所在目录的路径,拼接后会变成相对脚本的路径,和你实际的绝对存储路径不符。如果你确认文件是存在脚本目录下的public子目录里,要确认文件实际放在对应位置,文件名和脚本里写的一致。
  1. 显式指定gzip文件的MIME类型
    Nodemailer自动识别二进制文件类型出错时,会把gzip二进制内容当成纯文本传输,就会出现你看到的乱码字符串情况,需要在附件配置里手动指定contentType为application/gzip。

  2. 修正回调参数名错误
    你回调函数里的形参是error,但判断条件里写的是err,会导致发送错误无法正常捕获,你之前可能没看到路径不存在这类的报错提示。


修正后完整代码

const nodemailer = require('nodemailer');

let transporter = nodemailer.createTransport({
    service: 'gmail',
    auth:{
        user: 'xyz@gmail.com',
        // 注意Gmail现在不支持直接用账号密码登录,需要开启两步验证后生成应用专用密码填入此处
        pass: 'xxxxxxx'
    }
});

let mailContent={
    from: 'Sender Name <xyz@gmail.com>',
    to: 'Receiver Name <receivername@gmail.com>',
    subject: 'First Node.js email',
    text: 'Hi,This is a test mail sent using Nodemailer',
    html: '<h1>You can send html formatted content using Nodemailer with attachments</h1>',
    attachments: [
        {
            filename: 'myfile.gzip',
            // 文件在系统根目录的/public下用这个路径:
            path: '/public/myfile.gzip',
            // 如果文件在脚本目录的public子目录下,就用下面这个路径:
            // path: __dirname + '/public/myfile.gzip',
            // 显式指定gzip的MIME类型
            contentType: 'application/gzip'
        }
    ]
};

transporter.sendMail(mailContent, function(error, data){
    if(error){
        console.log('Unable to send mail, error:', error);
    }else{
        console.log('Email send successfully');
    }
});

内容的提问来源于stack exchange,提问作者Kevin.a

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:54:03