2010-02-23 13 views
5

Ho un server SMTP che accetta solo un mittente Da predefinito.
Tuttavia, è possibile aggiungere un'intestazione personalizzata nella struttura DATA per impostare un altro indirizzo (mittente). Questo è possibile se provo utilizzando Telnet per comporre un messaggio di posta elettronica:Come aggiungere intestazioni personalizzate alla classe 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 
. 

Quando questo messaggio è arrivato al destinatario, il dall'indirizzo è [email protected], che è l'obiettivo.
Ecco il mio problema.

Come posso simulare questo "dall'intestazione" nella classe SMTP System.Net.Mail? L'impostazione della proprietà from non riesce, poiché ciò violerebbe le politiche del server SMTP. Qualcosa di simile a questo sarebbe grande, ma non funziona:

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

Qualcuno ha ottenuto tutte le idee?

PS. Scrivendo da solo una classe SMTP personalizzata, usando i socket TCP, funziona, ma può essere fatto nelle classi standard di .NET?

risposta

4

Beh, ho dovuto fare qualche esperimento prima di inviare la domanda ...
(Ma invece di eliminarlo, lascio qui se gli altri avrebbero avuto lo stesso problema).

La soluzione era di impostare le proprietà Da e Sender sull'oggetto MailMessage.
(avrei bisogno di impostare sia, altrimenti non funziona):

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

smtp.Send(message); 
+0

che non può funzionare "messaggio" è fuori portata, quando smtp.Send viene chiamato. la sintassi è completamente errata e la risposta non illustra la soluzione – GregJF

+0

@GregJF, benvenuto in Stackoverflow. Se pensi che ci sia un modo per migliorare una risposta, puoi suggerire una modifica. –

+0

Magnus, grazie per avermi dato il benvenuto su Stackoverflow: sono membro da più di 6 anni. Ho suggerito un modo per migliorare la tua risposta: correggi la tua sintassi !! La domanda riguarda le intestazioni, ma non le menzioni nella tua risposta. Per quanto riguarda la sintassi, prova a utilizzare un pad per controllare il codice prima di postare. per esempio. LINQPad – GregJF

Problemi correlati