2008-11-18 18 views
61

puedo crear nueva aplicación ASP.NET Web que utilizan SMTP para enviar el mensaje. El problema es que el smtp no fue autenticado por quién envió el mensaje.¿Cómo puedo hacer SMTP autenticado en C#

¿Cómo puedo hacer SMTP autenticado en mi programa? ¿C# tiene una clase que tiene un atributo para ingresar nombre de usuario y contraseña?

Respuesta

125
using System.Net; 
using System.Net.Mail; 


SmtpClient smtpClient = new SmtpClient(); 
NetworkCredential basicCredential = 
    new NetworkCredential("username", "password"); 
MailMessage message = new MailMessage(); 
MailAddress fromAddress = new MailAddress("[email protected]"); 

smtpClient.Host = "mail.mydomain.com"; 
smtpClient.UseDefaultCredentials = false; 
smtpClient.Credentials = basicCredential; 

message.From = fromAddress; 
message.Subject = "your subject"; 
//Set IsBodyHtml to true means you can send HTML email. 
message.IsBodyHtml = true; 
message.Body = "<h1>your message body</h1>"; 
message.To.Add("[email protected]"); 

try 
{ 
    smtpClient.Send(message); 
} 
catch(Exception ex) 
{ 
    //Error, could not send the message 
    Response.Write(ex.Message); 
} 

Puede usar el código anterior.

+0

¿de dónde viene el nombre de usuario y la contraseña? y ¿qué es mail.mydomain.com? ¿Es ese el nombre DNS? – Shyju

+5

son su dirección de correo electrónico y contraseña, mail.midominio.com es su servidor SMTP (por ejemplo, smtp.gmail.com). – Arief

+0

Usted debe envolver el objeto MailMessage en una instrucción using (o llamar a Dispose en él después de su hecho), ¿verdad? – Ben

1

¿Cómo se envía el mensaje?

Las clases en el espacio de nombre System.Net.Mail (que es probablemente lo que debe usar) tiene soporte completo para la autenticación, ya sea especificado en Web.config o utilizando la propiedad SmtpClient.Credentials.

6

Establecer la propiedad Credentials antes de enviar el mensaje.

63

Asegúrese de configurar SmtpClient.Credentialsdespués de llamando al SmtpClient.UseDefaultCredentials = false.

El orden es importante ya que la configuración SmtpClient.UseDefaultCredentials = false reiniciará SmtpClient.Credentials a nulo.

+8

Si pudiera votar esto un par de veces más, lo haría. – Joshua

+1

Omg ¡He perdido tanto tiempo antes de ver esta respuesta! Gracias señor +1! – avidenic

+2

esto es viejo, pero dorado; Maldita sea, ayudó – MihaiC

1

Para enviar un mensaje a través de TLS/SSL, debe configurar SSL de la clase SmtpClient true.

string to = "[email protected]"; 
string from = "[email protected]"; 
MailMessage message = new MailMessage(from, to); 
message.Subject = "Using the new SMTP client."; 
message.Body = @"Using this new feature, you can send an e-mail message from an application very easily."; 
SmtpClient client = new SmtpClient(server); 
// Credentials are necessary if the server requires the client 
// to authenticate before it will send e-mail on the client's behalf. 
client.UseDefaultCredentials = true; 
client.EnableSsl = true; 
client.Send(message); 
+0

escribe un ejemplo de código sobre SSL versus Cliente SMTP para hacer una mejor respuesta –

Cuestiones relacionadas