2010-02-23 15 views
5

Mam serwer SMTP, który akceptuje tylko predefiniowany Od nadawcy.
Jednak mogę dodać niestandardowy z nagłówka w strukturze DATA, aby ustawić inny adres (nadawcy). Jest to możliwe, jeśli przetestować za pomocą usługi Telnet, aby utworzyć wiadomość e-mail:Jak dodać niestandardowe nagłówki do klasy SMTP System.Net.Mail?

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

Kiedy ta wiadomość doszła do biorcy, od adresu jest [email protected], który jest celem.
Oto mój problem.

Jak mogę naśladować ten "z nagłówka" w klasie System.Net.Mail SMTP? Ustawienie właściwości z nie powiodło się, ponieważ naruszałoby to zasady serwera SMTP. Coś takiego byłoby świetnie, ale to nie działa:

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

Czy ktoś ma jakieś pomysły?

PS. Pisząc niestandardową klasę SMTP samodzielnie, używając gniazd TCP, działa, ale czy można to zrobić w standardowych klasach .NET?

Odpowiedz

4

Cóż, powinienem był zrobić kilka eksperymentów przed opublikowaniem pytania ...
(Ale zamiast go usunąć, zostawię to tutaj, jeśli inni będą mieli ten sam problem).

Rozwiązaniem było ustawienie właściwości Od i Nadawca w obiekcie MailMessage.
(będę musiał ustawić zarówno, w przeciwnym razie nie działa):

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

smtp.Send(message); 
+0

To nie może ewentualnie działać „wiadomość” jest poza zakresem gdy smtp.Send nazywa. składnia jest całkowicie błędna, a odpowiedź nie ilustruje rozwiązania – GregJF

+0

@GregJF, witamy w Stackoverflow. Jeśli uważasz, że istnieje sposób na ulepszenie odpowiedzi, możesz zasugerować jej zmianę. –

+0

Magnus, dzięki za powitanie mnie w Stackoverflow: Byłem członkiem od ponad 6 lat. Zaproponowałem sposób, aby poprawić swoją odpowiedź: popraw swoją składnię! Pytanie dotyczy nagłówków, ale nie wspominasz o nich w swojej odpowiedzi. Jeśli chodzi o składnię, spróbuj użyć notatnika do sprawdzania kodu przed wysłaniem. na przykład Linqpad – GregJF

Powiązane problemy