如何使用 System.Net.Mail 设置退回地址?
Posted
技术标签:
【中文标题】如何使用 System.Net.Mail 设置退回地址?【英文标题】:How to set the bounce address using System.Net.Mail? 【发布时间】:2011-01-05 20:03:16 【问题描述】:我正在尝试实现Variable envelope return path (VERP) 方法来管理电子邮件地址(即,当我发送的电子邮件被退回时,我希望将其发送到特定的电子邮件地址,以便我可以更新我的数据库以避免发送电子邮件到将来的那个电子邮件地址)。
根据this article,可以指定退回电子邮件发送到的电子邮件地址。您如何在 .Net 中执行此操作?
例如,假设我 (me@myserver.com) 想向您 (you@yourserver.com) 发送电子邮件。如果 you@yourserver.com 不再存在,我希望您的服务器将退回电子邮件发送到bounce-you=yourserver.com@myserver.com)。这样,当我收到这封退回的电子邮件时,我知道 you@yourserver.com 不再是有效的电子邮件地址,我可以相应地更新我的数据库。
在本例中,退回地址为:bounce-you=yourserver.com@myserver.com 如何使用 System.Net.Mail 指定它?
【问题讨论】:
【参考方案1】:底线是您不能在 .NET 中执行此操作。您只能设置 FROM 地址,System.Net.Mail 也将其用作 Envelope-From。
要执行此类操作,您需要使用第 3 方 SMTP 对象,就像我写的那样:
http://www.aspnetemail.com
在 aspNetEmail 中,您可以执行以下操作:
EmailMessage msg = new EmailMessage();
msg.ReversePath = "bounceEmailAccountHere@whatever.com
aspNetEmail 将在 SMTP 会话期间使用 MAIL FROM 命令中的 ReversePath 值。我可以很容易地将此属性称为“ReturnPath”或“EnvelopeFrom”。回想起来,EnvelopeFrom 会是一个更好的名字。
【讨论】:
dave - 你的 ReversePath 属性有什么作用?当我阅读 rfc 时,它应该将路径添加到“来自”标头,然后接收服务器会将其移动到返回路径标头中?那是对的吗?这是处理反弹的“rfc 批准”方式吗?我想我需要删除我的答案... 基本上就是Envelope-From地址。当 Mail FROM 命令被提交给服务器时,它是 SMTP 会话期间使用的值。 在这种情况下,是不是可以做这样的事情:message.Headers.Add("Envelope-From", "bounceEmailAccountHere@whatever.com");当然,您所说的“ReversePath”必须以一种或另一种方式设置在标题中。 我想我知道我哪里出错了。我用来发送电子邮件的软件有一个名为 ReturnPath 的属性,它实际上与 Dave 的 ReversePath 属性相同。我将属性名称与标题名称混淆并做出了假设。 Anthony -- ReversePath、ReturnPath、Enevelope-From 和 MAIL FROM 命令值,都指相同的值。 Return-Path 标头由 RECIPIENTS 邮件服务器设置。不是发件人。收件人邮件服务器查看 MAIL FROM 命令的值(来自 SMTP 会话),并且应该将该值作为 Return-Path 值添加到标头中。如果 Return-Path 标头已存在,则将其删除并替换。以上是关于如何使用 System.Net.Mail 设置退回地址?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 system.net.mail 发送非替代的多个部分
如何在没有硬编码 NetworkCredentials 的情况下使用 System.Net.Mail?
将“SmtpClient.EnableSsl”设置为 true 时,“System.Net.Mail.SmtpClient”需要哪些端口?
如何使用 System.Net.Mail 向多个地址发送电子邮件