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
April 9th, 2008 at 1:56 pm
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
April 21st, 2008 at 10:54 pm
Gracias por el dato.
June 6th, 2008 at 3:18 pm
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
UsandoJune 7th, 2008 at 8:14 am
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
UsandoJune 9th, 2008 at 3:46 pm
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 
UsandoJune 11th, 2008 at 5:05 pm
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
UsandoJune 11th, 2008 at 8:27 pm
que smtp utilizas?
UsandoJune 12th, 2008 at 2:45 pm
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
UsandoJune 12th, 2008 at 5:14 pm
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
UsandoJune 12th, 2008 at 7:47 pm
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
UsandoJune 13th, 2008 at 2:52 pm
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.
UsandoAdriana
August 1st, 2008 at 1:33 pm
Gracias
Usando