2008-09-09 50 views
12

當您使用C#和System.Net.Mail名稱空間發送電子郵件時,可以在MailMessage對象上設置「發件人」和「發件人」屬性,但這些屬性都不允許您將MAIL FROM和發件人地址進入數據部分彼此不同。 MAIL FROM gets設置爲「From」屬性值,如果設置了「Sender」,它只會在DATA部分添加另一個標題字段。這導致「代表[email protected][email protected]發出」,這不是你想要的。我錯過了什麼嗎?如何使用System.Net.Mail設置SMTP信封MAIL?

用例正在控制代表其他人發送的通訊等的NDR目標。

我目前使用aspNetEmail而不是System.Net.Mail,因爲它允許我正確地執行此操作(與大多數其他SMTP庫一樣)。使用aspNetEmail,這是使用EmailMessage.ReversePath屬性完成的。

回答

1

你的意思是這個?:

//create the mail message 
MailMessage mail = new MailMessage(); 

//set the addresses 
mail.From = new MailAddress("[email protected]"); 
mail.To.Add("[email protected]"); 

//set the content 
mail.Subject = "This is an email"; 
mail.Body = "this is a sample body with html in it. <b>This is bold</b> <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

+0

否,mail.From地址將決定MAIL FROM在信封中的數據部分。我想要製作這兩個不同的地址。 – 2008-09-09 13:22:19

+0

mail.From地址不一定會確定信封中的MAIL FROM。這取決於交付方式。 – bzlm 2009-03-17 07:54:49

4

我剛剛找到如何做到這一點:

  • mail.From指定從可見的電子郵件給最終用戶
  • mail.Sender指定信封郵件來自

這就是它(即使我花了一段時間來弄明白)

+2

不,如我的問題所述:如果您設置「發件人」,它只會在數據部分添加另一個標題字段。這導致「代表[email protected]從[email protected]發出」,這不是你想要的。 – 2008-12-23 18:20:41

7

MailMessage.Sender總會插入一個Sender頭(在你的電子郵件客戶端解釋爲代表)。

如果您在SmtpClient上使用Network傳遞方法,.Sender也會更改信封中的發件人。使用PickupDirectoryFromIis傳遞方法會將其留給IIS以確定信封發件人,並且IIS將使用地址From地址,而不是Sender地址。

There's a similar question on MSDN here.

2

如果添加以下行返回路徑和答覆向頭在郵件標題中。

Dim strReplyTo As String = "[email protected]" 
message.ReplyToList.Add(strReplyTo) 
message.Headers.Add("Return-Path", strReplyTo) 

如果你在回覆點擊電子郵件設置的回覆地址