Como enviar un e-mail con c#

solidus

Bovino maduro
#1
Que onda amigos, pues aqui molestantolos un poco con esto, necesito hacer un programilla para la escuela usando c#, el cual me permita tener un boton para enviar un e-mail

Espero alguno de ustedes me pueda ayudar

Saludos y gracias de antemano
 
#2
Hola amig@ para el envío de correos necesitas un servidor SMTP. Todas las companias que ofrecen servicio de correo tienen un servidor SMTP no obstante no todas lo tienen permitido para usar externamente del modo que tu lo deseas,sin embargo estoy casi seguro que tienes cuenta de Gmail así que podemos usar su servidor SMTP. El código que te muestro lo hice en C# con VS2008 es una aplicación de consola pero prácticamente es lo mismo que si fuera del tipo Windows Form, lo único que necesitas es meter el siguiente código dentro en la parte del código correspondiente al botón 'Enviar':

/*
//Ruta de archivo adjunto (Si lo lleva)
//string PathFile = @"L:\janmxhu\common\Proyecto Proveedores\MetricaGral2009.xlsx";
*/

//Creo el mensaje del mail.
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();

//Agrego los destinatarios, pueden ir varios
msg.To.Add("ParaQuienVaDirigido@El.Correo.com");

//Agrego la direccion del que manda el email, puede ser falsa o verdadera, pero si es falsa puede que el servidor de correo lo detecte como spam, tambien depende de las credenciales que se ponen mas abajo
msg.From = new MailAddress("noreply@test.com", "anonim", System.Text.Encoding.UTF8);

//Pongo el asunto
msg.Subject = "Test de e-mail";

//El tipo de codificacion del Asunto
msg.SubjectEncoding = System.Text.Encoding.UTF8;

//Escribo el mensaje Y su codificacion
msg.Body = "Este correo fue enviado para pruebas";
msg.BodyEncoding = System.Text.Encoding.UTF8;

//Especifico si va ha ser interpertado con HTML
msg.IsBodyHtml = false;

/*
//En caso de que haya archivos adjuntos,Agrego el archivo que puse en la ruta anterior "PathFile", y su tipo.
//Attachment Data = new Attachment(PathFile, MediaTypeNames.Application.Octet);

//Obtengo las propiedades del archivo.
//ContentDisposition disposition = Data.ContentDisposition;
//disposition.CreationDate = System.IO.File.GetCreationTime(PathFile);
//disposition.ModificationDate = System.IO.File.GetLastWriteTime(PathFile);
//disposition.ReadDate = System.IO.File.GetLastAccessTime(PathFile);
//Agrego el archivo al mensaje
//msg.Attachments.Add(Data);
*/

//Creo un objeto de tipo cliente de correo (Por donde se enviara el correo)
SmtpClient client = new SmtpClient();

//Si voy a usar credenciales pongo false, Pero la mayoria de servidores exigen las credenciales para evitar el spam

SmtpClient smtpserver = new SmtpClient("smtp.gmail.com");

//Como voy a utilizar credenciales las pongo
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("TuCuentaDeGmail@gmail.com", "TuContraseniaDeGmail");
//Si fuera gmail seria 587 el puerto, si es un servidor outlook casi siempre el puerto 25,
client.Port = 587;

//identifico el cliente que voy a utilizar
client.Host = "smtp.gmail.com";
//Si fuera a utilizar gmail esto deberia ir en true, esto es un certificado de seguridad
client.EnableSsl = true;

//Se envia correo
client.Send(msg);



Espero que te sirva,cualquier duda por acá ando.

Saludos!
 
#3
Me funciona perfectamente pero necesito enviar desde un servidor de Microsoft Exchange internamente lo hace bien pero cuando intento enviar a una cuenta por ejemplo ami cuenta personal hotmail no me envía lo estoy tratando de hacer desde un ejecutable de antemano gracias.
 

FedePrado

Bovino maduro
#4
a ver si este te funca amigo :)
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(tpara.Text);//Destinatario
msg.From = new MailAddress(tde.Text, "Nombre de Usuario", System.Text.Encoding.UTF8);//Emisor y nombre de usuario
msg.Subject = tasunto.Text;//Asunto del mensaje
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = tmensaje.Text;//Mensaje a ser enviado
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = false;
if (sw==true)
{
String sFile = archivo;//conine la ruta del archivo Adjunto
Attachment oAttch = new Attachment(sFile);
msg.Attachments.Add(oAttch);//adjuntamos el archivo al mensaje
}
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential("(Emisor@hotmail.com)", "Contraseña");
//hotmail
client.Port = 587; // ùerto de envio tanto de Hotmail como para Gmail
client.Host = "smtp.live.com";// Protocolo Simple de Transferencia de Correo de (Hotmail)
//
client.EnableSsl = true;
try
{
client.Send(msg);//Enviamos el mensaje
MessageBox.Show("Mensaje Enviado Correctamente", "Correo C#", MessageBoxButtons.OK, MessageBoxIcon.Information);
sw = false;
}
catch (System.Net.Mail.SmtpException)
{
MessageBox.Show("Error");
}
 
#7
Microsoft Exchange internamente lo....

Me funciona perfectamente pero necesito enviar desde un servidor de Microsoft Exchange internamente lo hace bien pero cuando intento enviar a una cuenta por ejemplo ami cuenta personal hotmail no me envía lo estoy tratando de hacer desde un ejecutable de antemano gracias.

Imagino que estas intentando mandar correos de tu lugar de trabajo(donde tienen el servidor de MS Exchange), aquí el detalle esta en los puertos de salida de correos; la mayoría de las veces las empresas tienen firewall como medida de seguridad de modo que para que pueda ser enviado un correo exteriormente deberas tener habilitado algun puerto en especifico(o saber cual es) dentro del servidor SMTP. Saludos cordiales.
 

claro

Bovino maduro
#8
Buen codigo!!!!
Yo no lo nesecito, pero siempre es bueno tenerlos guardados para cuando me haga falta.
Gracias Bro por el codigo!!!
 
Arriba