Envio de correo desde Vb.Net

Escrito en Febrero 25, 2009 por Alex

El envio de correo desde Visual Basic .Net se puede llevar a cabo de una manera muy sencilla.

En este ejemplo utilizamos el espacio de nombres System.Net.Mail, un objeto del tipo MailMessage y otro del tipo SmtpClient.

Algunas propiedades del objeto SmtpClient:

  • 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.
  • EnableSsl: Especifique si el objeto SmtpClient utiliza SSL (Secure Sockets Layer) para cifrar la conexión.
  • TimeOut: Obtiene o establece un valor que especifica el intervalo de tiempo a partir del cual se considera que una llamada a Send sincrónica excede el tiempo de espera.
  • Credentials: Obtiene o establece las credenciales utilizadas para autenticar al remitente. (Es decir, usuario y password)

 

Algunos métodos usados:

  • Send: Envía un mensaje de correo electrónico a un servidor SMTP para su entrega. Estos métodos se bloquean mientras se transmite el mensaje.
  • SendAsyncCancel: Cancela una operación asincrónica para enviar un mensaje de correo electrónico.

Primero creamos un procedimiento llamado EnviarMail que como su nombre lo indica será el encargado de realizar todas las operaciones de envio.

En este ejemplo utilizamos el servidor de Gmail para realizar el envio, pero podemos utilizar alguno propio.

 Imports System.Net.Mail
 
'Procedimiento
    Private Sub EnviarMail(ByVal StrDe As String, ByVal StrPara As String, _
ByVal StrAsunto As String, ByVal StrMensaje As String)
        Try
'objeto tipo mensaje con parametros De: Para:
Dim Msg As New MailMessage(New MailAddress(StrDe), New MailAddress(StrPara))
            'asunto
            Msg.Subject = StrAsunto
            'mensaje
            Msg.Body = StrMensaje
 
             'DATOS SMTP
            'Objeto SMTP
            Dim SMPT As New SmtpClient
            'Credenciales
            SMPT.Credentials = New System.Net.NetworkCredential _
("usuario@gmail.com", "CONTRASEÑA")
            'Host, Puerto, autenticacion
            SMPT.Host = "smtp.gmail.com"
            SMPT.Port = 587
            SMPT.EnableSsl = True
            SMPT.Timeout = 10
 
            'Enviar
            SMPT.Send(Msg)
 
            Me.Cursor = Cursors.Default
 
        Catch ex As Exception
            Me.Cursor = Cursors.Default
            MsgBox(ex.Message)
        End Try
    End Sub
 

y la manera de utilizar el procedimiento:

EnviarMail("remitente@servidor.com", "destino@servidor.com", _
"Asunto", "Mensaje")

En este ejemplo vemos que es necesario escribir la dirección del remitente, pero si usamos el servidor de Gmail, aunque escribamos una dirección de remitente falsa, gmail siempre la sustituirá por la verdadera, sin embargo es necesario que este campo no se quede en blanco.

Si realizan este ejemplo, notaran que mientras el correo es enviado, el formulario se bloquea. Si enviaramos archivos adjuntos, se podría tardar mucho más y da la apariencia de que está bloqueado el programa. Para evitar esto necesitamos utilizar Threads y para esto utilizamos el espacio de nombres System.Threading, pero este ejemplo lo pongo en el siguiente post ya que tambien veremos lo del envio de adjuntos y ponfré a su disposición un ejemplo completo para descarga incluyendo una barra de progreso que indicará el momento en que el mail esta siendo enviado.

Si te gusto este artículo Suscribete a nuestro feed

2 Comentarios en “Envio de correo desde Vb.Net”

  1. Diego |

    Hola,

    Primeramente enhorabuena por su programa.

    Lo estoy usando pero sólo me deja enviar 1 mail, a la que envío 2 seguidos me dice “The operation has timed out”

    para que vuelva a funcionar tengo que cerrar y volver a abrir.

    Cómo se soluciona?

    Gracias y un saludo!.

  2. Alex |

    Diego: Solo hay que cambiar en la propiedad timeout el tiempo que tiene ahi. Lo ideal es aumentarlo.
    SMPT.Timeout = 10 ‘aqui ponle 30 o 40 o mas si es necesario.

Escribe un comentario