2010-02-23 28 views
5

Tôi có một máy chủ SMTP chỉ chấp nhận người gửi Từ được xác định trước.
Tuy nhiên, tôi có thể thêm tùy chỉnh từ tiêu đề trong cấu trúc DATA để đặt cấu hình khác từ địa chỉ (người gửi). Đây là có thể nếu tôi thử nghiệm sử dụng Telnet để soạn một tin nhắn email:Làm cách nào để thêm tiêu đề tùy chỉnh vào lớp System.Net.Mail SMTP?

>helo there 
>mail from:[email protected] 
>rcpt to:[email protected] 
>data 
From:[email protected] 
To:[email protected] 
Subject:Test 
Test message 
. 

Khi email này đã đến người nhận, từ địa chỉ là [email protected], đó là mục tiêu.
Đây là vấn đề của tôi.

Làm cách nào tôi có thể bắt chước "từ tiêu đề" trong lớp System.Net.Mail SMTP? Đặt thuộc tính từ không thành công, vì điều đó sẽ vi phạm chính sách máy chủ SMTP. Something như thế này sẽ là tuyệt vời, nhưng nó không hoạt động:

var fromAddress = new MailAddress("[email protected]"); 
var toAddress = new MailAddress("[email protected]"); 
string subject = "Subject"; 
string body = "Body"; 

var smtp = new SmtpClient 
{ 
    Host = "my-smtp-server", 
    Port = 25, 
    DeliveryMethod = SmtpDeliveryMethod.Network 
}; 

using (var message = new MailMessage(fromAddress, toAddress) 
{ 
    Subject = subject, 
    Body = body, 
    ReplyTo = new MailAddress("[email protected]"), 

}) 
{ 
    message.Headers.Add("From", "[email protected]"); // <---- This would be great, if it worked 
    smtp.Send(message); 
} 

Có ai có ý tưởng nào?

PS. Viết một lớp SMTP tùy chỉnh bản thân mình, bằng cách sử dụng các socket TCP, nó hoạt động, nhưng điều này có thể được thực hiện trong các lớp .NET chuẩn không?

Trả lời

4

Tôi nên thực hiện một số thử nghiệm trước khi đăng câu hỏi ...
(Nhưng thay vì xóa nó, tôi sẽ để ở đây nếu những người khác có cùng vấn đề).

Giải pháp là đặt cả thuộc tính Từ và người gửi trên đối tượng MailMessage.
(Tôi sẽ cần phải đặt cả, nếu không nó không hoạt động):

var message = new MailMessage(fromAddress, toAddress) 
{ 
    Subject = subject, 
    Body = body, 
    From = new MailAddress("[email protected]"), 
    Sender = new MailAddress("[email protected]") 
}; 

smtp.Send(message); 
+0

Đó không thể nào làm việc "thông báo" là ra khỏi phạm vi khi smtp.Send được gọi. cú pháp hoàn toàn sai và câu trả lời không minh họa giải pháp – GregJF

+0

@GregJF, chào mừng bạn đến với Stackoverflow. Nếu bạn nghĩ rằng có một cách để cải thiện câu trả lời, bạn có thể đề xuất chỉnh sửa cho câu trả lời đó. –

+0

Magnus, cảm ơn vì đã chào đón tôi đến với Stackoverflow: Tôi đã là thành viên được hơn 6 năm. Tôi đã đề xuất một cách để cải thiện câu trả lời của bạn: sửa cú pháp của bạn !! Câu hỏi đặt ra là về Tiêu đề, nhưng bạn không đề cập đến chúng trong câu trả lời của bạn. Về cú pháp, hãy thử sử dụng một miếng đệm đầu để kiểm tra mã của bạn trước khi đăng. ví dụ. Linqpad – GregJF

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