如何在C#中通过Redemption设置SMTP的RCPT TO实现收件人显示与实际接收不一致
在C#中使用Redemption设置SMTP的RCPT TO值,实现显示收件人与实际接收地址不一致
我们正在使用Redemption向日志邮箱发送邮件,需要实现邮件中显示的收件人(To)地址与实际接收地址不一致的效果。比如:创建邮件时将To地址设为jbloggs@example.com,但实际发送至TomJones@test.com,使得邮件进入TomJones@test.com邮箱时,显示的收件人仍为jbloggs@example.com。我们清楚这看似地址伪造,但这是客户明确提出的需求,且已确认有其他公司实现了该功能。
更新:了解到SMTP协议中RCPT TO和邮件头里的TO字段无需强制匹配后,现咨询具体在C#中如何通过Redemption设置/修改SMTP的RCPT TO值?
实现步骤与代码示例
Redemption的RDOSession和RDOMessage对象支持独立配置邮件头显示收件人与SMTP实际接收地址,具体实现如下:
- 初始化Redemption会话并配置SMTP参数
- 设置邮件头显示的收件人(对应收件人看到的To字段)
- 通过
SMTPRecipients集合添加实际接收地址(对应SMTP的RCPT TO) - 发送邮件
using Redemption; // 初始化Redemption会话 RDOSession session = new RDOSession(); // 配置SMTP服务器信息(根据实际情况修改) session.SmtpServer = "your-smtp-server.com"; session.SmtpPort = 587; session.SmtpUseSSL = true; session.SmtpAuthenticate = rdoSmtpAuthentication.smtpAuthLogin; session.SmtpUserName = "your-smtp-username"; session.SmtpPassword = "your-smtp-password"; // 创建新邮件 RDOMessage msg = session.CreateMessageFromMsgFile(null); // 设置邮件头显示的收件人(用户邮箱中看到的To地址) msg.To = "jbloggs@example.com"; // 设置邮件主题与正文 msg.Subject = "测试显示收件人与实际接收地址分离"; msg.Body = "此邮件显示收件人为jbloggs@example.com,实际接收地址为TomJones@test.com"; // 添加SMTP实际接收地址(对应RCPT TO指令) RDORecipient actualRecipient = msg.SMTPRecipients.Add("TomJones@test.com"); actualRecipient.Type = (int)rdoRecipientType.olTo; // 发送邮件 msg.Send();
关键说明
msg.To:控制邮件头中的TO字段,仅影响收件人看到的显示地址msg.SMTPRecipients:直接对应SMTP协议中的RCPT TO指令,决定邮件实际投递的地址,与邮件头显示收件人完全独立- 需提前确认SMTP服务器允许此类发送方式(部分服务器有反伪造策略,可能需要配置白名单)
内容的提问来源于stack exchange,提问作者m_collard
相关产品推荐
相关产品推荐

