Enviar e-mail desde una aplicación windows

Para poder enviar un mail desde nuestra aplicación windows en visual basic .net utilizaremos la clase System.Net.Mail.MailMessage.

Para el ejemplo siguiente vamos a crear un formulario (Form1), una caja de texto para escribir el mensage (TextBox1) y un botón (Button1) con el texto enviar para enviar el e-mail.


Dim miCorreo As New System.Net.Mail.MailMessage

miCorreo.IsBodyHtml = False
miCorreo.From = "info@solovb.net" 'mail desde donde se envía
correo.To.Add("usuario@hotmail.com") 'Mail del destinatario
correo.Subject = "Mensaje de prueba desde aplicación windows [solovb.net]" 'Asunto

miCorreo.Body = TextBox1.Text 'Cuerpo del mensaje

miCorreo.Priority = System.Net.Mail.MailPriority.Normal 'Prioridad

Dim smtp As New System.Net.Mail.SmtpClient

smtp.Host = "smtp.solovb.net"
'para las credenciales debo pasarle la cuenta y la clave desde donde se envía
smtp.Credentials = New System.Net.NetworkCredential("info@solovb.net", "clave123456"))

Try
      smtp.Send(miCorreo)
      MsgBox("Mensaje enviado.", MsgBoxStyle.OkOnly, "solovb.net")
Catch ex As Exception
      MsgBox("ERROR: " & ex.Message, MsgBoxStyle.OkOnly, "Error!")
End Try

La verdad que se puede agregar mucha funcionalidad a este ejemplo, como las cajas de texto para el remitente, destinatario y las opciones de configuración del SMTP.

Pero para un ejemplo (como a mi me gusta) cuanto más sencillo mejor se entiende… ya habrá tiempo de complicarla, jaja.

Si ponemos la propiedad IsBodyHtml en True, podremos llenar el cuerpo con código HTML para que nuestro mensaje llegué con un mejor look.

Si te sirvió, déjame un comentario.



50 Responses to “Enviar e-mail desde una aplicación windows”

  1. Información Bitacoras.com…

    Si lo deseas, puedes hacer click para valorar este post en Bitacoras.com. Gracias….

  2. Jose dice:

    Buenas.

    Una pregunta, en la siguiente linea:

    miCorreo.From = “josem.flores@sfb.es” ‘mail desde donde se envía

    Me indica que un valor de tipo “String” no se puede convertir en ‘System.Net.Mail.MailAdress’

    A ver si me puedes echar una mano por favor. Ya que lo he modificado pero no soy capaz de solucionar ese error.

    Un saludo y gracias

    • Eliseo dice:

      puedes usar la siguiente linea para que no de error:

      miCorreo.From = New System.Net.Mail.MailAddress(“josem.flores@sfb.es”)

      Eliseo

  3. Jose dice:

    Muchas Gracias.

    Pero tengo un problema, te pego mi codigo y te digo el problema:

    Dim _Message As New System.Net.Mail.MailMessage()

    Dim _SMTP As New System.Net.Mail.SmtpClient

    ‘CONFIGURACIÓN DEL STMP

    _SMTP.Credentials = New System.Net.NetworkCredential(“cuenta de correo”, “contraseña”)

    _SMTP.Host = “smtp.gmail.com”

    _SMTP.Port = 465

    _SMTP.EnableSsl = True

    ‘ CONFIGURACION DEL MENSAJE

    _Message.[To].Add(“cuenta de correo”) ‘Cuenta de Correo al que se le quiere enviar el e-mail

    _Message.From = New System.Net.Mail.MailAddress(“cuenta de correo”, “nombre”, System.Text.Encoding.UTF8) ‘Quien lo envía

    _Message.Subject = “prueba” ‘Sujeto del e-mail

    _Message.SubjectEncoding = System.Text.Encoding.UTF8 ‘Codificacion

    _Message.Body = “esto es una prueba” ‘contenido del mail

    _Message.BodyEncoding = System.Text.Encoding.UTF8

    ‘_Message.Priority = System.Net.Mail.MailPriority.Normal

    _Message.IsBodyHtml = False

    ‘ ADICION DE DATOS ADJUNTOS

    ‘Dim _File As String = My.Application.Info.DirectoryPath & “archivo” ‘archivo que se quiere adjuntar

    ‘Dim _Attachment As New System.Net.Mail.Attachment(_File, System.Net.Mime.MediaTypeNames.Application.Octet)

    ‘_Message.Attachments.Add(_Attachment)

    ‘ENVIO

    Try

    _SMTP.Send(_Message)

    Catch ex As System.Net.Mail.SmtpException

    ‘ MessageBox.Show(ex.ToString)

    End Try

    Ese es el codigo ok.

    Vale, pues cuando voy a enviar el correo me sale el siguiente error:

    Se excedio el tiempo de espera de la aplicación.

    Haciendo un telnet a smtp.gmail.com 465 conecto perfectamente, pero sin embargo no consigo enviar el correo…

    Te agradeceria, si puedes claro, que me dieras un solución, ya que no soy capaz de conseguirlo…

    Un saludo y muchas gracias de antemano.

  4. Eliseo dice:

    El código está bien, de hecho lo uso en apliaciones y está funcionando. Aparentemente el tema es con alguna configuración de gmail que esté faltando. Con gmail me da un error. Si logro hacerlo funcionar con gmail, publicaré la solución.

  5. foogeobre dice:

    Thank you!

  6. Jose dice:

    Ok Eliseo.

    Yo cambie el puerto ya que con el 587 no me dejaba ni llegar por telnet, pero sigue sin funcionar…

    Seguire buscando y si consigo algo te lo digo. Y espero tu solucion si no lo consigo. :D

    Muchas gracias y un saludo.

  7. Jose dice:

    Por cierto.

    Me puedes decir algun servidor smtp que funcione correctamente, con el que tu estes funcionando por ejemplo, por que necesito implementarlo cuanto antes y no soy capaz de encontrar ningun servidor con el que funcione…

    A ver si me puedes decir con quien lo haces tu y lo pruebo, a ver si asi si me funciona. ;)

    Muchas gracias de nuevo.

    Un saludo.

  8. Jose dice:

    Buenas.

    Ya esta todo solucionado, era problema del Antivirus, que cortaba los programas gusano que realizaban un envio masivo de correo… Hay que introducir el proceso en las excepciones y funciona correctamente.

    Muchas gracias.

    Un saludo.

  9. kyha dice:

    Buenos dias .

    Tengo un código muy pero que muy parecido al suyo.El Problema es que no no me envia el correo hasta que no cierro la aplicacion ,o envio otro correo que entionces este ultimo no se envia.¿Sabrias el porque o como puedo solucionarlo?
    Gracias

  10. Carlos dice:

    Esta es una funcion muy buena!!! gracias por poder compartir esto con nosotros :D

  11. Marino dice:

    Gracias por compartir este código… Ya me estaba volviendo loco y nada que me salia el correo. Gracias al tuyo solucioné el error. Sigue así… :)

  12. Pharsat dice:

    holas, para aquellos que no encuentran un servidor smtp que funcione les doy a configuracion de uno que se usa con windows live hotmail, es 100% seguro les dejo mi codigo para que observen.

    por favor en su programa no modificar el codigo relacionado a la configuracion del server para evitar errores.

    Dim miCorreo As New System.Net.Mail.MailMessage

    miCorreo.IsBodyHtml = False
    miCorreo.From = New System.Net.Mail.MailAddress(“ejemplo@hotmail.com”) ‘mail desde donde se envía
    miCorreo.To.Add(“ejemplo@hotmail.com”) ‘Mail del destinatario
    miCorreo.Subject = “ejemplo” ‘Asunto
    miCorreo.Body = “puedes poner una cadena de texto o codigo html si expesificas que el mensage lo incluira”
    miCorreo.Priority = System.Net.Mail.MailPriority.Normal ‘Prioridad
    ‘no modificar las siguientes lineas ya qye corresponden a la coniguracion del server smtp de microsoft (windows live)
    Dim smtp As New System.Net.Mail.SmtpClient

    smtp.Host = “smtp.live.com”
    smtp.Port = “25″
    smtp.EnableSsl = True

    ‘para las credenciales debo pasarle la cuenta y la clave desde donde se envía
    smtp.Credentials = New System.Net.NetworkCredential(“ejemplo@hotmail.com”, “contraseña”)

    Try
    smtp.Send(miCorreo)
    MsgBox(“Mensaje enviado.”, MsgBoxStyle.OkOnly)
    Catch ex As Exception
    MsgBox(“ERROR: “)
    End Try

    y de ultimo agredezco a el creador del tema me sirvio demasiado. gracias

  13. oscar dice:

    parceros muchas gracias son unos capos de verda que me sirvio mucho la informacion.

  14. Gonzalo dice:

    Hola , a alguno le andubo ? , pudo mandar algun mail ?
    a mi me da error al intentar mandar un mail :(
    la parte de las credenciales esta bien ?
    o donde puedo conseguir otra ?

    Saludos.

  15. alejandro dice:

    Buenas para todos, este post me ha servido muchisimo, pero tengo un pequeño inconveniente cuando voy adjuntar un archivo, me sale el siguiente error: No se controló NotSupportedException
    No se admite el formato proporcionado de la ruta de acceso.

    Codigo:
    Dim archivo As String = My.Application.Info.DirectoryPath & “c:\arcchivo.rar”

    __________________inicio donde marca error
    Dim adjunto As New System.Net.Mail.Attachment(archivo, System.Net.Mime.MediaTypeNames.Application.Pdf)
    msg.Attachments.Add(adjunto)
    __________________fin donde marca error

    si alguien me puede decir que estoy haciendo mal se los agradezco de antemano.

    Sigan asi uds son de gran ayuda.

  16. Gianpiere Ramos Bernuy dice:

    hola q tal ta chebre tu post pero para q te funcione puedes cambiar el
    _SMTP.Port = 465
    por
    _SMTP.Port = 587
    a mi me funciono con ese.
    suerte q Dios te bendiga

  17. jose dice:

    He probado este código y me funcionó perfecto, hice las modificaciones para el servidor smtp recomendades por Pharsat y la anotación de Eliseo para miCorreo.From = New System.Net.Mail.MailAddress(”josem.flores@sfb.es”) y quedó de maravilla, muchas gracias.

  18. Charly dice:

    Gracias por el código

  19. dosmilcero dice:

    Hola.

    He desarrollado un programa para enviar a través de SMTP accediendo a un servidor exchange con SSL que requiere autenticación. El programa funciona perfectamente desde cualquier pc externo a la red donde se encuentra el servidor exchange, pero, si lo instalo en un pc de la red del servidor exchange, no funciona. Siempre da error de servidor no encontrado.

    Haciendo PING al servidor desde la red local con el DNS, IP publica, privada, telnet, etc.. siempre hay respuesta. En el servidor Exchange el log no dice nada, está claro que no se entera. Antivirus y firewall desconectados ¿ Alguna idea ?

  20. fredy dice:

    hola el codigo q das parsat mefunciona de marabillas pero tengo un problema es q tengo un formulario donde van apoder poner cualquier correo para enviara el mensaje , como puedo espesificar en el script los q consulte los campos de el formulario para q sepa a q correo va enviar el mensaje , el asunto
    te agradeseria mucho si mepudes ayuadar

  21. arturo dice:

    Con Windows 7 Profesional no funciona, porque??

  22. Julian Builes dice:

    Excelente el codigo hermano

    mil gracias

  23. Cristian dice:

    Hola a todos ya intente con el codigo original, el de parshat con la modificacion del otro compa ya deshabilite el antivirus y el firewall y aun asi no me da el envio el codigo lo copie y pegue modificando los campos obvios alguien me puede dar otra solucion??

  24. Cristian dice:

    yo de nuevo si a alguien no le sale pruebe con el puerto 587 en hotmail

  25. john dice:

    gracias estubo muy bueno todo esto me sirvio de maravilla

  26. Jesus dice:

    Hola. Estos son mis primeros pasos por vb.net, (hasta ahora hacia con vb6). El codigo para enviar email me ha servidor perfectamente, es muy buen ejemplo. Ahora lo quiero complicar para los acuses, adjuntos, etc. Queria preguntarte una cosita ¿Podrias enviarme un ejemplo para descargar correo? Muchas gracias por todo.

  27. lester dice:

    una consulta ami ya me envia correos el problema es que necesito envviar una imagen en el cuerpo del correo no como adjunto (tipo publicidad) pero no me deja no la envia.. ya tengo en un richtextbox la imagen pero no envia nada… si alguien me puede ayudar les agradeceria mucho

    mi correo es lesterelpepecalderon@hotmail.com

  28. Eigthy dice:

    He puesto algo mas de belleza al formulario agregando textbox’s y un richtextbox y un boton, para que paresca mas un formulario web. Para esto crearemos:

    Textbox1 (asunto)
    Textbox2 (destinatario)
    Textbox3 (tu correo)
    Textbox4 (passwor – contraseña)
    Richtextbox1 (mensaje)
    Button1 (boton de enviar)

    esta configurado para hotmail, mas abajo dejo el codigo:

    button1 click:

    Dim miCorreo As New System.Net.Mail.MailMessage

    miCorreo.IsBodyHtml = False
    miCorreo.From = New System.Net.Mail.MailAddress(TextBox2.Text) ‘mail desde donde se envía
    miCorreo.To.Add(TextBox3.Text) ‘Mail del destinatario
    miCorreo.Subject = TextBox1.Text ‘Asunto
    miCorreo.Body = RichTextBox1.Text
    miCorreo.Priority = System.Net.Mail.MailPriority.Normal ‘Prioridad

    ‘no modificar las siguientes lineas ya que corresponden a la coniguracion del server smtp de microsoft (windows live)
    Dim smtp As New System.Net.Mail.SmtpClient

    smtp.Host = “smtp.live.com”
    smtp.Port = 25
    smtp.EnableSsl = True

    ‘para las credenciales debo pasarle la cuenta y la clave desde donde se envía
    smtp.Credentials = New System.Net.NetworkCredential(TextBox3.Text, TextBox4.Text)

    Try
    smtp.Send(miCorreo)
    MsgBox(“Mensaje enviado.”, MsgBoxStyle.OkOnly)
    Catch ex As Exception
    MsgBox(“ERROR: “)
    End Try

    como ven segui el codigo original mas el codigo de Marino que hizo la configuracion del smtp para hotmail yo simplemente di mas belleza al formulario como se muestra en esta imagen: http://i46.tinypic.com/34ir2c0.jpg

    espero y les sirva saludos y gracias SoloVB

    me despido!

  29. sagilman dice:

    hola me sale el siguiente error y no se porque pues puse todo el codigo como es.
    el error es:
    Failure sending message.

    alguien que me pueda ayudar porfavor.

  30. juan miguel dice:

    gracias por los aportes me sirvio muchisisisimo enserio :)

  31. Renan Cardona dice:

    Gracias a mi me funciono de maravilla

  32. sonia dice:

    Hola, debo enviar un un link automaticamente dando a un boton en donde los datos me lo debo traer de un select en base de dato oracle, que lo unico que debe tener es un para; asunto: el texto que ira dentro y el link que se debe enviar pero no se como hacerlo podrian ayudarme!

  33. Fernando dice:

    hey amigos a mi no me funciono mm me da error

    el codigolo tengo asi

    Public Class Form1

    Public Sub enviarcorreo()

    Dim miCorreo As New System.Net.Mail.MailMessage
    miCorreo.IsBodyHtml = False
    miCorreo.From = New System.Net.Mail.MailAddress(“luisfernandop.s@hotmail.com”) ‘mail desde donde se envía
    miCorreo.To.Add(“luisfernandop.s@hotmail.com”) ‘Mail del destinatario
    miCorreo.Subject = “prueba fer” ‘Asunto
    miCorreo.Body = “nada”
    miCorreo.Priority = System.Net.Mail.MailPriority.Normal ‘Prioridad
    ‘no modificar las siguientes lineas ya qye corresponden a la coniguracion del server smtp de microsoft (windows live)
    Dim smtp As New System.Net.Mail.SmtpClient

    smtp.Host = “smtp.live.com”
    smtp.Port = 25
    smtp.EnableSsl = True

    ‘para las credenciales debo pasarle la cuenta y la clave desde donde se envía
    smtp.Credentials = New System.Net.NetworkCredential(“luisfernandop.s@hotmail.com”, “/n@ndo/6724766887″)

    Try
    smtp.Send(miCorreo)
    MsgBox(“Mensaje enviado.”, MsgBoxStyle.OkOnly)
    Catch ex As Exception
    MsgBox(“ERROR: “)
    End Try
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    enviarcorreo()

    End Sub
    End Class

    si alguien me pudiera hacer ver mi error lo agradeceria mucho

  34. Cristian Chocobar dice:

    Muyyyy bueno funciona de 10!!!… Exelente aporte!!! Ahora le meto mano… Muchisimas gracias =)

  35. Edgar dice:

    Chuta gracias a Pharsat..
    tu aporte me ayudo mucho…

    gracias a todos los que aportan con su codigo q ayudan tanto

  36. Edgar dice:

    Hola xfa alguien pe podria decir como hago cuando deseo mandar mensajes desde otro correo que no sea hotmail..

    por ejemplo yahoo, gmail, etc… o del servidor de mi empresa…

  37. leboche dice:

    discula una dudami este es mi codigo:

    Dim micorreo As New System.Net.Mail.MailMessage
    Dim correo As New System.Net.Mail.MailMessage
    micorreo.IsBodyHtml = False
    micorreo.From = New System.Net.Mail.MailAddress(“leboche@hotmail.com”)
    correo.To.Add(“leboche@hotmail.com”)
    correo.Subject = “mensaje de prueva”

    micorreo.Body = TextBox1.Text

    micorreo.Priority = Net.Mail.MailPriority.Normal

    Dim smtp As New System.Net.Mail.SmtpClient
    smtp.Host = “smtp.live.com”
    smtp.Port = 587
    smtp.EnableSsl = True
    smtp.Credentials = New System.Net.NetworkCredential(“info@solovb.net”, “123456″)

    Try
    smtp.Send(micorreo)
    MsgBox(“Mensaje enviado.”, MsgBoxStyle.OkOnly, “info@solovb.net”)
    Catch ex As Exception
    MsgBox(“Erro: “)

    End Try

    pero no se si este código en el from o en textbox o en un button me podrías ayudar?
    soy principiante en esot

  38. Melesio Salas dice:

    Todo salio excelente!!!

    Gracias por el aporte

    Un Saludo

  39. Gilmer 20 dice:

    muy interesante tu ejemplo y sobretod facil de entender pero tengo una pregunta, quiero que en cuerpo del correo sea el contenido de un Report
    como dificio es parte, espero su ayuda

  40. CarlosH dice:

    Muchas gracias. Un pequeño aporte.
    Para envia con copia (CC)=
    correo.CC.Add(“direcciòn de correo”)

  41. Javier dice:

    Hola, tengo este problema:

    me dice “No se ha declarado el nombre amp”
    y
    “El caracter no es valido” por el “;” que está junto a amp.

    quien pueda ayudarme muchas gracias.

  42. Javier dice:

    Muuuuchas gracias.. ya encontré la solucioen :)

  43. Javier dice:

    Podrias añadir como enviar u elemento o como agregar arhivos??

  44. Jordi dice:

    Gracias a todos por el código!!

    funciona de fábula!!

  45. Marce dice:

    Hola,
    muy buena la pagina,
    quisisera saber si a traves del codigo de envio de correo se puede enviar una copia oculta Bcc hacia una casilla, en donde hay varios correos mas, es posible eso??

  46. jhoanna0627 dice:

    hola:

    muchas gracias me sirvio de maravilla, le agradezco, por fin pude enviar correos, aunque tengo unas duditas con respecto a como se pone un link en el cuerpo, de que manera se personaliza con etiquetas html y como enviar un adjunto.muchas gracias, el código me funciono perfecto.

Comentar