使用Nodejs和emailjs发邮件,附件名称中文乱码
使用Nodejs和emailjs发邮件,附件名称中文乱码
没有用过,帮顶~
使用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);
});
解释
-
创建SMTP传输对象:
host
: SMTP服务器地址。port
: SMTP端口。secure
: 是否使用SSL(默认为false
)。auth
: 登录凭据。
-
邮件信息:
from
: 发件人邮箱。to
: 收件人邮箱。subject
: 邮件主题。text
: 邮件正文。attachments
: 邮件附件数组。
-
附件配置:
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
)来进一步优化附件名称的显示效果。