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.
Información Bitacoras.com…
Si lo deseas, puedes hacer click para valorar este post en Bitacoras.com. Gracias….
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
puedes usar la siguiente linea para que no de error:
miCorreo.From = New System.Net.Mail.MailAddress(“josem.flores@sfb.es”)
Eliseo
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.
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.
Thank you!
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.
Muchas gracias y un saludo.
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.
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.
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
Esta es una funcion muy buena!!! gracias por poder compartir esto con nosotros
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í…
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
parceros muchas gracias son unos capos de verda que me sirvio mucho la informacion.
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.
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.
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
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.
Gracias por el código
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 ?
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
Con Windows 7 Profesional no funciona, porque??
Excelente el codigo hermano
mil gracias
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??
yo de nuevo si a alguien no le sale pruebe con el puerto 587 en hotmail
gracias estubo muy bueno todo esto me sirvio de maravilla
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.
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
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!
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.
gracias por los aportes me sirvio muchisisisimo enserio
Gracias a mi me funciono de maravilla
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!
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
smtp.Port = “587″ ‘No es 25, es 587 y te funciona perfecto.
Muyyyy bueno funciona de 10!!!… Exelente aporte!!! Ahora le meto mano… Muchisimas gracias =)
Chuta gracias a Pharsat..
tu aporte me ayudo mucho…
gracias a todos los que aportan con su codigo q ayudan tanto
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…
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
yo pondría este código en un botón enviar luego de validar que se ingresaron todos los datos necesario.
Suerte
Todo salio excelente!!!
Gracias por el aporte
Un Saludo
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
Muchas gracias. Un pequeño aporte.
Para envia con copia (CC)=
correo.CC.Add(“direcciòn de correo”)
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.
Remplazalo por &
MsgBox(“ERROR: ” & ex.Message, MsgBoxStyle.OkOnly, “Error!”)
Muuuuchas gracias.. ya encontré la solucioen
Podrias añadir como enviar u elemento o como agregar arhivos??
Gracias a todos por el código!!
funciona de fábula!!
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??
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.