|
|
| |
| |
Netveloper :: ASP.NET :: Articulos :: ASP.NET, Envió de Mails con System.Net.Mail |
|
| |
| |
ASP.NET, Envió de Mails con System.Net.Mail |
|
 |
|
Enviar a un amigo |
| |
|
Fecha: 14/02/2007 0:00:00 |
|
|
| |
|
Autor: Alex Solano |
Ver comentarios |
|
|
| |
|
Visitas: 24947 Comentarios: 13 |
Imprimir |
|
| |
| |
Algo muy común en los desarrollos web es poder enviar mails desde las páginas web que creamos o desde nuestras aplicaciones. Desde ASP.NET 2.0 disponemos de un nuevo sistema de envió de mails algo diferente a las ASP.NET 1.1. En este artículo comentarios las características de System.Net.Mail así como un ejemplo completo para poder enviar correo. |
|
|
| |
|
|
| |
Para poder enviar mails desde ASP.NET hay que utilizar el espacio de nombres System.Net.Mail que proporciona todas los métodos y propiedades necesarias para el envió de correo. A través de un ejemplo práctico de envió podremos ver su funcionamiento. En el ejemplo se utilizaran las propiedades To, From, CC, BCC y Attachment. En el fichero web.config definimos las variables comunes para el envio de correo, como el servidor SMTP que utilizaremos, en nuestro caso local y la ruta en disco donde vamos a dejar los ficheros que adjuntemos al email.
<appSettings> <add key="SMTP_SERVER" value="localhost"/> <add key="PathFiles" value="D:\inetpub\aspdotnet\articulos\EnvioMails\files\"/> </appSettings>
Creamos un formulario con todos los campos necesarios Para, de, copia, copia oculta, fichero, adjunto, titulo y mensaje (imagen 1) y un botón de enviar y agregamos el código c# para enviar el correo.
Recuperamos del web.config los valores para el servidor SMTP y la ruta donde guardaremos los ficheros que subiremos al servidor para después adjuntar al correo.
string smtpServer = System.Configuration.ConfigurationSettings.AppSettings["SMTP_SERVER"]; // Recuperamos el fichero que vamos a enviar por mail string sPathFile = System.Configuration.ConfigurationSettings.AppSettings["PathFiles"];
Creamos dos variables para tratar el fichero subido al servidor
string attch = string.Empty; string sFile = string.Empty;
Si hemos adjuntado un fichero hacemos un upload y lo guardamos en disco.
if (File1.PostedFile.FileName != "") { sFile = File1.PostedFile.FileName; // Extraemos el nombre del fichero, sin la ruta de nuestro disco sFile = System.IO.Path.GetFileName(sFile); File1.PostedFile.SaveAs(sPathFile + "\\" + sFile); attch = sPathFile + "\\" + sFile; } Creamos un objeto de tipo MailMessage que es el que contiene todas las propiedades y métodos para procesar el envio. Y asignamos los datos que vienen del formulario a cada campo.
MailMessage mail = new MailMessage();
Email PARA (FROM) quien va dirigido el mensaje.
mail.From = new MailAddress(txtDe.Text.ToString());
Email DE (TO) quien lo envia
mail.To.Add(txtPara.Text.ToString());
Si hay email que van en copia CC, y si hay emails en copia oculta BCC
if (txtCopia.Text.ToString() != String.Empty) mail.CC.Add(txtCopia.Text.ToString()); if (txtBCC.Text.ToString() != String.Empty) mail.Bcc.Add(txtBCC.Text.ToString());
Titulo del mensaje
mail.Subject = txtTitulo.Text;
Texto del mensaje
mail.Body = txtTexto.Text;
Si el mensaje es con formato HTML o no, True = HTML, False = NO HTML
mail.IsBodyHtml = true;
La prioridad del mensaje, en este caso normal
mail.Priority = MailPriority.Normal;
Si hay un fichero adjunto lo añadimos al mail.
if (attch != string.Empty) { mail.Attachments.Add(new Attachment(attch)); }
Una vez tenemos todos los datos del mail creamos un objeto SMTP para enviar el mail
SmtpClient smtpMail = new SmtpClient(smtpServer);
Enviamos el correo, si hay algun error , éste seraá devuelto en SmtpException.
try { smtpMail.Send(mail); } catch (SmtpException ex) { string msg = ex.Message; }
Como podemos comprobar es bastante sencillo crear correo desde .NET, las propiedades From, CC, BCC y Attachments son colecciones por lo que nos limitamos a una dirección de mail o un adjunto sino que se pueden procesar varios. Si quisiéramos poner mas copias lo haríamos de la siguiente forma:
mail.CC.Add(usuario@dominio.com); mail.CC.Add(usuario2@dominio.com); mail.CC.Add(usuario3@dominio.com);
Nota: Es posible que si probais en local con Windows XP os salga un error a la hora de enviar los mensajes: "Unable to send to all recipients." O "Mailbox unavailable. The server response was: 5.7.1 Unable to relay for usuario@dominio.com"
Esto sucede porque el SMTP del IIS del Windows XP puede tener cerrado el relay de correo, en este caso solo hay que abrilo par hacer las pruebas y despues volver a cerrarlo. Para abrilo hay que ir al IIS, a SMTP y con el boton derecho seleccionamos propiedades y despues el tab Access (imagen 2) hay pulsamos el boton relay y en la ventana que sale seleccionamos el segundo radio button (“All Except the list below”) imagen 3.
|
 Imagen 1
 Imagen 2
 Imagen 2
|
|
| |
|
|
|
| |
Referencias. |
|
| |
:: Código fuente
|
|
| |
Últimos comentarios |
|
| |
marvin Lorenzo - crazylord123@hotmail.com (20/03/2009 8:22:26) hola active la opcion que mencionas pero solo envia los correos con el dominio de la maquina, pero no a alos dodemas como son HOTMAIL y GMAIL, haber si me das la mano con esto
 Gabriel - gabrielbaldeon@gmail.com (11/03/2009 11:48:46) interesante tu tutorial amigo, tengo una pregunta, yo implemente esto en un servidor web, el servidor de correo (sendmail) esta en otra maquina, le configure para que utilice la direccion del servidor de correo pero a la hora de enviar sólo envia a direcciones de correo locales configuradas en el servidor de correo, si quiero enviar a gmail no lo envia y sale el sigueinte error:
El buzón de correo no está disponible. La respuesta del servidor fue: 5.7.1 ... Relaying denied. IP name possibly forged
Que puede ser?
 alex - alex_pbt@hotmail.com (12/05/2008 10:40:42) estoy tratando de enviar un correo ejemplo pero me muestra el siguiente mensaje: ERROR: Failure sending mail. estoy enviandolo con mi cuenta de correo de hotmail.com a una cuenta propia de la empresa

[+] comentarios
|
|
| |
Comentar el artículo. |
|
| |
|
|
|
|