Índice de la sección dedicada a .NET (en el Guille) ASP.NET

Enviar correo desde una página ASP

 

Publicado el 13/Ago/2004
Actualizado el 21/Oct/2006
Autor: Guillermo 'guille' Som

En este artículo te explicaré, de la forma más sencilla cómo poder enviar correo desde una página ASP y en otra ocasión también te diré cómo hacerlo desde una página ASPX (ASP.NET).

 

 Enviar correo desde una página ASP

Empecemos por la de ASP que es la que la mayoría puede que esté usando actualmente, aunque debido a su mayor flexibilidad, es preferible hacer el cambio a la versión de ASP.NET, que veremos a continuación.

En la mayoría de los casos, para enviar un mensaje desde una página ASP usaremos el objeto CDONTS.NewMail, pero como también hay servidores que utilizan otro "motor" de correo, veremos las diferencias sintácticas con ese otro objeto, me estoy refiriendo a JMail.Message que en mi caso particular es el que tienen instalado la gente de BusiNet que es donde tengo la Web Mundo Programación.

 

Una página de envío sencilla (la forma preferida para no complicarnos)

Para no complicar la cosa, vamos a hacer que los ejemplos sean sencillos, para ello vamos a usar dos páginas, una del tipo HTM en la que tendremos el formulario y una segunda del tipo ASP que será la que realmente envíe el mensaje y nos indique que dicho mensaje ya ha sido enviado. Aunque también podríamos usar una sola página y hacer las comprobaciones pertinentes, pero creo que es más sencillo y fácil de entender si usamos dos páginas.

La primera página, tendrá el formulario típico con las casillas de quién envía el mensaje, a quién va dirigido (aunque este campo, en la mayoría de los casos será nuestra cuenta de correo), el asunto y el contenido del mensaje.

Dicho formulario tendría el siguiente aspecto:

De:
Para:
Asunto:
Mensaje:

Y el código usado para ello sería el siguiente:

<form method=post action=sendMailASP.asp>
De: <input type=text name=sender><br>
Para: <input type=text name=receiver><br>
Asunto: <input type=text name=subject><br>
Mensaje: <textarea name=body></textarea><br><br>
<input type=submit value="Enviar mensaje">
</form>

En esta página HTM (que también puede ser ASP, pero no es estrictamente necesario) podemos poner títulos, textos explicativos, imágenes, es decir como una página Web normal y corriente.
Lo importante aquí son dos cosas:
1- Que en el elemento action tenemos que indicar cual es la página ASP a la que se va dirigir el navegador cuando pulsemos en el botón.
2- Que el botón sea del tipo submit para que el navegador sepa que debe usarse para enviar algo.

Aunque, como veremos ahora, estos dos puntos no son estrictamente necesarios seguirlos al pie de la letra, pero es la forma más fácil y sencilla de hacer un formulario que envíe los datos.

 

La página ASP que enviará el mensaje

Ahora veamos el código de la página ASP que será la que se encargue de enviar el mensaje.

En el ejemplo que estoy usando, esa página se llamará sendMailASP.asp y deberá estar en el mismo directorio de la págian HTM, en caso de que esté localizada en otro directorio tendríamos que cambiar el contenido de action para que indique la posición exacta de dicha páginas ASP.

El código más simple (usando CDONTS) sería el siguiente:
(dejo los comentarios que tenía originalmente, ya que este código me lo mandaron hace años y tenía esos comentarios y he preferido dejarlos)

 

<html>
<head >
<title>Página ASP de prueba para enviar mensajes</title> 
</head>
<body>

<%
set mail=server.CreateObject("CDONTS.NewMail")
mail.From= Request("sender") ' like my.email.addr@comsoltech.com
mail.To = Request("receiver") ' like john.doe@comsoltech.com
mail.Subject = Request("subject")
mail.Body = Request("body")
mail.BodyFormat = 0 ' 0 = HTML, 1 = Plain
mail.MailFormat = 1 ' 0 = MIME, 1 = Text
mail.Importance = 1 ' 0 =High, 1 = Medium, 2 = Low
mail.Send
set mail=nothing 
%>

<p>
<b>Se ha enviado el mensaje:</b><br>
De: <%= Request("sender") %><br>
A: <%= Request("receiver") %><br>
Con el asunto: <%= Request("subject") %>
</p>
</body>
</html>

 

En este caso estaríamos usando el objeto CDONTS.Newmail y por tanto asignamos a una variable un nuevo objeto de este tipo mediante el típico Set de Visual Basic, ya que todo ese código se ejecutará en el lado del servidor.
Para indicar qué código se ejecutará en el servidor, dicho código lo tendremos que poner entre los signos <% y %>.

Y como podemos comprobar las propiedades que debemos usar son:
From para indicar el que envía el mensaje.
To para indicar a quién va dirigido el mensaje.
Subject el asunto del mensaje.
Body el contenido del mensaje.
BodyFormat es el tipo o formato del cuerpo del mensaje, un cero indicará que es en formato HTML y un uno que es texto normal, sin formato.
MailFormat el tipo del formato del mensaje, cero indica que es MIME y un uno que es texto.
Importance será la prioridad del mensaje, un cero para alta, un uno para media un dos para baja.
Send esto será lo que haga que el mensaje realmente se envíe.

Una vez que hemos enviado el mensaje, asignamos un valor Nothing (nulo) al objeto creado mediante server.CreateObject, con idea de liberar recursos del servidor y finalmente cerramos el código a ejecutar en el lado del servidor, por medio del %>.

Por último, si queremos dar información de que el mensaje se ha enviado y a quién... aunque esos datos ya los sabrá (se supone) el que lo ha mandado... para mostrar esos datos usamos las variables pasadas desde la página HTM que no son ni más ni menos que los nombres de los campos del formulario.
Para acceder a dichos campos usamos Request("nombre_parámetro") que contendrá cada uno de los campos usados y que serán los que utilicemos para el envío del mensaje.
Para mostrar estos datos individualmente (mezclado con código HTML) usamos <%= ... %> en los puntos suspensivos podemos usar o bien una variable declarada en el bloque <% anterior o bien, como en este caso, el contenido de los parámetros recibidos en la página ASP.

 

Para probar todo lo dicho, puedes usar el formulario insertado en esta misma página o bien usar este otro formulario (en que tampoco se hace ningún tipo de validación del correo):

Formulario de prueba de envío de correo

Esta otra página valida las cuentas de correo

 

Por último, para poder usar el objeto JMail en lugar de CDONTS, el procedimiento es el mismo, lo único que cambia es la forma de usar dicho objeto que, en este mismo ejemplo sería de la siguiente forma:

 

<html>
<head >
<title>Página ASP de prueba para enviar mensajes</title> 
</head>
<body>

<%
Set mail = Server.CreateObject("JMail.Message")
mail.From = Request("sender")
mail.Subject = Request("subject")
mail.Body = Request("body")
mail.AddRecipient Request("receiver")
' Para añadir un CC usa esto: (21/Oct/06)
' mail.AddRecipientCC = "correo al que le mandas copia"
' Fíjate que en AddRecipient no se usa el signo igual.
mail.Priority = 3 ' =3 Normal
mail.Send "servidor de correo"
Set mail=Nothing 
%>

<p>
<b>Se ha enviado el mensaje:</b><br>
De: <%= Request("sender") %><br>
A: <%= Request("receiver") %><br>
Con el asunto: <%= Request("subject") %>
</p>
</body>
</html>

 

Como puedes comprobar, lo que cambia con respecto a CDONTS es que el destinatario del correo se indica mediante AddRecipient, por tanto, si queremos enviar el correo a más de una persona, podemos usar varias veces este método para seguir añadiendo cuentas.
La prioridad se indica mediante Priority y por último, al método Send que es el que se usa para enviar el mensaje, hay que indicarle el servidor de correo que vayamos a usar (el que tenga instalado el sitio en el que estamos alojado).

En esta página de BusiNet tienes la explicación de cómo usar JMail: http://www.businet.net/docjmail.htm

De todas formas, estos detalles, de que objeto utilizar te lo indicará el webmaster del sitio en el que tengas tus páginas alojadas y, como te comenté antes, normalmente será el CDONTS.

 

Bueno, espero que esto te haya aclarado un poco cómo enviar correo desde una página ASP.

Nos vemos.
Guillermo

Nota del 31/Ene/2006:
Si quieres ver cómo se envían correos desde ASP.NET, tanto en las versiones 1.x como en la 2.0, sigue estos links, según la versión de ASP.NET que quieras usar:
Enviar correo con ASP.NET v1.x
Enviar correo con ASP.NET 2.0


la Luna del Guille o... el Guille que está en la Luna... tanto monta...