Usando la clase SmtpClient para el envio de correo
Enviar correo con .NET Framework puede tan solo requerir dos líneas de código, pero puede requerir mas líneas de código para agregar funcionalidad a problemas como la no respuesta del servidor, permitir la transferencia asíncrona o permitir el uso de SSL para cifrar el mensaje y reducir riesgos de seguridad.
Como enviar un mensaje de E-Mail
Una vez creado el mensaje mediante la clase MailMessage, usamos la clase SmtpClient en la que pasamos como parámetro en el constructor el nombre del servidor SMTP y enviamos como parámetro el objeto de tipo MailMessage en el método Send() de la clase SmtpClient, en el siguiente fragmento de código.
Implementación en C#
Implementación en VB
Manejar Excepciones
Existen muchas situaciones en las que enviar un correo, se puede generar una excepción, por ejemplo el servidor de correo podría no estar disponible, el destinario es inválido.
InvalidOperationException: se presenta cuando no se ha definido el hostname del servidor.
SmtpException ó WebException: se presenta cuando el hostname del servidor no existe.
SmtpFailedRecipientException: se presenta cuando un mensaje de correo es enviando a un servidor de correo local, pero el recipiente no tiene buzón de correo, esta exception solo se presenta cuando se envía correo sincrónicamente mediante el método Send() de la clase SmtpClient.
Configurando credenciales de usuario:
Cuando no se usa un servidor de correo local, en el cual se pueda usar la cuenta por defecto de conexión de red, es necesario establecer el nombre de usuario y contraseña para la credencial de red, mediante el objeto NetworkCredential del espacio de nombres System.Net como se muestra en el siguiente fragmento de código.
Configuración de credenciales en C#
Configuración de credenciales en VB
Configurando la capa de sockets seguro (SSL)
Para disminuir las vulnerabilidades de seguridad los servidores de correo solicitan el uso de certificados de seguridad, se pude establecer la propiedad EnableSsl como True de la clase SmtpClient para que se cifre la transmisión mediante certificados .X509, evitando de esta manera que el mensaje se transmita en texto claro, esta propiedad es nueva en el .NET Framework 2.0.
Envió de correo asincrónico
En algunas ocasiones enviar un mensaje de correo electrónico pude durar poco segundos, en otras ocasiones el servidor no responde o sobre el tiempo de salida que puede provocar que la aplicación no responda o no se pueda usar la aplicación debido a que el proceso se encuentra ocupado, para esto se puede usar el envió asincrónico mediante el método SendAsync() de la clase SmtpClient para esto se debe implementa un manejador de eventos para el evento SendCompleted para poder informar al usuario el estado del envió, además se puede cancelar la transferencia del envió mediante el método SendAsyncCancel() como se muestra en el siguiente fragmento de código.
Envión asincrónico desde C#
Envión asincrónico desde VB