2008-09-09 19 views
12

Khi bạn gửi email bằng cách sử dụng C# và không gian tên System.Net.Mail, bạn có thể đặt thuộc tính "Từ" và "Người gửi" trên đối tượng MailMessage, nhưng cả hai đều không cho phép bạn thực hiện MAIL FROM và địa chỉ từ đi vào phần DATA khác nhau. MAIL FROM được đặt thành giá trị thuộc tính "Từ" và nếu bạn đặt "Người gửi", nó chỉ thêm trường tiêu đề khác trong phần DATA. Điều này dẫn đến "Từ [email protected] thay mặt cho [email protected]", đó không phải là những gì bạn muốn. Tui bỏ lỡ điều gì vậy?Bạn có thể đặt phong bì SMTP MAIL FROM bằng cách sử dụng System.Net.Mail như thế nào?

Trường hợp sử dụng đang kiểm soát đích NDR cho bản tin, v.v., được gửi thay mặt cho người khác.

Tôi hiện đang sử dụng aspNetEmail thay cho System.Net.Mail, vì nó cho phép tôi thực hiện việc này đúng cách (giống như hầu hết các thư viện SMTP khác). Với aspNetEmail, điều này được thực hiện bằng cách sử dụng thuộc tính EmailMessage.ReversePath.

Trả lời

1

Bạn có nghĩa là điều này ?:

//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); 

Từ http://www.systemnetmail.com/faq/3.1.2.aspx

+0

Không, địa chỉ mail.From sẽ xác định MAIL FROM trong phong bì và trong phần DATA. Tôi muốn tạo hai địa chỉ khác nhau. –

+0

địa chỉ thư. Địa chỉ sẽ không nhất thiết phải xác định TỪ THƯ TỪ trong phong bì. Nó phụ thuộc vào phương pháp phân phối. – bzlm

4

Tôi chỉ thấy làm thế nào để làm điều đó:

  • mail.From xác định email từ có thể nhìn thấy cho người sử dụng thức
  • mail.Sender chỉ định phong bì MAIL FROM

Vậy là xong (ngay cả khi nó đã cho tôi một thời gian để tìm nó ra)

+2

Không, như đã đề cập trong câu hỏi của tôi: và nếu bạn đặt "Người gửi", nó chỉ thêm trường tiêu đề khác trong phần DATA. Điều này dẫn đến "Từ [email protected] thay mặt cho [email protected]", đó không phải là những gì bạn muốn. –

+0

Tôi hiểu ý của bạn là gì. Tôi đã phân tích các gói tin bằng cách sử dụng Wireshark và phong bì MAIL FROM được đặt chính xác. Tôi không thấy bất kỳ vấn đề nào bằng cách sử dụng GMail hoặc AOL (người gửi, từ, đến và trả về đường dẫn được đặt chính xác). Nhưng khi tôi sử dụng tài khoản hotmail của tôi hoặc máy chủ trao đổi của tôi, tôi thấy thông báo tương tự như bạn làm. – Romhein

+1

Nó không phải là ẩn người gửi.Vấn đề là phong bì thư về mặt kỹ thuật không phải là một phần của thông điệp, và rằng tiêu đề Return-Path được bao quanh bởi nhiều cân nhắc phức tạp. Điều này có nghĩa là phương thức phân phối thực tế sẽ có tác động đến cả hai phương thức này. – bzlm

7

MailMessage.Sender sẽ luôn chèn một tiêu đề Sender (hiểu là thay mặt trong ứng dụng e-mail của bạn).

Nếu bạn sử dụng phương thức phân phối Network trên SmtpClient, .Sender cũng sẽ thay đổi người gửi trong phong bì. Sử dụng phương thức phân phối PickupDirectoryFromIis sẽ để nó cho IIS để xác định người gửi trên phong bì và IIS sẽ sử dụng địa chỉ From, chứ không phải địa chỉ Sender.

There's a similar question on MSDN here.

2

Nếu bạn thêm các dòng sau Return-Path và Reply-To tiêu đề được thiết lập trong tiêu đề mail.

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

Và nếu bạn click vào trả lời các thiết lập e-mail cho địa chỉ trả lời

+0

+1. Tôi đã thử nghiệm với Outlook, có vẻ như đang hoạt động. Tôi tự hỏi, mặc dù một người có thể chắc chắn 100% rằng tất cả các ứng dụng email đều tôn trọng tiêu đề 'Trả lời-Tới' và trả lời địa chỉ được đưa ra trong tiêu đề đó. – Azimuth

+0

Đường dẫn trả lại sẽ không hoạt động trong tiêu đề. Nó sẽ luôn luôn lấy địa chỉ email bị trả lại ngay cả người gửi hoặc địa chỉ của bạn trong system.net.mail. –

Các vấn đề liên quan