Buenas, debido a pequeños proyectos que he tenido que realizar no me ha quedado tiempo de actualizar este humilde blog, asi que hoy lo hare con un proyecto muy interesante y a la vez entretenido, enviar un email desde una aplicacion creada en Visual Studio, y en esta oportunidad debido a intereses propios usare c#.
En este proyecto enviare un email simple, quizas cuando tenga tiempo lo haga mejor, el servidor que utilizare sera el de gmail aunque ustedes pueden modificarlo para enviarlo desde su cuenta de yahoo o hotmail por ejemplo.
Solo necesitaran un formulario.
Una caja de texto para el usuario del email
Una caja de texto para la contraseña del usuario
Una caja de texto para el campo de "to"
Una caja de texto para el campo de "subject"
Una caja de texto para el contenido del email "body"
Lo primero que deberan utilizar es la libreria mail ubicada en:
System.Net.Mail
para usar el namespace en c# deberan agregar el codigo siguiente(es opcional) donde se declaran los namespaces que utilizaremos en el proyecto.
using System.Net.Mail;
Luego agregar un boton para enviar el email, aunque pueden hacerlo desde una clase aparte, como repito debido al tiempo lo hare lo mas simple posible.
//Boton Para Enviar Email
private void btnEnviar_Click(object sender, EventArgs e)
{
//Declarando Variables
string From;
string To;
string Message;
string Subject;
string smtpServer;
System.Net.Mail.MailMessage Email;
//Aplicando los campos a cada variable
From = this.txtDe.Text;
To = this.txtPara.Text;
Message = this.txtTextoEmail.Text;
Subject = this.txtSubject.Text;
//Establesco El Email
Email = new System.Net.Mail.MailMessage(From, To, Subject, Message);
System.Net.Mail.SmtpClient smtpMail = new System.Net.Mail.SmtpClient("smtp.gmail.com");
Email.IsBodyHtml = false;
smtpMail.EnableSsl = true;
smtpMail.UseDefaultCredentials = false;
smtpMail.Host = "smtp.gmail.com"
smtpMail.Port = 25;
smtpMail.Host = "smtp.gmail.com"
smtpMail.Credentials = new System.Net.NetworkCredential(this.txtDe.Text, txtContraseña.Text);
//smtpMail.ClientCertificates.
smtpMail.Send(Email);
}
Bueno como podran observar no es la gran cantidad de codigo, pero explicare el codigo por bloques para su comprension.
//Declarando Variables
string From;
string To;
string Message;
string Subject;
string smtpServer;
System.Net.Mail.MailMessage Email;
Aqui lo que se hace es declarar las variables que utilizare para enviar un email.
-------------------------------------------------------------------------------------------------------------------------
//Aplicando los campos a cada variable
From = this.txtDe.Text;
To = this.txtPara.Text;
Message = this.txtTextoEmail.Text;
Subject = this.txtSubject.Text;
Aqui lo que se hace es pasarle los campos que ha introducido al usuario al email.
Deben de cambiar el nombre de los cuadros de texto por el que ustedes le han puesto.
//Establesco El Email, y le paso las variables que introdujo el usuario
Email = new System.Net.Mail.MailMessage(From, To, Subject, Message);
//creo el objeto smtp e introdusco el host que en este caso he utilizado el de gmail
System.Net.Mail.SmtpClient smtpMail = new System.Net.Mail.SmtpClient("smtp.gmail.com");
//Establesco que no es html el cuerpo del email
Email.IsBodyHtml = false;
//Establesco que usare seguridad
//ssl = Secure Sockets Layer
smtpMail.EnableSsl = true;
smtpMail.UseDefaultCredentials = false;
//Establesco el puerto del email en este caso el 25
smtpMail.Port = 25;
//Coloco las credenciales, coloco el usuario y contraseña que introdujo el usuario
smtpMail.Credentials = new System.Net.NetworkCredential(this.txtDe.Text, txtContraseña.Text);
p>
//Envio el email
smtpMail.Send(Email);
Algunos links interesantes acerca de las librerias y palabras vistas en este proyecto, les dejo a sus conocimientos el que mejoren este codigo con un archivo adjunto y una mejor experencia para el usuario.
Las librerias que uso aqui son las mismas para visual basic, asi que no tendran ningun problema en aplicarlo para Visual Basic.
*He utilizado VS 2005 no se si faltara alguna de estas librerias en VS 2003
http://es.wikipedia.org/wiki/Transport_Layer_Security
http://msdn2.microsoft.com/en-us/library/system.net.mail.aspx



Asi es, para VS2003 no existen las librerías System.Net.* ya que eso es propio del FrameWork 2.0. En VSNET 2003 el envío de correos se hace con System.Web.Mail.SmtpMail
Gracias por el dato.
Esta muy interesante su articulo, y quiero hacerle una pregunta: de que manera se puede modificar para poder utilizarlo con una cuenta de correo de hotmail? estoy investigando una forma de lograr esto pero no he encontrado ninguna
El servidor smtp de hotmail es:
smtp.live.com
Hotmail no lo acepta tan fácil
, en internet puedes encontrar muchos smtp o pop3, pero ten en cuenta que estos pasan antes por una tercera parte, por lo que pueden quedarse con tu cuenta para spam.
Al insertarlo com smp.live.com te da una excepción de autenticación, tendrias que leer algo de esto:
http://msdn.microsoft.com/en-us/library/system.net.networkcredential.aspx
http://msdn.microsoft.com/en-us/library/system.net.credentialcache.aspx
Creo que manana(Domingo 8 de junio) lo intentare con mas tiempo, asi que pendiente…
Gracias por visitar mi blog
Muchas gracias por su respuesta
y tan rapido! investigue un poco mas y encontre una forma de anexar credenciales de la clase NetworkCredential, pero ahora mi problema es que me piden que funcione en VS 2003 :S y creo que no entiendo muy bien como se usan estas credenciales en 2003, y tambien no se si necesite utilizar un WebRequest para poder usar todo esto en 2003, si me puede aclarar esta duda se lo agradecere mucho! gracias por todo y espero su respuesta
Hola de nuevo, me enfade de buscar formas de hacerlo en VS 2003 y me instale la version 2005, y actualice mi aplicacion, ahora necesito que funcione en hotmail porque ya lo probe con gmail y funciona! sobre la autenticacion le mande la credencial con mi cuenta y mi password y me pone que no se puede conectar al servidor remoto, asi que no se que mas hacer, bueno espero que me pueda ayudar
que smtp utilizas?
He alli mi problema, no tengo un servidor remoto mas que los gratuitos de internet, y cuando lo probe con gmail utilice el del mismo (smtp.gmail.com) y quise que funcionara con varios smtp de hotmail que vi por internet (mail.hotmail.com, smtp.live.com, ect) y como no funciona en VS2003 como en VS2005 a lo mejor necesito tener una cuenta premium del hotmail
, pero mi pregunta ahora es que abra alguna manera de enviar correos gratis con el hotmail? si no tendre que hacerlo con otra cuenta de otro correo
P.D. Tambien lo estoy intentando con yahoo, pero aun no he logrado que se envie un correo, el smtp que estoy usando es smtp.mail.yahoo.com y el puerto 587, tiene mi cuenta, mi contraseña y el SSL en true
Con yahoo no funciona, solo que tengas la cuenta premiun que cuesta alrededor 20$ al año…
Como dice arriba la ibreria System.Net.* en vs 2003 no existe, y usarlo en hotmail es dificil, si usas smtp raros puedes dar tu contraseña a una tercera persona, te recomiendo gmail o cualquiera otro gratuito
Muchas gracias por el consejo, no me habia dado cuenta de ese riesgo :S y alli tengo todos mis correos importantes :O pero weno, la razon de pasar todo al 2005 era para probar los ejemplos que encontre en internet donde usaban el smtp del hotmail, pero dado al fracaso de esto, opte por seguir en 2003, con el codigo de autenticacion que se usa alli, claro esta, es casi casi lo mismo solo que aqui las credenciales se escriben de otra manera, y sobre yahoo, me dijeron que en las opciones de mi cuenta habilitara el servicio pop3 (que por defecto esta inhabilitado) y que le pusiera el puerto y el servidor smtp que te lo dan alli mismo y wala! problema resuelto
Espero que algun dia los codos de hotmail hagan lo mismo! tacaños! jeje
Muchas gracias por todo y bye! cuidese!
Atte.
Adriana
Gracias
He encontrado varios codigos similares por la red pero ninguno me funciona, ne he descargado tu codigo fuente y aplicacion la pruebo y no me funciona, mi pregunta es ¿que estoy haciendo mal?
tengo el visual studio 2005, he creado una cuenta en gmail para el De: y Password: y aun asi no me llega ningun correo, siempre me sale que requiere algun tipo de autentificacion, gracias por la posible ayuda
cuanto tendre que esperar? jaja, espero que no sea hasta que me ponga a hacer otra cosa diferente
que cachoso este blog solo quise probar, pero si toy usando safari pero en Windows XP
y opera?
funciona!!!!
//codigo cambiado, el 25 ya no es valido
smtpMail.Port = 587;//o 465
Ahora que es IMP y POP podrian decirme???
Que bien que te funciona, y pues por lo general siempre contesto en las noches por el trabajo y el estudio…
POP = Es el protocolo para recibir emails.
IMP = Es un programa de emails, que esta realizado en php, y te permite acceder a cuentas POP3 o IMAP
http://www.horde.org/imp/
o puede ser el IMP programming language, depende de lo que estes buscando.
http://en.wikipedia.org/wiki/IMP_programming_language
Gracias por visitar el blog
Gracias por el dato!!!
Claro que funciona tu codigo!!!
:0 me alegra, gracias por visitar mi blog
Muchas gracias por el ejemplo
me funciono bien
Ok gracias por visitar mi blog
, cualquier duda ya sabes…
Hey, Whibla, tengo un problema con esta onda, no se si se jodió con la actualización a SP1 del framework 2.0, pero ultmamente envio correos y nunca son recibidos, no da ningun mensaje de error, simplemente NO CAEN.
Probe otra aplicación en mi server, solamente que con el framework 3.5 y si son recibidos.
Asi que ni modo, me tocará formatear y reinstalar, ojala q pueda funcionar bien
Que raro, pero gracias por la solucion. lastima que haya que formatear eso si es aburrido… pero pasa con frecuencia en windows.
Slds, y gracias por visitar mi blog
hola sobre tu codigo me sale error de que no me envia que puedo hacer
Te da algun error de los que se han hablado en los comentarios anteriores?
una pregunta y si quisiera enviar a multiples correos como seria?, y de antemano gracias!!!
Para ser sincero lo único que se me ocurre es lo siguiente:
Leer y asignar en una variable un mail que va a leer a la base de datos, esto esta dentro de un bucle. Asi podras enviar múltiples mails. Comprendes la idea?
Gracias Benjamin, ya te entendi, y aparte encontre otra manera haciendo uso de split
No pense en esa… esa es mejor
Hola, un favor necesito crear cuentas de correo desde una aplicacion en Visual Studio me podrias ayudar con ese detalle, probe tu aplicación y funciono a mil maravillas con la cuenta de gmail.
Gracias de antemano
lamentablemente no se como hacer lo que quieres, seria de leer los servicios que google da a los desarrolladores para saber si se puede o no crear cuentas en gmail.
Slds y gracias por visitar mi blog
Hola!
He seguido tus instrucciones, y al enviarlo me da un error; concretamente:
“No es posible conectar con el servidor remoto”.
A que puede ser debido?? Muchas gracias!!
Gracias!! Muy buen ejemplo!
En 4 minutos ya estoy enviando emails..
De nada eelipsee, en cuanto a tu problema Adrian deberias revisar bien los host que has puesto ya que no te estas conectando, revisa los puertos.
Gracias por visitar mi blog.
Gracias, muchas gracias por este codigo, me fue de gran utiilidad
Me he pasado por tu blog y lo encuentro bastante bueno, muchas felicidades y sigue asi
Tengo una pregunta sobre la libreria net.mail: ¿Se puede revizar los correos de una cuenta de gmail? Estuve hechandole un ojo, pero no se me ocurre como.
Gracias de antemano.
Si se puede, lamentablemente en estos momentos no recuerdo el codigo. Prueba con el que esta en la siguiente pagina:
lee lo siguiente:
http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/28b5a576-0da2-42c9-8de3-f2bd1f30ded4
ademas, si no me creo es mas dificil enviar el email que leerlo, con el codigo de este post deberias poder acceder tambien a los mails, revisa las propiedades.
(es posible que hayan cambiado el puerto o algo asi)
Excelente, me funcionó a la perfección, mil gracias!
While we are discussing about topics relevant to Enviar un Email Usando SMTP desde C# | Probando Código, Your next step will be to create a database to allow you to store your subscriber’s data, process subscription requests and email your subscribers. Really good applications will process the information from your form, process your subscription requests, store your subscribers info in the database and allow you to send individualized email messages.
HOlis q tal, disculpa esque he estado inevstigando y quisisera saber si se puede enviar correos con una cuenta exchange gracias pro la respuesta
y como podria hacer para que cuando no llegue algun campo le mande un mensaje diciendo “por favor llene los campos”?.. muchas gracias
Bueno, eso lo tendrias que hacer desde codigo c#, ahorita no me acuerdo pero seria algo como:
if(campo.equals(“”){
label.text=”Debe llenar el campo CC”;
}
El problema es que tengo un tiempo de no programar en C#, pero es relativamente facil. y como es una applicacion windows, puedes mostrarles un messagebox.
Men eres un genio!!!!!!
Hola, e leido todos sus comentarios y problemas pero a lo que envio todavia me sale Error al enviar correo.
Yo trabajo con C#2008 framework 3.5,y e greado cuentas en todas y nada que podria ser Helpmeeeeee
buenos dias tengo un problema he usado este codigo y me ha funcionado de maravilla muchas grcias pero cuando monto la pagina al servido ya no me funciona, parece que envia el correo pero se queda ahi. La pregunta es si depronto tengo que onfirgurar algo en el hosting y que podria ser muchas gracias
Comando no implementado. La respuesta del servidor fue: 5.5.1 Unrecognized command. dx7sm89584615qab.3
ayudaaa…me sale este error al enviar el correo… a que se debería??”