Nodejs 使用 nodemailer 时为何会傲娇地支持中文?

Nodejs 使用 nodemailer 时为何会傲娇地支持中文?

新手。。求各位大神帮帮忙。。

5 回复

当然可以!让我们来探讨一下如何在使用 nodemailer 发送邮件时处理中文字符的问题。

问题背景

在使用 Node.js 和 nodemailer 发送邮件时,可能会遇到中文字符显示乱码或不正确的情况。这通常是因为邮件编码设置不当导致的。

解决方案

为了确保中文字符能够正确显示,我们需要在邮件配置中明确指定合适的编码。具体来说,我们需要设置 subjecttext 字段的编码为 UTF-8,并且在邮件头部(headers)中添加适当的 MIME 类型。

示例代码

以下是一个简单的示例代码,演示了如何使用 nodemailer 发送包含中文字符的邮件:

const nodemailer = require('nodemailer');

// 创建一个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-email@example.com',
    subject: '=?UTF-8?B?' + Buffer.from('邮件主题 - 中文').toString('base64') + '?=',
    text: '=?UTF-8?B?' + Buffer.from('邮件正文 - 中文').toString('base64') + '?=',
    headers: {
        'Content-Type': 'text/plain; charset=utf-8',
        'Content-Transfer-Encoding': 'base64'
    }
};

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

解释

  1. 邮件主题和正文:我们使用 Buffer.from() 方法将中文字符串转换为 Base64 编码,并通过 =?UTF-8?B?...?= 的格式来指定编码。
  2. 邮件头部:我们添加了 Content-TypeContent-Transfer-Encoding 头部字段,以确保邮件内容被正确解析。

注意事项

  • 确保你的邮件服务提供商(如 Gmail、Outlook 等)允许 SMTP 访问。
  • 在实际应用中,请确保替换示例中的邮箱地址和密码为真实信息。
  • 如果你使用的是较新的邮件服务,可能需要启用“低安全性应用访问”功能。

希望这些信息对你有帮助!如果你有任何其他问题,欢迎继续提问。


不对,,是不支持中午。。。。。。

“傲娇” => “骄傲”?

求解啊,,,

标题:Nodejs 使用 nodemailer 时为何会傲娇地支持中文?

内容: 新手在使用 Node.js 的 nodemailer 发送邮件时可能会遇到一个问题,即邮件中的中文字符不能正确显示。这是因为邮件发送涉及到 MIME 编码,需要对中文字符进行编码处理才能正常显示。

示例代码:

const nodemailer = require('nodemailer');

// 创建一个SMTP运输对象
let transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'your-email@gmail.com',
        pass: 'your-password'
    }
});

// 邮件选项
let mailOptions = {
    from: '"发件人" <your-email@gmail.com>', // 发件人名称和邮箱地址
    to: 'recipient@example.com', // 收件人地址
    subject: '主题', // 主题
    text: '正文', // 文本正文
    html: '<b>正文</b>', // HTML正文
    attachments: [{
        filename: '文件名.txt',
        content: '附件内容', // 中文内容需要正确编码
        contentType: 'text/plain; charset=utf-8' // 设置正确的字符集
    }]
};

// 编码中文内容
mailOptions.text = Buffer.from(mailOptions.text, 'utf-8').toString('base64');
mailOptions.html = Buffer.from(mailOptions.html, 'utf-8').toString('base64');

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

以上代码展示了如何使用 nodemailer 发送包含中文字符的邮件,并确保中文内容正确编码和显示。需要注意的是,在实际应用中,直接将内容转换为 base64 编码并不理想,建议使用 quoted-printablebase64 编码方式来处理包含非 ASCII 字符的内容。

希望这能帮助你解决在使用 nodemailer 发送包含中文字符邮件时遇到的问题。

回到顶部