Siguiendo la línea del artículo anterior donde explicaba como subir un archivo vía FTP, voy a mostrar ahora como enviar un archivo vía email con las clases contenidas en System.Net.Mail. Esta funcionalidad, puede ser más útil para informar de excepciones en una aplicación instalada en el cliente, comunicar alguna eventualidad, etc.. etc…
Ojo que esta no es la implementación de un servidor SMTP y que solo actúa como cliente de correo en modo de envio, por lo que es necesario que tengamos una cuenta de correo y un acceso SMTP (Hotmail no tiene SMTP gratuito, Gmail si, ó usa tu propio servidor si lo tienes).
El ejemplo es bastante claro y sencillo:
public void EnviarArchivoEmail(string FilePath,
string SmtpServer, int PortNum, NetworkCredential Auth,
MailAddress From, params MailAddress[] To)
{
// Configuramos nuestro servidor SMTP
SmtpClient SC = new SmtpClient(SmtpServer, PortNum);
// Conexión segura (si la soporta el servidor)
// Imprescindible para Gmail.
SC.EnableSsl = false;
// Creamos el mensaje de email
using (MailMessage message = new MailMessage())
{
// Añadimos el remitente
message.From = From;
// Añadimos los destinatarios.
foreach (MailAddress ma in To)
message.To.Add(ma);
string file = Path.GetFileName(FilePath);
// Asunto
message.Subject = "Enviando " + file;
// Cuerpo
message.Body =string.Format("Archivo {0} enviado el {1} a las {2}.",
file,DateTime.Now.ToShortDateString(),
DateTime.Now.ToShortTimeString());
// Agrego el fichero como archivo adjunto
message.Attachments.Add(new Attachment(FilePath));
// Indico mis credenciales para autenticarme
SC.Credentials = Auth;
// Indico el modo de envio.
SC.DeliveryMethod = SmtpDeliveryMethod.Network;
// Y el timeout
SC.Timeout = 10000;
// Enviar eMail
SC.Send(message);
}
}
Definiendo el destinatario como un array params, podemos añadir los destinatarios que creamos oportunos en la misma invocación de la función. El uso, más sencillo aún:
EnviarArchivoEmail(@"C:\Archivo.txt", // El archivo
"mail.mismtp.net", 25, // El servidor
new NetworkCredential("Remitente@mismtp.net", @"mipassword"), //Mis credenciales
new MailAddress("Remitente@mismtp.net", "Valeriano"), // Remitente
new MailAddress("destinatario1@gmail.com", "Destinatario 1"), // Destinatario
new MailAddress("destinatario2@gmail.com","Destinatario 2")); // Destinatario