Referencias
::  clikear.com
:: MSDN
:: Soporte Microsoft
:: MVP
:: MSDN España
:: MSDN Artículos Téc.
:: Technet España
:: News de Microsoft
:: MSDN Magazine
:: ASP.NET
 
 
  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.  
 
 
Pon tú nombre, email y tu comentario.

El comentario sera validado por el equipo de netveloper y posteriormente publicado así que no te molestes en dejar spam.  

 
Por favor no pongáis preguntas o dudas aquí, para las dudas tenéis los FOROS, en la sección comentarios solo publicare comentarios al artículo, cualquier duda pregunta la ponéis en los FOROS.

  Nombre:
  
  E-mail:
  
  Comentario:
  

  

 
 


Google

Todos los contenidos de este Web son propiedad de sus respectivos autores, queda prohibida su copia o difusión sin la autorización expresa.

ethek.com | canaljuegos.com | patatastraigo.com | altersem.com |