
Para enviar un correo por medio de una aplicación hecha con Visual Studio hay diferentes maneras para hacerlo, una de las mas sencillas es mediante el espacio de nombres System.Net.Mail.
El espacio de nombres System.Net.Mail contiene clases que se utilizan para enviar correo electrónico a un servidor SMTP (protocolo simple de transferencia de correo por sus siglas en ingles) para la entrega. Es necesario tener una cuenta de correo Gmail o Hotmail como credenciales de acceso al host (quien lo envia).
Tabla de contenido
1. Comenzando el Proyecto
2. Clases, Propiedades y Métodos
3. Código
4. Errores
Comenzando el Proyecto

Creamos un nuevo proyecto con la plantilla "Aplicación de Windows Forms" de Visual Basic, se nos mostrara una pestaña con el diseño, al dar doble clic sobre el Form1 (o al Form1 dentro de Form1.vb en el explorador de soluciones o presionar F7) se abrirá otra pestaña en donde podremos escribir el código.
Al principio del código (arriba de Public Class Form1) importamos el espacio de nombres mediante la instrucción Imports System.Net.Mail.
Código
Imports System.Net.Mail
Public Class Form1
End Class
Clases, Propiedades y Métodos
Ahora que tenemos agregado el namespace System.Net.Mail podremos hacer uso de las clases MailMessage y SmtpClient con las cuales podremos crear y enviar nuestro correo.
Clase | Descripción |
---|---|
MailMessage | Representa un mensaje de correo electrónico que puede enviarse mediante la clase SmtpClient. |
SmtpClient | Permite a las aplicaciones enviar mensajes de correo electrónico mediante el protocolo SMTP (Protocolo simple de transferencia de correo). |
La clase MailMessage tienen diferentes propiedades con las cuales podremos definir la dirección de envió, los destinatarios, prioridad, asunto y cuerpo del correo.
Nombre | Descripción |
---|---|
Attachment | Representa los datos adjuntos a un mensaje de correo electrónico. |
Body | Obtiene o establece el cuerpo del mensaje. |
CC | Obtiene la colección de direcciones que contiene los destinatarios para recibir copia (CC) de este mensaje de correo electrónico. |
From | Obtiene o establece la dirección de este mensaje de correo electrónico. |
IsBodyHtml | Obtiene o establece un valor que indica si el cuerpo del mensaje de correo está en HTML. |
Priority | Obtiene o establece la prioridad del mensaje de correo electrónico. |
Subject | Obtiene o establece la línea de asunto de este mensaje de correo electrónico. |
To | Obtiene la colección de direcciones que contiene los destinatarios de este mensaje de correo electrónico. |
La clase SmtpClient tienen propiedades con las cuales podemos hacer el envió de los mensajes de correo electrónico mediante la utilización de un host para las transacciones SMTP.
Nombre | Descripción |
---|---|
Credentials | Obtiene o establece las credenciales utilizadas para autenticar al remitente. |
EnableSsl | Especifique si el objeto SmtpClient utiliza SSL (Secure Sockets Layer) para cifrar la conexión. |
Host | Obtiene o establece el nombre o la dirección IP del host que se utiliza para las transacciones SMTP. |
Port | Obtiene o establece el puerto utilizado para las transacciones SMTP. |
Send(MailMessage) | Envía el mensaje especificado a un servidor SMTP para su entrega. |
El espacio de nombres incluye mas clases, propiedades y métodos, los pueden consultar en la documentación de Microsoft.
Código
Ya tenemos el espacio de nombres System.Net.Mail en nuestro código, ahora habrá que definir las clases MailMessage y SmtpClient dentro de Public Class Form1. Creamos una variable llamada message con la cual definiremos una clase MailMessage y la clase SmtpClient la definimos con una variable llamada smtp.
Código
Imports System.Net.Mail
Public Class Form1
Dim message As New MailMessage
Dim smtp As New SmtpClient
End Class
Con esto ya se puede hacer uso de las propiedades y métodos de ambas clases. De la clase MailMessage utilizaremos las propiedades From, To, Body, Subject y Priority, y de la clase SmtpClient usaremos las propiedades EnableSsl, Port, Host, Credentials y el método Send(message).
Código
Imports System.Net.Mail
Public Class Form1
Dim message As New MailMessage
Dim smtp As New SmtpClient
message.From = New MailAddress("correoorigen@mail.com") 'Direccion de origen del mensaje
message.To.Add("correodestino@mail.com") 'Direccion a la que se quiere enviar
message.Body = "Contenido del Correo" 'Cuerpo del correo
message.Subject = "Asunto" 'Asunto del correo
message.Priority = MailPriority.Normal 'Prioridad
smtp.EnableSsl = True 'Cifrado
smtp.Port = "Numero Puerto" 'Puerto de transacciones
smtp.Host = "DireccionHost" 'Host de transacciones
smtp.Credentials = New Net.NetworkCredential("CorreoOrigen", "Contraseña") 'Credenciales de autentificacion del remitente
smtp.Send(message) 'Envia el correo
End Class
Se deben modificar los valores entrecomillados por los deseados, el valor de smtp.Port varia dependiendo del host, lo mas comun es que sea 587 y el valor de smtp.Host es smtp.gmail.com si el correo de origen es de GMail o smtp.live.com si el correo de origen es de Hotmail/Live.
Al ejecutar la aplicación con este código se enviara el mail, los valores del correo y del host se especifican en el mismo código, así que siempre que se ejecute el programa el correo sera siempre el mismo.
Mediante el uso de cajas de texto (Textbox) y un botón (Button) es posible el modificar los valores del correo y del host para así mandar correos con información diferente.

En el Diseñado del Form1 se agregan 5 cajas de texto y un botón, en la primer caja de texto se colocara el correo del cual se enviara (origen), la segunda caja de texto tendrá la contraseña para el acceso del host (la contraseña del correo de origen), el contenido de la tercer caja tendrá el correo de destino, la cuarta caja de texto tendrá el asunto y la ultima caja sera para el contenido del mensaje.
Código
Imports System.Net.Mail
Public Class Form1
Dim message As New MailMessage
Dim smtp As New SmtpClient
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
message.From = New MailAddress(TextBox1.Text) 'Correo Origen
message.To.Add(TextBox3.Text) 'Correo Destino
message.Body = TextBox5.Text 'Cuerpo
message.Subject = TextBox4.Text 'Asunto
message.Priority = MailPriority.Normal 'Prioridad
smtp.EnableSsl = True 'Cifrado
smtp.Port = "587" 'Puerto
smtp.Host = "smtp.gmail.com" 'Host
smtp.Credentials = New Net.NetworkCredential(TextBox1.Text, TextBox2.Text) 'Credenciales
smtp.Send(message) 'Envio
MsgBox("Envio completado con exito", MsgBoxStyle.OkOnly, "Enviado") 'Mensaje de envio
End Sub
End Class
Errores
Un error que se puede hacer presente es cuando no se permite el acceso al host, se presenta en el método de envió y aparece el mensaje "5.5.1 authentication required", por lo general pasa cuando el host es Gmail ya que por defecto bloquea las aplicaciones no seguras.
Para solucionarlo se debe ingresar a la cuenta de Gmail en donde tendremos un correo con el asunto "Cuenta de Google: intento de inicio de sesión bloqueado" ahí nos dirán como cambiar la configuración de la cuenta en la dirección de aplicaciones menos seguras.
Este error también puede ser producido por un antivirus (avast con su escudo de correo electronico) y se soluciona desactivando la seguridad de correo.