关于c#:如何使用System.Net.Mail设置SMTP信封邮件?

关于c#:如何使用System.Net.Mail设置SMTP信封邮件?

How can you set the SMTP envelope MAIL FROM using System.Net.Mail?

当使用C#和System.Net.Mail命名空间发送电子邮件时,可以在MailMessage对象上设置"发件人"和"发件人"属性,但是这两个属性都不允许您创建MAIL FROM和发件人的地址 进入彼此不同的DATA部分。 MAIL FROM设置为" From"属性值,如果设置为" Sender",则仅在DATA节中添加另一个头字段。 这将导致"不是从X@Y.COM代表A@B.COM",而是您不需要的。 我想念什么吗?

用例正在控制代表其他人发送的新闻通讯等的NDR目的地。

我目前正在使用aspNetEmail而不是System.Net.Mail,因为它可以让我正确地执行此操作(就像大多数其他SMTP库一样)。 使用aspNetEmail,可以使用EmailMessage.ReversePath属性完成此操作。


MailMessage.Sender将始终插入Sender标头(在您的电子邮件客户端中代表)。

如果在SmtpClient上使用Network传送方法,则.Sender也会更改信封中的发件人。使用PickupDirectoryFromIis传递方法会将其留给IIS确定信封发件人,并且IIS将使用From地址,而不是Sender地址。

MSDN上也有类似的问题。


我刚刚找到了怎么做:

  • mail.From指定对最终用户可见的电子邮件
  • mail.Sender指定信封MAIL FROM

就这样(即使我花了一段时间才弄清楚)


如果添加以下行,则在邮件头中设置Return-Path和Reply-To头。

1
2
3
Dim strReplyTo As String ="email@domain.tld"
message.ReplyToList.Add(strReplyTo)
message.Headers.Add("Return-Path", strReplyTo)

如果单击"答复",则将电子邮件设置为"答复至"地址


你是这个意思吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//create the mail message
 MailMessage mail = new MailMessage();

 //set the addresses
 mail.From = new MailAddress("me@mycompany.com");
 mail.To.Add("you@yourcompany.com");

 //set the content
 mail.Subject ="This is an email";
 mail.Body ="this is a sample body with html in it. This is bold <font color=#336699>This is blue</font>";
 mail.IsBodyHtml = true;

 //send the message
 SmtpClient smtp = new SmtpClient("127.0.0.1");
 smtp.Send(mail);

从http://www.systemnetmail.com/faq/3.1.2.aspx


推荐阅读