Enviar un formulario por email con ASP

  • Por
  • 24 de enero de 2003
  • Valoración:
  • 23 Comentarios
  • Scripts en ASP
Creación de un script con un formulario que se envía por correo electrónico desde el servidor utilizando la tecnología ASP.
Si deseamos que, al pulsar el botón de envío de un formulario, se manden los datos por email utilizando el servidor y sin estar supeditados a la configuración del cliente para saber si ciertamente ese mensaje se pudo enviar, debemos utilizar alguna tecnología de programación de páginas del lado del servidor. En este artículo vamos a presentar un ejemplo sobre cómo hacer esta tarea con ASP.

ASP (Active Server Pages) es la tecnología de scripting del lado del servidor desarrollada por Microsoft. Con este tipo de programación podemos construir páginas que muestren un formulario y manden un correo electrónico automáticamente con los datos recibidos, una vez enviado.

Podríamos utilizar un esquema de código como el siguiente:

<%
if request.form="" then
'no recibo formulario, entonces lo muestro
%>
<form action="formulario_mail_asp.asp" method="POST">
Nombre: <input type="Text" name="nombre" size="12" maxlength="200">
<br>
Email: <input type="Text" name="email" size="12" maxlength="200">
<br>
<input type="submit" value="Enviar">
</form> <%
else
'si que recibo un formulario, entonces lo trato
'recojo los datos
nombre = request.form("nombre")
email = request.form("email")
'compongo el cuerpo del mensaje
cuerpo = "Formulario recibido" & VBNEWLINE & VBNEWLINE
cuerpo = cuerpo & "Nombre: " & nombre & VBNEWLINE
cuerpo = cuerpo & "Email: " & email
'mando el correo...
'..................
response.write "Gracias por rellenar el formulario. Se ha enviado correctamente." end if %>


En el anterior script utilizamos if (request.form="") para saber si estamos recibiendo o no información de un formulario.

Si no hemos recibido nada (porque en request.form tenemos una cadena vacía) este if saldría por su caso verdadero, en el que tendremos que presentar el formulario en la página.

El caso else, cuando sí que recibíamos un formulario, recogemos sus datos y creamos el cuerpo del mail que enviaremos a la dirección del administrador.

El resto del código, utilizado para definir las propiedades del email y enviarlo, todavía no lo hemos indicado. Antes una aclaración.

ASP no tiene entre las funciones del lenguaje una que sirva para enviar correos electrónicos. Sin embargo, podemos utilizar un componente ActiveX del servidor para realizar esas acciones.

El componente CDONTS (presente en muchas de las instalaciones de IIS) serviría para realizar el envío del mail, pero también existen en el mercado otros componentes de servidor comerciales para realizar esas acciones con mayores funcionalidades. Uno de ellos es AspEmail, que es el que vamos a utilizar en este script, pero no es el único. Hablamos de las distintas opciones en el artículo Enviar mails desde ASP.

Nota: Insistimos en que el siguiente código, que hace la acción de enviar un email, no funcionará si no tenemos el componente ASP AspEmail instalado correctamente en nuestro servidor. Además, deberíamos consultar la documentación del componente, para comprobar que en la versión que descarguemos sigue funcionando todo como aparece a continuación.

El código para enviar un mail podría ser algo como esto:

'creo el objeto correo
set mail = server.createObject("Persits.MailSender")
'configuro el mensaje
'señalo el servidor de salida para enviar el correo
mail.host = "mail.tudominio.com"
'indico la dirección de correo del remitente
mail.from = "loquesea@tudominio.com"
'indico la dirección del destinatario del mensaje
mail.addAddress "loquesea@tudominio.com"
'indico el cuerpo del mensaje
mail.body = cuerpo
'lo envio
'aseguro que no se presenten errores en la página si se producen
On Error Resume Next
mail.send
if Err ><0 then
response.write "Error, no se ha podido completar la operación"
else
response.write "Gracias por rellenar el formulario. Se ha enviado correctamente." end if


Nos podemos guiar por los comentarios para hacernos una idea del funcionamiento de este trozo de código. Básicamente se crea el objeto mail, que contendrá el correo que se va a generar, y se definen sus propiedades como el servidor de correo a utilizar, el destinatario o el asunto. Luego se envía y se realiza una sencilla tarea de detección de errores para saber si se pudo realizar la tarea con éxito o no y mostrar un mensaje adecuado para cada caso.

Nota: no se pretenden explicar los pormenores de este Control Activex del servidor, ya que hay una excelente documentación y ejemplos en la página web de la empresa que lo ha desarrollado. En caso de que se desee aprender algo más, por favor, dirigiros a la página www.aspemail.com o la del componente del que dispongáis.que dispongáis.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Comentarios

Mr Web

16/7/2003
No me funcionó el código asi que le hice unas modificaciones y lo comparto con uds...

formu02.asp(pagina donde esta el formulario)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>.:FORMULARIO DE CONTACTO:.Untitled</title>
</head>

<body>
<form action="formu01.asp" method="POST">
Nombre:<input type="Text" name="nombre" size="50" maxlength="200">
<br>
Email:<input type="Text" name="email" size="20" maxlength="200">
<br>
<input type="submit" value="Enviar">
</form>
</body>
</html>

----------------------------------------

formu01.asp (pagina de envio del formulario)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
'creo el objeto correo
set mail = server.createObject("Persits.MailSender")
'configuro el mensaje
'señalo el servidor de salida para enviar el correo
mail.host = "mail.radioextremo.cl"
'indico la dirección de correo del remitente
mail.from = "info@radioextremo.cl"
'indico la dirección del destinatario del mensaje
mail.addAddress "webmaster@radioextremo.cl"

'Obtengo los datos del formulario
nombre = request.form("nombre")
email = request.form("email")
'compongo el cuerpo del mensaje
cuerpo = "Formulario De Nuestra Página Web"& VBNEWLINE & VBNEWLINE
cuerpo = cuerpo & "Nombre: " & nombre & VBNEWLINE
cuerpo = cuerpo & "Email: " & email
'mando el correo...
'indico el cuerpo del mensaje
mail.body = cuerpo
'lo envio
'aseguro que no se presenten errores en la página si se producen
On Error Resume Next
mail.send
if Err ><0 then
response.write "Error, no se ha podido completar la operación"
else
Request.Form("nombre")
'Declaro Saludo de despedida del visitante
saludo = "Gracias por escribirnos:" & nombre & ", el formulario se ha enviado correctamente"
'Muestro saludo
response.write saludo end if
%>
<html>
<head>
<title>.:GRACIAS POR ESCRIBIRNOS:.</title>
</head>
<body>
</body>
</html>


El ejemplo esta en la siguiente dirección:
http://www.radioextremo.cl/formu02.asp

El hecho de que existan páginas como desarrolloweb, hacen que los webmaster se interesen por automatizar procesos para los navegantes....
Saludos a ellos.

Cualquier duda a:
webmaster@radioextremo.cl

Ah, mi web por supuesto:
http://www.radioextremo.cl (Visítenla)

Atte: Mr web

roman berra

21/5/2004
Este articulo es justo lo que necesitaba. Andube buscando esto por dias.
Esta muy bien desarrollado y completo.No me queda mas que felicitarlos y agradecerles por su sapiencia y solidaridad para compartirla.

Fredy de la Cruz Santos

01/4/2005
Hola que tal el codigo que muestran si funciona pero quiera saber, el por que cuando se envia un mail con este codigo en los correos de Hotmail los envia a la Carpeta CORREO NO DESEADO quisiera saber como reparar esto.

Luther

24/8/2005
Creo q Deberian de Generalizar el Artículo y poner para todos los usuarios por que algunos no pueden crear el Objeto y asi no Funciona!

Eleuterio

14/10/2005
Me parece que esta muy bien estructurado y facil de entender ademas los ejemplos sirven de mucha ayuda para su visualización.

Rogger

13/1/2006
Por el problema de Hotmail que se envian los correos a los no deseados... tienes que configurar tu cuenta de hotmail para que no aplique los filtros de corrreo basura...

sergio gabriel

24/1/2006
yo lo he probado FUNCIONA DE 10, lo unico para salvaguardar que el email NO VAYA a correo no deseado en HOTMAIL, utilizo un codigo PHP no ASP, esto me asegura correo limpio. Sergio

Juan Carlos

27/4/2007
El código funciona , gracias.

hugo sanchez

01/5/2007
esta super su ejemplo lo unico q creo falto mencionar para muchos que no estamos muy adentrados aun con asp es que me parece que ¿se tiene que instalar el ASPMAIL no????para crear el objeto o ¿fuinciona asi tal cual esta el codigo?

erik

03/5/2007
no me permite crear el objeto del correo saliente, me pueden ayudar.

saludos

Diego

26/7/2007
Como tengo que hacer para agregar un area de texto para comentarios? El problema es que no se que cambiar en formu01.asp

Gabriel

26/10/2007
me sale el siguiente error

Server object error 'ASP 0177 : 800401f3'

Server.CreateObject Failed

/lared/contacto/formu01.asp, line 4

800401f3
me ayudan

nicolas

01/12/2007
No, la verdad que no entiendo.
No me lo envíe me abre cualquier página cuando quiero envíar.
Por favor, lo necesito urgente a eso.
Si alguien es tan amable y me puede explicar mejor por msn. ni.caceres@hotmail.com.
Gracias

felipe

13/2/2008
ups, yo soy novato y me sale el siguiente error =(

Tipo de error:
Objeto Server, ASP 0177 (0x800401F3)
Cadena clase no válida
/compromisos/formu01.asp, línea 4

JuanPablo

27/3/2008
POR FAVOR ayudaaaaa!... si alguien sabe como explicarme bien còmo hacer para q lo q pongo en el formulario me llegue a mi mail.
No se exactamente como hacer para que salga perfecto... copie los codigos.. los subi a un freehost q tengo, pero no funciona. Lo subi a Galeon.com, capz sea la pagina q no me permite. pero nunca pude hacer un formulario q me funcione.(siempre me falta algo :s)si alguien sabe por favor digame q le mando un mail con mis grandes dudas.. saludos

Sole

20/4/2009
Cómo hago para que cuando llega el mail no llegue "Sin asunto"
Cómo hago para que cuando llega el mail no llegue "Sin asunto" sino con el asunto que yo quiera
Gracias!

Strauss

19/7/2009
Cual es el Servidor de Salida de Hotmail???
Alguien sabe cual es el servidor de salida de Hotmail???

'señalo el servidor de salida para enviar el correo
mail.host = "smtp.live.com" <<<<NO SE SI ESTE BIEN, NO ME FUNCIONA
'indico la dirección de correo del remitente
mail.from = "elquerecibe@live.com.mx"
'indico la dirección del destinatario del mensaje
mail.addAddress "elqueenvia@hotmail.com"

yonaiker

09/8/2009
para ponerme sosio
mi nombre :kevin yonaiker apellidos foseca 15 año 1992 me dedico a jugar mu

GANA DINERO

28/8/2009
GANA DINERO
ENTRA AQUI http://es.beruby.com/promocode/uZnc4L

Pessoasc

13/8/2010
Me sirvió mucho
Gracias por su esfuerzo de comunicar y compartir información funcional a todos los usuarios. Saludos.

Mauricio

30/9/2010
Error
Si me funciona perfecto el codigo, pero mi problema es que, cuando envia el correo me lo duplica.Por sucede esto?

ricardo rodriguez

04/1/2012
hola
hola como has estado

Juan David

19/11/2013
No pasa nada
No me sirvió el codigo lo unico que hace es abrirme una pestaña nueva con todo lo que dice el formu01.asp<br />
<br />
&lt;% &#039;creo el objeto correo set mail = server.createObject(&quot;Persits.MailSender&quot;) &#039;configuro el mensaje &#039;señalo el servidor de salida para enviar el correo mail.host = &quot;mail.bitcycles.co&quot; &#039;indico la dirección de correo del remitente mail.from = &quot;jduitama@bitcycles.co&quot; &#039;indico la dirección del destinatario del mensaje mail.addAddress &quot;jduitama@bitcycles.co&quot; &#039;Obtengo los datos del formulario nombre = request.form(&quot;nombre&quot;) email = request.form(&quot;email&quot;) &#039;compongo el cuerpo del mensaje cuerpo = &quot;Formulario De Nuestra Página Web&quot;&amp; VBNEWLINE &amp; VBNEWLINE cuerpo = cuerpo &amp; &quot;Nombre: &quot; &amp; nombre &amp; VBNEWLINE cuerpo = cuerpo &amp; &quot;Email: &quot; &amp; email &#039;mando el correo... &#039;indico el cuerpo del mensaje mail.body = cuerpo &#039;lo envio &#039;aseguro que no se presenten errores en la página si se producen On Error Resume Next mail.send if Err &gt;&lt;0 then response.write &quot;Error, no se ha podido completar la operación&quot; else Request.Form(&quot;nombre&quot;) &#039;Declaro Saludo de despedida del visitante saludo = &quot;Gracias por escribirnos:&quot; &amp; nombre &amp; &quot;, el formulario se ha enviado correctamente&quot; &#039;Muestro saludo response.write saludo end if %&gt;

Compartir