2010-02-23 7 views
5

Tengo un servidor SMTP que solo acepta un remitente predefinido.
Sin embargo, puedo agregar un encabezado personalizado desde la estructura DATA para configurar otro desde la dirección (remitente). Esto es posible si el test utilizando Telnet para redactar un mensaje de correo electrónico:Cómo agregar encabezados personalizados a la clase SMTP de System.Net.Mail?

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

Cuando este mensaje ha llegado al destinatario, la dirección del remitente es [email protected], que es la meta.
Aquí está mi problema.

¿Cómo puedo imitar este "del encabezado" en la clase de SMTP de System.Net.Mail? La configuración de la propiedad from falla, porque eso violaría las políticas del servidor SMTP. Algo como esto sería grande, pero no funciona:

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

Alguien tiene alguna idea?

PS. Escribir una clase SMTP personalizada, utilizando sockets TCP, funciona, pero ¿se puede hacer esto en las clases .NET estándar?

Respuesta

4

Bueno, debería haber hecho algo de experimentación antes de publicar la pregunta ...
(Pero en lugar de eliminarlo, lo dejo aquí si otros tienen el mismo problema).

La solución fue establecer las propiedades De y Remitente en el objeto MailMessage.
(que había necesidad de establecer tanto, de lo contrario no funciona):

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

smtp.Send(message); 
+0

Eso no puede funcionar "mensaje" está fuera de alcance cuando smtp.Send se llama. la sintaxis es completamente incorrecta y la respuesta no ilustra la solución – GregJF

+0

@GregJF, bienvenido a Stackoverflow. Si cree que hay una forma de mejorar una respuesta, puede sugerirle una modificación. –

+0

Magnus, gracias por darme la bienvenida a Stackoverflow: he sido miembro durante más de 6 años. Sugerí una forma de mejorar tu respuesta: ¡corrige tu sintaxis! La pregunta es sobre Encabezados, pero no los menciona en su respuesta. En sintaxis, intente utilizar un bloc de notas para verificar su código antes de publicarlo. p.ej. Linqpad – GregJF

Cuestiones relacionadas