HOLA
Menú
Diseño, edición y programación de manera sencilla.
Últimos Proyectos
  • Pozol
  • Alex Hamtom
  • Pozol
Pozol1
Alex Hamtom
Pozol
Últimas Publicaciones

martes, 17 de marzo de 2015

Visual Studio: Enviar correo electrónico

Visual Studio Enviar Correo

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


Proyecto Enviar Correo

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.

Visual Studio Aplicacion Enviar Correo

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.
Leer más...