Antonio:
Gracias por las molestias, perfecto el código y se supone que
funcione pero sigue igual, ahora pregunto: ¿debe el server de correo tener
alguna configuración determinada para aceptar este tipo de envíos?
Nota: Le estoy pasando mis credenciales del dominio, no se que pasa :S...
Saludos,
Raynier Rivero Mayo
Informático Oficina Central | Sucursal Matanzas
Ave. Playa e/ 39 y 40, Varadero
Teléfono: 66-8880 | Beeper: 3035
Correo: [EMAIL PROTECTED]
De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Antonino Ferrando
Enviado el: martes, 27 de febrero de 2007 12:28
Para: [email protected]
Asunto: [puntonet] System.Net.Mail
Si Ray, no hay problema, he aquí varias páginas que encontre que pueden serte
útiles:
Avisame cualquier cosa te busco otros.
Saludos
Enviar correo con ASP.NET 2.0
En este artículo te explico como enviar un correo desde una pagina de ASP.NET
(.aspx) usando las clases de System.Net.Mail que son nuevas en la versión 2.0
de .NET Framework.
_____
Publicado el 31/Ene/2006
Actualizado el 23/Dic/2006
Autor: Guillermo 'guille' Som
_____
Enviar correo desde una página ASPX usando ASP.NET v2.0
En este artículo vamos a ver cómo enviar correos desde páginas de ASP.NET
(.aspx), usando las clases del espacio de nombres System.Net.Mail, que son
nuevas para la versión 2.0 de .NET Framework.
De ese espacio de nombres usaremos tres clases: MailMessage que será la clase
con la que crearemos el mensaje, y en la que indicaremos el que envía el
mensaje, quién lo recibe, el asunto, etc. Para indicar el que envía el mensaje,
tendremos que usar un objeto del tipo MailAddress, el cual lo asignaremos a la
propiedad From de la clase MailMessage. Para enviar el mensaje usaremos un
objeto del tipo SmtpClient, que a diferencia de ASP.NET 1.x no tiene métodos
estáticos (compartidos), por tanto tendremos que crear una nueva instancia de
esa clase y asignar los valores apropiados para poder mandar el mensaje, ahora
veremos como hacerlo, además de ver otras cosas que en el equivalente de la
versión 1.x no existen.
Estas clases solamente se pueden usar con la versión 2.0 de .NET Framework, si
te interesa saber cómo enviar correos desde una aplicación creada con la
versión 1.x de ASP.NET, mira este otro artículo: Enviar correo con ASP.NET v1.x
<http://www.elguille.info/NET/ASPNET/enviar_correo_ASPNET_v1.htm>
Y si quieres ver el código para enviar correo desde una páginas ASP (no de
.NET), puedes ver este otro artículo: Enviar correo desde una página ASP
<http://www.elguille.info/NET/ASPNET/enviarcorreoASP.htm> .
Crear el mensaje
Lo primero que debemos hacer es crear el mensaje que vamos a enviar. Como te he
comentado antes, para crear ese mensaje usaremos la clase MailMessage del
espacio de nombres System.Net.Mail, a la que le indicaremos los datos
habituales:
-El que envía el mensaje (propiedad From)
-A quién va dirigido el mensaje (propiedad To)
-El asunto del mensaje (propiedad Subject)
-El cuerpo (o contenido) del mensaje, (propiedad Body)
-Y algunas cosas más como el formato del mensaje y la prioridad.
Aunque como veremos, la forma de hacerlo difiere "un poco" a como se hacía en
las versiones anteriores, al menos en lo que se refiere a los valores de las
propiedades From y To.
En el código que te muestro a continuación, se supone que tenemos un formulario
Web con los controles (de tipo TextBox) para cada una de esas propiedades.
Lo primero es crear el objeto del tipo MailMessage:
Dim correo As New System.Net.Mail.MailMessage
System.Net.Mail.MailMessage correo = new System.Net.Mail.MailMessage();
A continuación asignamos las propiedades usando los valores de las cajas de
texto que tendrá nuestro WebForm (formulario Web). Como comprobarás, para
asignar el valor del correo que envía el mensaje, usamos un objeto del tipo
MailAddress, ya que la propiedad From es de ese tipo y por tanto no acepta una
cadena de texto. En el caso de la cuenta To, es decir, a quién va dirigido el
mensaje, en realidad es una colección de tipo MailAddressCollection, por lo que
podemos deducir que en realidad se pueden asignar varias direcciones de correo,
tantas como necesitemos indicar para mandar el mismo mensaje a todas ellas,
pero no te asustes, como puedes ver a continuación es fácil asignar esas
cuentas de correo.
Veamos el código para Visual Basic y para C#:
correo.From = New System.Net.Mail.MailAddress(txtDe.Text)
correo.To.Add(txtPara.Text)
correo.Subject = txtAsunto.Text
correo.Body = txtTexto.Text
correo.IsBodyHtml = False
correo.Priority = System.Net.Mail.MailPriority.Normal
correo.From = new System.Net.Mail.MailAddress(txtDe.Text);
correo.To.Add(txtPara.Text);
correo.Subject = txtAsunto.Text;
correo.Body = txtTexto.Text;
correo.IsBodyHtml = false;
correo.Priority = System.Net.Mail.MailPriority.Normal;
Como puedes ver, el que envía el mensaje, (propiedad From), hay que indicarlo
asignándole un objeto del tipo MailAddress, en este caso, lo creamos
directamente y ese nuevo objeto es el que asignamos a la propiedad From.
También te comentaba que el o los destinatarios había que asignarlo a la
propiedad To, que es una colección del tipo MailAddressCollection, y como en
cualquier colección, cada nuevo elemento lo añadimos usando el método Add de la
colección, en este caso, los elementos son cadenas con la dirección de correo
de los destinatarios. En nuestro caso, solo hay uno, el que esté indicado en la
caja de textos txtPara.
Una vez que ya tenemos el objeto del mensaje creado, tenemos que enviarlo, para
ello usaremos una instancia de la clase SmtpClient de la que usaremos tres
propiedades: Host a la que le indicaremos el nombre del servidor de correo por
el que queremos enviar el mensaje, este servidor de correo suele toma la forma
de mail.servidor.com o correo.servidor.com, dependiendo de la versión o idioma
en el que esté configurado el host del servidor de correo.
Dim smtp As New System.Net.Mail.SmtpClient
smtp.Host = "servidor de correo"
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
smtp.Host = "servidor de correo";
Si el servidor de correo necesita autenticación, podemos hacerlo mediante un
objeto del tipo NetworkCredential, en el que indicaremos el nombre del usuario
y la clave, ese objeto lo asignaremos a la propiedad Credentials del objeto
SmtpClient que acabamos de crear.
smtp.Credentials = New System.Net.NetworkCredential("usuario", "password")
smtp.Credentials = new System.Net.NetworkCredential("usuario", "password");
Por último, nos queda la parte más importante: enviar el mensaje. Para ello
usaremos el método Send del objeto creado a partir de la clase SmtpClient, al
que le pasaremos el objeto de tipo MailMessage que hemos creado al principio.
El uso de este método lo ponemos dentro de un Try/Catch ya que puede producirse
un error al enviar ese mensaje, por ejemplo, si el servidor de correo requiere
autenticación o que no se ha podido enviar el mensaje por la causa que sea.
El mensaje de error o acierto lo mostraremos en una etiqueta llamada LabelError.
Try
smtp.Send(correo)
LabelError.Text = "Mensaje enviado satisfactoriamente"
Catch ex As Exception
LabelError.Text = "ERROR: " & ex.Message
End Try
try
{
smtp.Send(correo);
LabelError.Text = "Mensaje enviado satisfactoriamente";
}
catch(Exception ex)
{
LabelError.Text = "ERROR: " + ex.Message;
}
Y esto es todo...
Nos vemos.
Guillermo
P.S.
23/Dic/2006:
---------------------------------------------------------------------------------------------------------------------------------------
Enviar mails usando un servidor SMTP que requiere autenticación desde .NET
Framework 1.1
Si estamos usando .NET Framework 1.0 estaremos en desgracia porque no hay forma
directa de hacerlo usando simplemente el Framework.
Si estamos usando .NET Framework 2.0 debemos pasar de lo siguiente que os voy a
contar y usar el nuevo namespace System.Net.Mail.
Pero desde el .NET Framework 1.1, usando la propiedad Fields de MailMessage
podemos acceder a los campos de CDO.Message. He aquí cómo:
public void EnviarMail()
{
MailMessage mail = new MailMessage();
mail.To = "[EMAIL PROTECTED]";
mail.From = "[EMAIL PROTECTED]";
mail.Subject = "Hazme casito, soy un mensajito";
mail.Body = "Texto rollo que aburre";
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate",
"1"); // Autenticacib
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername",
"usuario"); // Nombre de usuario
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword",
"password"); // Contrase
SmtpMail.SmtpServer = "mail.plainconcepts.com"; // Aquí va tu servidor de
SMTP real
SmtpMail.Send(mail);
}
AVISO LEGAL
La información contenida en este mensaje, y en cualquier archivo asociado al
mismo, es confidencial y está destinada exclusivamente a su destinatario. Si
usted no lo es, y por error lo ha recibido, por favor reenvíelo a su emisor
indicando tal situación y luego elimínelo.
La distribución, reproducción o copia de lo arriba expresado está prohibida y
corresponden a su autor. No debe interpretarse que pertenezcan o sean
compartidas por Jerárquicos Salud, quien no se responsabiliza por errores u
omisiones producidas, ni garantiza la certeza de lo transmitido por este medio
debido a que puede ser objeto de interpretación, alteración, demora, contener
virus u otras anomalías.