如何在Node.js中发送仅指定收件人但显示完整To/CC信息的邮件?
Node.js实现指定收件人可见完整To/CC的邮件发送方案
要实现这个需求,核心思路是分离SMTP信封的实际收件人和邮件头的显示收件人:通过SMTP的RCPT TO指令控制真正接收邮件的地址,同时在邮件的To/CC头中填写完整的成员列表,这样收件人打开邮件时能看到完整的地址,但只有指定的人会收到邮件。
下面用Node.js最常用的nodemailer库来实现:
1. 安装依赖
npm install nodemailer
2. 代码实现示例
const nodemailer = require('nodemailer'); // 配置SMTP传输(替换成你的SMTP服务信息) const transporter = nodemailer.createTransport({ host: 'smtp.example.com', port: 587, secure: false, auth: { user: 'your-email@example.com', pass: 'your-password' } }); // 邮件配置 const mailOptions = { from: 'your-email@example.com', // 邮件头显示的完整To列表 to: '1@example.com', // 邮件头显示的完整CC列表 cc: '2@example.com', subject: '测试邮件', text: '这是一封测试邮件,你能看到CC里的2@example.com,但对方不会收到邮件', // 关键:控制SMTP信封的实际收件人 envelope: { from: 'your-email@example.com', // 仅指定实际要发送的收件人 rcptTo: '1@example.com' } }; // 发送邮件 transporter.sendMail(mailOptions, (error, info) => { if (error) { return console.log(error); } console.log('邮件发送成功: %s', info.messageId); });
关键原理说明
to和cc字段是邮件头的内容,仅用于收件人查看,不会决定谁实际收到邮件envelope.rcptTo是SMTP协议层面的实际收件人指定,SMTP服务器只会把邮件发送给这个地址列表里的用户- 这种方式完全符合SMTP协议规范,只要你的SMTP服务商允许自定义信封(大部分主流服务商都支持),就能正常工作
注意事项
- 部分邮件服务商可能会做反垃圾邮件检查,若信封收件人和邮件头差异过大,可能会被标记,建议先测试
- 请勿用于垃圾邮件发送,遵守邮件发送的相关法规和服务商规则
内容的提问来源于stack exchange,提问作者Ravi Ranjan Ojha
相关产品推荐
相关产品推荐

