2010-02-23 33 views
5

我有一個SMTP服務器,只接受預定義發件人。
但是,我可以在數據結構中添加一個自定義標頭來設置另一個來自(發件人)地址。這是可能的,如果我測試使用Telnet編寫電子郵件:如何將自定義標題添加到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 
. 

當這封郵件已到達收件人,發件人地址[email protected],這是我們的目標。
這是我的問題。

如何在System.Net.Mail SMTP類中模擬這種「from header」? 設置from屬性失敗,因爲這會違反SMTP服務器策略。 這樣的事情將是巨大的,但它不工作:

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

有沒有人有什麼想法?

PS。自己寫一個自定義的SMTP類,使用TCP套接字,它可以工作,但是這可以在標準的.NET類中完成嗎?

回答

4

嗯,我應該做的張貼問題之前,一些嘗試...
(但不是刪除它,我會離開這裏,如果其他人有同樣的問題)。

解決的辦法是在MailMessage對象上設置From和Sender屬性。
(我需要同時設置,否則它不工作):

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

smtp.Send(message); 
+0

那不可能的工作「消息」超出範圍時smtp.Send被調用。語法是完全錯誤的,答案沒有說明解決方案 – GregJF 2017-11-03 01:02:36

+0

@GregJF,歡迎來到Stackoverflow。如果您認爲有辦法改進答案,您可以建議對其進行編輯。 – 2017-11-03 08:04:38

+0

馬格納斯,感謝我歡迎我到Stackoverflow:我已經是會員6年多了。我確實建議了一種方法來改善你的答案:改正你的語法!問題是關於標題,但你沒有在你的答案中提到它們。在語法上,嘗試在發佈前使用便箋本檢查代碼。例如Linqpad – GregJF 2017-11-05 20:55:55

相關問題