class Program
{
static void Main(string[] args)
{
EnviarCorreo();
}
private static void EnviarCorreo()
{
//Configurando el cliente SMTP
SmtpClient client = new SmtpClient();
client.Host = "smtp.gmail.com";
client.Port = 587;
client.EnableSsl = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("correoOrigen@gmail.com", "clavecorreoOrigen");
//Preparando archivo adjunto
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes("Contenido de un documento de texto muy interesante."));
//Enviando correo
MailMessage mail = new MailMessage();
mail.From = new MailAddress("correoOrigen@gmail.com");
mail.To.Add(new MailAddress("correoDestinatario@gmail.com"));
mail.Subject = "Correo simple de HTML con documento adjunto.";
mail.IsBodyHtml = true;
mail.Body = "<h2>Hola!</h2><br/><br/>Visiten: <a href='http://xamldevelopment.blogspot.com'>XAML Development</>";
mail.Attachments.Add(new Attachment(ms,"Documento.txt"));
client.Send(mail);
}
}
Actualización: 14 Abril 2014
Otra forma de configurar uno o más SmtpClient es usando el App.config o Web.config.
¿Cómo configurar un SmtpClient desde el .config?
Simplemente agregamos el siguiente código XML al nodo principal <configuration>:
App.config o Web.config
<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="correoOrigen@gmail.com">
<network enableSsl="true" defaultCredentials="false" clientDomain="www.gmail.com" host="smtp.gmail.com" port="587" userName="correoOrigen@gmail.com" password="clavecorreoOrigen" />
</smtp>
</mailSettings>
</system.net>
CSharp
SmtpClient client = new SmtpClient();
Bastaría hacer lo anterior en C# y apreciar que los valores por defecto son los mismos que hemos establecido en el .config.
¿Cómo configurar más de un SmtpClient desde el .config?
En este caso debemos definir un section con su type por cada SmtpClient que queramos usar (en el ejemplo pondre 3), agruparlos en un sectionGroup (el cual llamaré mailingConfiguration, puede tener cualquier otro nombre) y luego establecer correctamente los valores (no es necesario que todos tengan el mismo clientDomain). Entonces, agreguemos el siguiente código XML al nodo principal <configuration> sin olvidar que configSections debe ser el primer elemento del nodo configuration sino no funcionaria:
App.config o Web.config
<configSections>
<sectionGroup name="mailingConfiguration">
<section name="cliente1" type="System.Net.Configuration.SmtpSection"/>
<section name="cliente2" type="System.Net.Configuration.SmtpSection"/>
<section name="cliente3" type="System.Net.Configuration.SmtpSection"/>
</sectionGroup>
</configSections>
<mailingConfiguration>
<cliente1 deliveryMethod="Network" from="correoOrigen1@gmail.com">
<network enableSsl="true" defaultCredentials="false" clientDomain="www.gmail.com" host="smtp.gmail.com" port="587" userName="correoOrigen1@gmail.com" password="clavecorreoOrigen1" />
</cliente1>
<cliente2 deliveryMethod="Network" from="correoOrigen2@gmail.com">
<network enableSsl="true" defaultCredentials="false" clientDomain="www.gmail.com" host="smtp.gmail.com" port="587" userName="correoOrigen2@gmail.com" password="clavecorreoOrigen2" />
</cliente2>
<cliente3 deliveryMethod="Network" from="correoOrigen3@gmail.com">
<network enableSsl="true" defaultCredentials="false" clientDomain="www.gmail.com" host="smtp.gmail.com" port="587" userName="correoOrigen3@gmail.com" password="clavecorreoOrigen3" />
</cliente3>
</mailingConfiguration>
CSharp
SmtpSection smtpSection = (SmtpSection)ConfigurationManager.GetSection("mailingConfiguration/cliente1");
SmtpClient smtpClient = new SmtpClient();
smtpClient.Host = smtpSection.Network.Host;
smtpClient.Port = smtpSection.Network.Port;
smtpClient.EnableSsl = smtpSection.Network.EnableSsl;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.UseDefaultCredentials = smtpSection.Network.DefaultCredentials;
smtpClient.Credentials = new NetworkCredential(smtpSection.Network.UserName, smtpSection.Network.Password);
Si bien estamos mapeando propiedad por propiedad desde el smtpSection la ventaja es que ahora lo tenemos todo centralizado desde el .config, no olviden agregar la referencia a System.Configuration.
Eso es todo amigos :)!
Me ayudo 😀