Inicio > .Net, Computación, Informática, Visual 2005, VISUAL BASIC > Enviar correo desde Visual Basic .Net – Usando System.Net.Mail.MailMessage

Enviar correo desde Visual Basic .Net – Usando System.Net.Mail.MailMessage


En .Net existen muchas clases que nos facilitan la vida y nos permiten hacer código más legible, de igual manera pasa con el envió de correo.
Para poder utilizar el envió de correo con .Net necesitamos utilizar los siguientes namespace:

-	System.Net.Mail
-	System.Net

En el siguiente ejemplo quiero mostrarles una pequeña aplicación de escritorio en donde aplico un sistema básico de envió de correo:

Básicamente la interfaz nos permite ingresar los valores básicos para enviar un correo
– Servidor SMTP – Servidor de donde se enviara el correo
– Puerto – Puerto por el cual se conectara al servidor
– Usuario — Usuario para conectarse al servidor SMTP
– Contraseña — Contraseña para conectarse al servidor SMTP
– Para – A quien se le enviara el correo
– Asunto – El asunto del correo
– Contenido: Lo que llevara el correo
Bueno básicamente lo que hacemos es crear un método para hacer un poco más ordenados, capturamos en una variable cada uno de los valores ingresados a la aplicación:

Dim SMTP As String = txtSMTP.Text
Dim Usuario As String = txtUsuario.Text
Dim Contraseña As String = txtContraseña.Text
Dim A As String = txtA.Text
Dim Contenido As String = txtContenido.Text
Dim Asunto As String = txtAsunto.Text
Dim Puerto As Integer = Integer.Parse(txtPuerto.Text)

En el resto de la aplicacion trabajaremos con estas variables, bueno ahora lo que ahcemos es simplemente preparar el correo creando un objeto tipo Mail y un objeto tipo Address para colocarle al correo de quine va remitido de esta manera:

'Declaro la variable para enviar el correo
Dim correo As New System.Net.Mail.MailMessage()
correo.From = New System.Net.Mail.MailAddress(Usuario)
correo.Subject = Asunto
correo.To.Add(A)
correo.Body = Contenido

Luego en el mismo método realizamos la configuración del servidor para ello utilizaremos una credencial para conectarnos al servidor para el caso de .Net es NetworkCredential y para configurar el servidor SmtpClient, de la siguiente manera:

'Configuracion del servidor
Dim Servidor As New System.Net.Mail.SmtpClient
Servidor.Host = SMTP
Servidor.Port = Puerto
Servidor.EnableSsl = True
Servidor.Credentials = New System.Net.NetworkCredential(Usuario, Contraseña)
Servidor.Send(correo)

Por ultimo podemos agregar un mensaje de confirmacion al usuario:

MessageBox.Show("Correo enviado!", "Correo", MessageBoxButtons.OK, MessageBoxIcon.Information)

Como ven es muy fácil y además algo muy usado es casi necesario en las aplicaciones empresariales realizar este proceso espero le sirva y a todos gracias por estar al tanto del blog.

Les dejo las fuentes:

Codigo fuente Enviar correo

About these ads
  1. francisco
    marzo 4, 2010 en 8:40 pm

    muy interesante y didáctico sin embargo como le hacemos para averiguar que debo poner como server smtp y número de puerto para un sender de gmail.com.

    • Alberto
      junio 29, 2012 en 12:45 am

      cierto digamos un usuario .. no sabria q escribir en esos campos smtp y puerto , etc.. para un usuario hay q hacerlo lo mas amigable posible .. sta exc el post … pero para un usuario seria un enredo .. saber q va ahi .. ;)

  2. wilson fuentes
    abril 15, 2010 en 9:06 pm

    Gracias por el ejemplo, sirvio a la perfeccion

    tambien aqui hay un link que explica como enviar usando gmail
    http://geeks.ms/blogs/jalarcon/archive/2007/06/23/c-243-mo-enviar-correo-electr-243-nico-por-c-243-digo-usando-cuentas-de-gmail.aspx

    esta hecho en C, pero logré adptarlo a aplicacion visual basic

  3. walter
    mayo 14, 2010 en 4:50 am

    hey amigo está muy interesante el tutorial. Quisiera saber si se puede abjuntar un archivo y enviarlo? Tambien se puede recibir correos en visual basic? Me gustaría si sabes publicarlo

    • mayo 20, 2010 en 5:27 pm

      de esta manera de da de una cualquier cosa me dices

      Dim archivo As New System.Net.Mail.Attachment(“C:\archivo.txt”)

      correo.Attachments.Add(archivo)

  4. wandi
    junio 21, 2010 en 9:47 pm

    muy buen post!, sin embargo, tengo como servidor SMTP a Argosoft, y al momento de correr el programa me sale error de que el servidor no admite conexiones seguras y en el servidor me sale el siguiente error: Error[10054] connection reset by peer.
    Ayuda profavor!! Muchas gracias!

  5. noviembre 14, 2010 en 12:53 am

    Estaba buscando otra cosa en msn y di con tu web.Por cierto muy buenos articulos

  6. cesar
    diciembre 16, 2010 en 6:17 pm

    este codigo lo ingreso enel boton send??

  7. diciembre 20, 2010 en 7:25 pm

    excelente tu website, te felicito!

  8. diciembre 20, 2010 en 8:34 pm

    Muy bueno tu post, te felicito!

  9. eddybustillos
    diciembre 26, 2010 en 7:14 pm

    no me funciona tu progrma y no se el xq ?? estoy interesado de agregar esta funcionalidad a mi sistema o ayudameee como debo realizar el llenado de los campos como el de numero de puerto, y nombre de servidor smtp?? ,,,,, ya q cuando lleno los campos en nombre de servidor smtp pongo GMAIL.COM y numero de puerto 587 ..
    o es q se debe a problemas de mi laptop ayudame pleaseee , q esta desconfigurado en mi vusual

  10. silvis
    enero 17, 2011 en 4:31 pm

    olas

    gracias me funciono a la perfecion con hotmail, yahoo estoy utilizando vb.net 2010

    pero a colocar un correo de google me manda un error q la conexion no es insegura por lo tanto no me deja enviar el correo
    ejemplo:
    tengo el servidor Dim SMTP As String = “mail.coin.desoft.com” con el puerto 25

    me puedes ayudar le agradesco antemano su colaboracion

  11. Javier Suárez
    julio 4, 2011 en 5:55 pm

    Estupendo!
    Muchas gracias.

  12. victor manuel
    julio 23, 2011 en 5:42 am

    que pongo en puerto para el hotmail y tambien que pongo en donde dice servidor smtp.. gracias

    • julio 23, 2011 en 5:02 pm

      Prueba con:
      Servidor SMTP: smtp.live.com
      Puerto SMTP: 25.

  13. felix
    agosto 2, 2011 en 8:44 pm

    Perfecto, pero al intentar enviar a los destinatarios como CC y BC (copia oculta y copia) no da error pero no lo hace.

    miCorreo.Bcc.Add(txt_copia.Text)

    alguien sabe por qué?

    gracias

  14. José Antonio Pérez Sanjosé
    agosto 11, 2011 en 9:45 am

    Aquí os dejo una entrada donde se explica, de forma muy intuitiva, el envío de emails con vb.NET:

    http://jpsprogramacion.blogspot.com/2011/07/envio-de-email-con-aspnet.html

  15. dios
    octubre 10, 2011 en 8:51 pm

    hoye me sale un error “Failure sending mail.” smtpexception was unlashed

  16. Carlos Marx
    noviembre 15, 2011 en 12:12 am

    gran ejemplo vago me salvaste el empleo jajaja

  17. Carlos Marx
    noviembre 15, 2011 en 9:20 pm

    por que putas me mandara duplicados los correos llegan 2 veces

  18. Carlos Marx
    noviembre 15, 2011 en 9:21 pm

    por que putas me mandara duplicados los correos llegan 2 veces

    mierda

  19. José L. Figueroa
    enero 13, 2012 en 8:31 pm

    Hola estoy tratando con hotmail. Pero con el Try catch me envía error al enviar el correo mientras que sin él me truena en

    Servidor.Send(correo)

    Estoy usando para SMTP:

    SMTP = “SMTP.live.com”

    No sabes porque será???????? Gracias

    • enero 13, 2012 en 8:36 pm

      Que error te esta sacando??? depronto es por el SLL ponlo en false

    • Carlos Marx
      enero 13, 2012 en 8:46 pm

      pero que error? puede ser mala autentificacion o el numero del puerto o el tipo de seguridad.

    • Vladimir
      febrero 17, 2012 en 4:21 pm

      CAmbia al puerto 587 y listo! me paso lo mismo! grrrrrrrrrrrrrrr

  20. johan
    febrero 11, 2012 en 10:51 pm

    perfecto, funciona gracias

  21. Martín
    febrero 21, 2012 en 9:26 pm

    A la gente que tiene problemas con gmail, a mi me anduvo a la perfección. Los datos que tienen que poner son

    Dim SMTP As String = “smtp.gmail.com”
    Dim Usuario As String = “xxxxxxxx@gmail.com”
    Dim Puerto As Integer = Integer.Parse(25)

    Saludos

  22. koi
    marzo 2, 2012 en 5:16 pm

    Oye espero me puedas ayudar, cuando declaro la variable “correo” como mailmessage y quiero asignarle un valor en from, subject etc. el compilador me manda un error “se esperaba una declaracion” ¿sabes por que pasa esto? hasta copie directamente tu codigo y aun asi esto me aparece. Estoy usando visual studio 2010 con framework 4

    Dim correo As New System.Net.Mail.MailMessage()
    correo.From = New System.Net.Mail.MailAddress(Usuario)
    correo.Subject = Asunto
    correo.To.Add(A)
    correo.Body = Contenido

  23. Stuardo
    marzo 3, 2012 en 4:30 am

    Excelente post pero si tengo mi propio servidor de correos.. que outlok me da… que puerto debo de usar

    • Stuardo
      marzo 3, 2012 en 5:15 am

      Estoy probando mandar un correo con servidor de hotmail pero me tira error y me dic que la conexion no es seguro… y en ssl le pongo false me dic que el la conexion no es seguro que puedo hacer…?

  24. Estuardo
    marzo 5, 2012 en 7:13 pm

    que pasa si tengo un proxy..???? hay que configurar el proxy…???

    • marzo 5, 2012 en 7:14 pm

      Depende del servidor de correo, pero si es alguno de Gmail,Hotmail etc… no es necesario.

      • Class Micky
        abril 8, 2013 en 9:40 pm

        Buen aporte, sin embargo desmiento lo que dices:

        Cuando tu acceso a internet es controlado por un servidor proxy, entonces no se podra realizar el envio del correo.

        Aun no lo descubro pero supongo algo más debe haber de configurarse en esas clases.
        Si es que alguien lo prueba, y puede aportar con este tema, se agradecerá bastante.

  25. Newito
    marzo 24, 2012 en 3:10 pm

    Hola,

    tengo un problema. No envía en mensaje hasta que cierro la aplicación. La única forma que lo hace es si hago correo.dispose, pero me borra los datos del mensaje (attach, body, etc)
    Alguien tiene una solución para este problema?
    Windows 7 Home Premium 64 bits
    VB 2010 – Framework 4.0

    Muchas gracias.

  26. Héctor
    abril 16, 2012 en 4:37 pm

    Excelente!!, me fué de gran ayuda. Un abrazo

  27. luis
    abril 27, 2012 en 2:56 pm

    Muy buen post. Gracias!!!

  28. Felipe R
    junio 13, 2012 en 3:59 pm

    Perfecto Maestro !, esto es lo que andaba buscando, funciona al 100% con hotmail.
    utilizando el puerto 587
    saludos!!

  29. Jesus
    julio 13, 2012 en 8:37 am

    Hola. Muy interesante el link que me biene muy bien. Mi pregunta es la siguiente ¿Como le indico que quiero recibir confirmacion de lectura del correo enviado? y otra cosa mas. Como hago para recibir correo electronico con adjuntos (sin utilizar programas de correo). Gracias. Un saludo

  30. sebastian
    julio 14, 2012 en 10:43 pm

    amigos me sirvio mucho su codigo y por eso me gustaria complementarlo!! aqui les dejo lo que yo ise es con coneccion a base de datos sql

    ojala les sirva

    cnn = New SqlConnection(coneccion)
    cnn.Open()
    cmm = New SqlCommand
    cmm.CommandType = CommandType.Text
    cmm.CommandText = “select agregar_mails from agregarmails ”
    cmm.Connection = cnn
    Dim reader1 = cmm.ExecuteReader()
    Dim con1 = New SqlConnection(coneccion)
    con1.Open()
    While reader1.Read
    Dim agregar_mails = reader1.GetString(0)

    cnn = New SqlConnection(coneccion)
    cnn.Open()
    cmm = New SqlCommand
    cmm.CommandType = CommandType.Text
    cmm.CommandText = “select mail,pmail from mail ”
    cmm.Connection = cnn

    Dim reader = cmm.ExecuteReader()

    Dim con = New SqlConnection(coneccion)
    con.Open()
    While reader.Read

    Dim mail = reader.GetString(0)
    Dim pass = reader.GetString(1)
    Dim correo As New System.Net.Mail.MailMessage

    correo.From = New System.Net.Mail.MailAddress(mail)

    correo.To.Add(agregar_mails)

    correo.Subject = asun.Text

    correo.Body = tcome.Text

    correo.IsBodyHtml = False

    correo.Priority = System.Net.Mail.MailPriority.Normal

    Dim smtp As New System.Net.Mail.SmtpClient

    smtp.Host = “smtp.live.com”

    smtp.DeliveryMethod = Net.Mail.SmtpDeliveryMethod.Network

    smtp.Credentials = New System.Net.NetworkCredential(mail, pass)

    Try

    smtp.Send(correo)

    MsgBox(“Mensaje enviado satisfactoriamente”)

    Catch ex As System.Net.Mail.SmtpException

    MsgBox(ex.Message)

    End Try
    End While
    End While

  31. GTI
    agosto 28, 2012 en 6:40 pm

    Private Sub enviarCorreo(ByVal Contenido As String, ByVal sucursal As String)

    Dim SMTP As String = “smtp.gmail.com”
    Dim Usuario As String
    Dim Contra As String
    Dim A As String
    Dim Asunto As String = “Reporte diario”
    Dim Puerto As Integer = Integer.Parse(465)

    Usuario = “xxxxxxx@gmail.com”
    Contra = “xxxxxxx”

    A = “yyyyyyy@gmail.com”

    Dim correo As New System.Net.Mail.MailMessage()
    correo.From = New System.Net.Mail.MailAddress(Usuario)
    correo.Subject = Asunto
    correo.To.Add(A)
    correo.Body = Contenido

    ‘Configuracion del servidor
    Dim Servidor As New System.Net.Mail.SmtpClient
    Servidor.Host = SMTP
    Servidor.Port = Puerto
    Servidor.EnableSsl = True
    Servidor.Credentials = New System.Net.NetworkCredential(Usuario, Contra)
    Servidor.Send(correo)

    MsgBox(“Enviado”)
    End Sub:

    Se me traba la aplicación :/ Se me pone como “No responde”
    Hice algo mal?

  32. Luisa
    agosto 28, 2012 en 7:26 pm

    Me da el error “El servidor SMTP requiere una conexiión segura o el cliente no se autenticó. La respuesta del servidor fue: 5.5.1 Authentication Required”

    Estoy entrando por el puerto 587

    • agosto 28, 2012 en 7:27 pm

      donde dice EnableSsl ponle false a ver

  33. Alonos Merino
    agosto 31, 2012 en 4:43 pm

    Muchas gracias, excelente aportacion es de mucha utilidad;

  34. septiembre 26, 2012 en 1:45 pm

    te hago una consulta
    tengo mi mail (usuario de cuenta)
    que es
    nombre.2donombre.dominio.com

    y al no tener “@” me arroja error…

    como puedo solucionarlo??

    saludos!

  35. EDUARDO PRADO
    octubre 31, 2012 en 5:09 pm

    DISCULPEN HAY ALGUNA FORMA DE QUE EL CORREO SE ENVIE AUTOMATICAMENTE EN DETERMINADO TIEMPO SIN NECESIDAD DE PONER UN BOTON DE ENVIAR

    • octubre 31, 2012 en 5:46 pm

      Claro solo tienes que ponerle un timer y desatas el método cada vez que quieras que envié.

      casi todos los servidores tienen esto controlado y lo mandan al spam asi que no te pongas a mandar muchos correos si es lo que deseas hacer.

      • EDUARDO PRADO
        octubre 31, 2012 en 11:40 pm

        OTRA PREGUNTA SE PUEDE CAMBIAR EL IDIOMA DE LOS LABEL EN VISUAL STUDIO 2010 YA EJECUTADO EL SISTEMA. COMO POR EJEMPLO DISEÑAR UN FORMULARIO PARA ESA CONFIGURACIÓN

      • noviembre 2, 2012 en 5:31 am

        debes preguntar la cultura de donde esta ejecutadonse http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx dependiendo de la cultura pones el texto en ingles español etc… pero eso debes hacerlo manual.

  36. Maialen
    enero 2, 2013 en 3:27 pm

    como tengo que configurar el puerto para utilizar outlook?
    Gracias

    • enero 2, 2013 en 5:18 pm

      no entiendo muy bien tu ppregunta, el codigo no tiene que ver con outlook pero si hay toca tambien configurar el puerto

      • Maialen
        enero 3, 2013 en 7:56 am

        Lo que yo quiero es que se mande desde .net un email mediante el outlook y necesito saber como tengo que hacer la configuracion, es decir, el puerto al que se tiene que conectar el servidor para que se pueda enviar el email desde outlook.

      • enero 4, 2013 en 3:00 pm

        para eso lo que debes hacer es abrir el outllok y pasarle los datos y que la persona le de enviar por el outlook para ello este es el codigo:

        string outlookName = “Outlook.Application”;
        dynamic outlook;
        try
        {
        //See if Outlook is already running
        outlook = AutomationFactory.GetObject(outlookName);
        }
        catch
        {
        outlook = AutomationFactory.CreateObject(outlookName);
        }

        dynamic mailItem = outlook.CreateItem(0);

        mailItem.Display();

        string msgBody = strBody;

        mailItem.Subject = strSubject;
        mailItem.HTMLBody = msgBody;
        mailItem.Attachments.Add(@”” + path);

  37. febrero 18, 2013 en 2:41 pm

    Hola gracias por tu labor me fue de gran ayuda, me funciona correctamente tanto para hotmail como gmail

  38. Fabián Vega
    marzo 12, 2013 en 3:42 pm

    Hola! Tengo un duda…. Estoy haciendo un programa que crea correos diferentes para diferentes diferentes emails, cada uno con un archivo adjunto distinto… La creacion de correos la hace automaticamente en base a una lista… pero a la hora de hacer los envios por medio de un ciclo, luego de hacer el primer envio rapidamente, los siguientes duran una eternidad enviandose… Sabes que puede estar pasando?

    • marzo 12, 2013 en 3:59 pm

      Si, si esta usando un servidor como Gmail, hotmail o cualquiera publico ellos por seguridad evitan que se envíen mensajes así ya que los toma como spam, si usas un servidor propio puede ser que tenga algún filtro o que se llene el pool que tiene para mails, para poder enviar cantidades grandes de mail debes investigar el tema y no hacer un simple ciclo.

      investígalo como bulk email

      • Fabián Vega
        marzo 12, 2013 en 4:26 pm

        Gracias!

  39. Gustavo
    marzo 18, 2013 en 3:46 pm

    Buenos dias…. Estoy en un proyecto donde tengo que enviar correo electronico de forma automatica.. al realizar Imports System.Net.Mail sobre VS 2005 me da un error en el cual dice que no contiene ningun miembro publico o no se encuentran. Si me dan una mano agradecido.

    • marzo 20, 2013 en 3:43 pm

      no, no entiendo le problema, el ejemplo tambien esta hecho en VS2005

    • Gustavo
      marzo 20, 2013 en 5:15 pm

      Hola, fíjate si está instalado Framework 2.0 o superior, ya que está disponible a partir de la 2.0. La versión de VB está bien.

  40. miguel35
    agosto 6, 2013 en 9:46 pm

    si nquiero enviar aun correo interno de una lan por ejemplo correo.scsoft.com.pe como tendria que hacer

  41. Puma
    octubre 24, 2013 en 3:47 pm

    Excelente, me fue de mucha ayuda
    Gracias

  1. enero 2, 2011 en 6:25 am

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 735 seguidores

%d personas les gusta esto: