使用Nodejs和emailjs发邮件,附件名称中文乱码

使用Nodejs和emailjs发邮件,附件名称中文乱码

没有用过,帮顶~

4 回复

使用Node.js和Nodemailer发送带中文附件名的邮件

在使用Node.js发送带有中文附件名的邮件时,经常会遇到附件名称乱码的问题。这通常是因为编码格式不正确导致的。为了解决这个问题,我们可以使用Nodemailer库来发送邮件,并正确设置附件名称的编码。

安装Nodemailer

首先,你需要安装nodemailer库。如果你还没有安装,可以使用以下命令:

npm install nodemailer

示例代码

下面是一个简单的示例,演示如何使用Nodemailer发送包含中文附件名的邮件:

const nodemailer = require('nodemailer');
const fs = require('fs');

// 创建一个SMTP传输对象
let transporter = nodemailer.createTransport({
    host: 'smtp.example.com',
    port: 587,
    secure: false, // 使用TLS
    auth: {
        user: 'your-email@example.com',
        pass: 'your-password'
    }
});

// 邮件信息
let mailOptions = {
    from: '"Your Name" <your-email@example.com>', // 发件人
    to: 'recipient@example.com', // 收件人
    subject: '邮件主题', // 邮件主题
    text: '这是邮件正文', // 纯文本正文
    attachments: [
        {
            filename: '附件名称.txt',
            content: fs.readFileSync('path/to/your/file.txt'),
            contentType: 'text/plain',
            // 设置附件名称的编码
            disposition: 'attachment',
            headers: {
                'Content-Disposition': `attachment; filename*=UTF-8''${encodeURIComponent('附件名称.txt')}`
            }
        }
    ]
};

// 发送邮件
transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log(error);
    }
    console.log('Message sent: %s', info.messageId);
});

解释

  1. 创建SMTP传输对象

    • host: SMTP服务器地址。
    • port: SMTP端口。
    • secure: 是否使用SSL(默认为false)。
    • auth: 登录凭据。
  2. 邮件信息

    • from: 发件人邮箱。
    • to: 收件人邮箱。
    • subject: 邮件主题。
    • text: 邮件正文。
    • attachments: 邮件附件数组。
  3. 附件配置

    • filename: 附件文件名。
    • content: 附件内容。
    • contentType: 附件类型。
    • disposition: 附件处理方式。
    • headers: 自定义头部信息,用于解决中文乱码问题。

通过以上步骤,你可以成功地发送包含中文附件名的邮件。希望这能帮助你解决问题!


不清楚. 我是用Nodemailer的, 没有乱码问题.

还是换一个把,这个库一堆的bug,我们的项目之前也是使用的这个,现在我们换成了nodemailer,这个论坛也是使用的这个,而且这个在使用更方便。

对于标题为“使用Nodejs和emailjs发邮件,附件名称中文乱码”的问题,这里提供一个简明的解决方案。在使用emailjs发送带有中文附件名的邮件时,需要正确设置MIME类型中的编码格式,以避免附件名称出现乱码。

以下是一个简单的示例代码,展示如何解决这个问题:

const email = require('emailjs');

// 创建一个服务器连接
const server = email.server.connect({
    user: "your-email@example.com",
    password: "your-password",
    host: "smtp.example.com",
    ssl: true
});

server.send({
    text: "这是一封测试邮件。",
    from: "发件人姓名 <your-email@example.com>",
    to: ["收件人姓名 <recipient@example.com>"],
    subject: "测试邮件",
    attachment: [
        {data: "这是附件的内容", alternative: true},
        {
            path: "./test附件.txt",
            name: Buffer.from("测试附件.txt", 'utf-8').toString('base64'), // 对附件名称进行base64编码
            type: "text/plain",
            encoding: "base64"
        }
    ]
}, function(err, message) {
    console.log(err || message);
});

在这个例子中,我们通过将附件名称转换为Base64编码来解决中文乱码问题。name字段中的Buffer.from()用于将字符串转换成Base64格式。同时,在实际应用中,请确保替换上述代码中的user, password, host等参数为你自己的邮箱配置信息。

此外,还需注意,根据不同的邮件客户端和邮件服务器,可能需要调整编码方式或使用特定的MIME头(如Content-Disposition)来进一步优化附件名称的显示效果。

回到顶部