En SinDominio tenemos instalado Soupermail, un programa libre que sirve para recoger los datos introducidos en un formulario y enviarlos por correo electrónico a una dirección dada, entre otras cosas. La pagina web de referencia de este programa está en
http://soupermail.sourceforge.net/. Allí se puede encontrar todo tipo de información sobre el programa, incluyendo varios tutoriales (se llaman así y es recomendable leérselos, son sencillos) para la instalación de formularios, que hemos usado para hacer esta "pequeña" ayuda.
En este texto se describen los pasos básicos para instalar los complementos necesarios para que Soupermail recoja los datos de un formulario y te los envíe a tu buzón de correo electrónico. Se incluye además soporte para poder añadir ficheros adjuntos al mensaje de correo electrónico, mensajes de confirmación y fallo del envío para el usuario y maquetación del mensaje que te va a llegar. Existen muchas mas posibilidades, para lo cual te tendrás que leer los manuales existentes en la página web citada. Aquí no se explica como se instala Soupermail en el servidor web.
Suponemos que ya sabes como hacer un formulario en (X)HTML. Si no es así sería mejor que miraras algún texto de ayuda, como los que enlazamos desde la página de ayuda de SinDominio. De todas formas, aquí te va el ejemplo de formulario que vamos a utilizar para explicar y que también te puede valer tal cual:
method="post" enctype="multipart/form-data"><br />
<div><br />
<input type="hidden" name="SoupermailConf"
value="config.txt" /><br />
<label for="remitente">Tu nombre: </label>
<input type="text" name="nombre" id="remitente" size="39" value="Escribe tu nombre" /><br /><br />
<label for="direccion">Tu dirección de correo electrónico: </label>
<input type="text" name="Email" id="direccion" size="40" value="Tu_dirección"
/><br /><br />
<label for="web">Tu página web: </label>
<input type="text" name="web" id="web" size="35" value="URL de tu página web" /><br /><br />
<label for="adjunto">Adjuntar un fichero: </label>
<input type="file" name="fichero" id="adjunto" size="30" /><br /><br />
<label for="asunto">Asunto del mensaje: </label>
<input type="text" name="subject" id="asunto" size="30" value="Asunto del mensaje" /><br /><br />
<label for="mensaje">Mensaje: </label><br /><br />
<textarea name="mensaje" cols="70" rows="10">Tu mensaje</textarea><br /><br />
<input type="submit" value="Enviar" /> <br />
<input type="reset" value="Borrar" /><br />
</div><br />
</form>
En el anexo se puede ver el aspecto de este formulario.
En el formulario puedes introducir tantos campos como quieras, no tienen que ser los que vienen aquí. El formulario empieza con la etiqueta <form action... En ella le indicamos al servidor web a donde tiene que ir para procesar el formulario y la forma en que tiene que hacerlo. En ella hay dos parámetros importantes:
quedaría así:
action="URL_donde_se_encuentra_Soupermail_en_nuestro_servidor"
method="post"
enctype="multipart/form-data">
La siguiente línea del formulario es un campo hidden (campo de formulario oculto, que no se ve en el navegador). Este campo es obligatorio y Soupermail lo utiliza para indicar el nombre y la posición del fichero de configuración donde le decimos a Soupermail qué es lo que tiene que hacer con la información mandada (lo explicaremos mas ampliamente en la sección 3). El nombre del campo (name) tiene que ser el del ejemplo tal cual (name="SoupermailConf"). El valor (value) tiene que se el nombre y la ruta al fichero de configuración. En el ejemplo (value="config.txt") el fichero de configuración está en el mismo directorio que el formulario y se llama config.txt. Como veremos en el siguiente punto, por cada formulario distinto que hagamos deberemos crear un fichero de configuración. Cada formulario tiene un fichero de configuración distinto.
A continuación en el ejemplo vienen 5 campos de tipo <input...> De ellos 4 son de tipo texto (type="text") y sirven para que el usuario escriba en ellos su nombre, dirección de correo electrónico, página web y ponga también el asunto del mensaje que te va a enviar (por ese orden en el ejemplo, pero en tu caso pueden ser lo que te dé la gana). Como nombre (name) del campo puedes poner lo que te parezca en todos los casos menos en el del correo electrónico. En este caso el nombre ha de ser obligatoriamente "Email" (tal cual esta escrito, con la E mayúscula), para que Soupermail entienda que se trata de la dirección del usuario.
El otro campo input es de tipo fichero (type="file") y en el navegador se verá con un botón junto al campo, que sirve para seleccionar un fichero de tu ordenador. Lo utilizaremos para permitir que el usuario adjunte cualquier tipo de fichero al mensaje. El nombre (name) del campo puede ser también cualquiera.
Después viene ya el campo <textarea> donde el usuario pondrá su mensaje. Como se puede ver es suficiente con poner un numero de filas (rows) y columnas (cols) para indicar lo grande que queremos el campo, ponerle un nombre identificativo y listo.
Por último esta el botón de enviar el formulario: <input type="submit"...>, y el de borrar lo escrito: <input type="reset"...> aunque este último no es necesario ponerlo. El valor (value) que les pongamos será lo que salga escrito dentro del botón en el navegador.
Ya hemos dicho antes, que cada formulario distinto debe tener un fichero de configuración concreto. Es decir, no es lo mismo un formulario que sirva para que los/as visitantes pidan información sobre algo, que un formulario que sirva para hacer una votación entre los/as visitantes. Por esto, deberemos decirle a Soupermail qué debe hacer con la información. Las explicaciones sobre qué debe hacer con la información se las daremos en el fichero de configuración.
En el fichero de configuración podemos darle a Soupermail una serie de órdenes. Para cada orden concreta existe un atributo concreto. Por lo tanto, el fichero de configuración estará formado por una o varias líneas siguiendo el siguiente esquema:
atributo: valor
El fichero de configuración es un simple fichero de texto (.log, .txt,... que puedes hacer con cualquier programa que escriba texto plano, como el Nedit, gedit, vi, Emacs o el mismo Block de Notas del Güindous). Cuando hayamos acabado de editarlo, lo grabamos con el nombre que queramos en el directorio que queramos, pero recordando que tiene que coincidir con el nombre y la ruta que hemos dado en el formulario mediante el campo oculto: <input type="hidden" name="SoupermailConf" value="ruta_y_nombre_del_fichero_de_configuración">).
Para ilustrar el uso de los ficheros de configuración utilizaremos un ejemplo adaptado al formulario puesto de ejemplo en el apartado anterior. En este simple ejemplo usaremos tan solo unas pocas de esas órdenes, algunas de las demás órdenes posibles las explicaremos a continuación, por orden alfabético. El fichero de configuración que definimos en el ejemplo anterior (config.txt) podría ser el siguiente:
subject: "$form_subject"<br />
mailtemplate: mailtemplate.txt<br />
mimeon: yes<br />
success: confirm.html<br />
isemail: Email<br />
gotofailure: fallo.html
Como veis, en cada línea del fichero hay una instrucción. El orden en el que van escritos las instrucciones no es relevante. Las explicaremos una a una:
mailto: es la dirección de correo electrónico a la que se te enviará el mensaje con los datos que el usuario haya introducido en el formulario (¡así que pon LA TUYA, eh!).
subject: después de esta instrucción podemos escribir el asunto del mensaje que te llegará, por ejemplo: "Mensaje enviado desde la web" o cualquier cosa parecida. En este ejemplo, como hemos puesto un campo en el formulario donde el usuario puede escribir su propio asunto, aquí determinamos que como asunto del mensaje Soupermail utilice el campo subject del formulario. Esto se hace con la etiqueta "$form_subject", dado que $form_ seguido de cualquier nombre (name) valido del formulario le indica a Soupermail que se utilice lo que el usuario ha escrito en dicho campo del formulario. (Esta instrucción no es obligatoria, si no se pone Soupermail utiliza un asunto definido por defecto.
mailtemplate: Con este campo indicamos a Soupermail que queremos que el mensaje que nos envíe esté maquetado con es aspecto que le decimos en la plantilla indicada (en este caso es un fichero llamado mailtemplate.txt y que está en el mismo directorio que el formulario y el fichero de configuración). No es un campo necesario, pero mejora la lectura del e-mail que te llega. En el punto 4 explicaremos como es este fichero.
mimeon: yes. Esto es necesario ponerlo si queremos que Soupermail adjunte en el e-mail los ficheros que el usuario puede enviarnos a través del campo tipo file del formulario. Si no vas a poner dicho campo, con no poner esta línea en el fichero de configuración arreglado.
success: Con esta instrucción le indicamos a Soupermail que, si el e-mail se ha enviado sin problemas, haga aparecer en el navegador del usuario la página indicada (en el ejemplo es la página confirm.html, que está en el mismo directorio que los demás ficheros). El tipo de fichero de plantilla que se utiliza para ello es irrelevante, puede ser html o txt, ya que Soupermail procesa la plantilla generando una salida estándar al navegador. En el apartado 4
se explicará con detalle como realizarlo. Por supuesto esto también es prescindible, aunque es conveniente para informar al usuario de que todo ha ido bien.
isemail: Email. Con esta órden le indicamos a Soupermail que confirme que lo que ha introducido el usuario en el campo del formulario llamado Email es realmente una dirección de correo electrónico. Lo que hay que poner después de los dos puntos es por tanto el nombre (name) del campo. Existen también otros tipos de comprobaciones que puede realizar Soupermail automáticamente, que las podrás encontrar un poco más adelante. Esto es también prescindible, pero ayuda al usuario si se equivoca.
gotofailure: Con esta instrucción le indicamos a Soupermail que, si ha habido algún error (en el ejemplo si no ha rellenado bien el campo Email chequeado por isemail), haga aparecer en el navegador del usuario la página indicada (en el ejemplo la página fallo.html, que está en el mismo directorio que los demás ficheros). En este caso ha de ser una pagina web (html) dado que Soupermail no procesa ninguna información, tan solo redirecciona a esta página (para que fuera procesado seria necesario utilizar la órden failure).
Éstas son algunas de las instrucciones que podemos añadir en nuestro fichero de configuración (la lista completa de atributos la podéis ver en inglés en http://soupermail.sourceforge.net/manual.html#configuration files). Ahora os incluimos aquí una explicación de las que nos han parecido más interesantes, además de las ya comentadas en el ejemplo:
<strong>blank: errorblank.tpl</strong>
<strong>fileto: out.txt</strong>. Este atributo también aceptaría el path absoluto del fichero.
éxito.
redireccionado/a a la página que hayamos especificado en la línea gotofailure: URL_de_la_página.
el fichero de configuración, de esta forma la línea quedaría así:
<strong>success: exito.tpl</strong>
Éstas son algunas de las líneas que podemos añadir a un fichero de configuración concreto. Por supuesto, ninguna es obligatoria. De tal forma, dependiendo de nuestras necesidades incluiremos unas líneas u otras. Existen otras muchas líneas que podemos incluir en el fichero de configuración, puedes ojear todas en http://soupermail.sourceforge.net/manual.html#configuration files. Los ficheros de configuración también admiten condicionales y expresiones booleanas. Si quieres saber más sobre esto: http://soupermail.sourceforge.net/manual.html#conditional statements.
Aquí tienes otro ejemplo de fichero de configuración, con la explicación de su funcionamiento más abajo (recuerda que los ficheros de configuración son simples ficheros de texto plano):
subject: Solicitud de Información<br />
gotosuccess: http://www.sindominio.net/ok.html<br />
gotofailure: http://www.sindominio.net/fallo.html<br />
mailtemplate: emailtemplate.tpl<br />
bcc: menganito@sindominio.net
En este ejemplo los resultados se mandarían a la dirección fulanito@sindominio.net. El aspecto del e-mail mandado por Soupermail con los resultados lo especificaríamos en el fichero emailtemplate.tpl que se encontraría en el mismo directorio que el fichero de configuración. Soupermail mandaría una copia del e-mail a la dirección menganito@sindominio.net. El asunto del e-mail mandado sería "Solicitud de Información". Por
último, si la información del formulario fuera enviada con éxito, el/la visitante sería redireccionado/a a http://www.sindominio.net/ok.html, y por el contrario, si ocurriera algún fallo en el proceso, sería redireccionado/a a http://www.sindominio.net/fallo.html.
Las plantillas o templates son ficheros de texto a través de los cuales editamos el aspecto que van a tener los mensajes enviados por Soupermail o los ficheros en los que se van a registrar los resultados. Por supuesto, en el fichero de configuración, deberemos especificarle a Soupermail la ruta a seguir para llegar a cada uno de estas plantillas.
Son muchas las líneas que se pueden añadir a cada plantilla, pero la más importante puede ser la etiqueta <output>. Gracias a esta etiqueta podremos hacer que en el cuerpo del mensaje sea escrito el valor de un campo especifico del formulario (para ver más sobre esto:
http://soupermail .sourceforge.net/manual.html#templates).
Para ilustrar este aspecto vamos a seguir con el ejemplo de formulario que pusimos en primer lugar (ver apartado 2), y el fichero de configuración que creamos a continuación (ver apartado 3). En este fichero de configuración pusimos que la plantilla se iba a llamar mailtemplate.txt, y aquí tenéis un ejemplo que puede servir para recoger la información de aquel formulario (se trata de un simple fichero de texto y podéis darle la pinta que os apetezca):
E-mail: <output name="Email"><br />
Web: <output name="web"><br /><br />
Mensaje: <br />
<output name="mensaje">
Como podéis ver se trata de un fichero muy sencillo. En él le decimos a Soupermail que en el cuerpo del mensaje (el resto, cabecera y pie, lo mandará igual) escriba Nombre, E-mail, Web... seguido en cada caso de lo que el visitante/a ha introducido en cada uno de esos campos del formulario. Por lo tanto la etiqueta <output...> indica que se ponga ahí lo introducido en el campo del formulario de nombre (name) lo que aparece entre comillas (escrito exactamente igual que en el formulario). Además, el programa respeta todo aquello que le introduzcamos aparte de las etiquetas, así que se puede probar a meter código html, líneas, etc, etc.
Otra utilidad de las plantillas puede ser la de crear una página con la que informemos al visitante/a de que el e-mail ha sido enviado sin ningún problema. Esto lo pusimos en el ejemplo del fichero de configuración con la orden success (ver apartado 2), porque permite interactuar con los datos que nos ha metido el visitante/a (como, por ejemplo, que aparezca su nombre y dirección en la página). Si no se va a hacer nada de esto es mas sencillo utilizar la orden gotosuccess, porque no necesita ser mas que una simple página web.
Si se utiliza success, Soupermail nos enviará a una plantilla (que puede ser un fichero de tipo html o simple texto) con etiquetas
<output...>, que pueden ser como las siguientes (siguiendo con el ejemplo que llevamos desde el principio):
<output name="nombre" type="html">, <output
name="Email" type="html"><br />
Tu mensaje ha sido enviado sin problemas
Tened en cuenta, una vez más, que los nombres (name) de las etiquetas que pongamos deben de ser exactamente iguales que los definidos en el formulario inicial. Con este ejemplo se consigue que, tras el agradecimiento, aparezca el nombre del usuario, seguido de su e-mail, para acabar con la confirmación de que se ha enviado el e-mail. En cuanto a type="html" que aparece en ambas etiquetas, eso es para evitar que un usuario "malicioso" envíe a través del formulario código javascript que pueda dañar nuestras paginas o realizar acciones que no queremos en ellas o en el servidor
Por razones de seguridad, Soupermail está instalado en Fanelli en modo paranoico. Esto supone que en todos los directorios en los que haya un formulario que pretenda enviar datos a Soupermail, deberá existir un fichero llamado soupermail.allow para que todo funcione correctamente. Por lo tanto, debes crear un fichero llamado
soupermail.allow (todo en minúsculas, tal y como está escrito) y guárdalo en los directorios donde estén los ficheros de configuración, las plantillas, el formulario ... Puedes crear este fichero con cualquier programa de texto simple y puede estar tranquilamente vacío, es decir no hace falta que dentro escribas nada, vale con que se llame así.
Si se te olvida hacerlo (a mi me pasó), al probar el formulario sale un mensaje de error en el navegador que dice tal que así:
The form failed a security check.
Failure Message:
Not explicitly allowed to read files in the given directory
Si nos has seguido hasta aquí, ya solo nos falta decirte que para acabar debes subir el formulario al directorio de tu sitio web donde pensabas ponerlo. Después visita la pagina con un navegador y prueba a ver si te deja mandar el mensaje, los ficheros y lo que sea. Si todo va bien (que seguro que sí, no es nada difícil) ¡ Felicidades!
Si no es así, será mejor que repases todo lo que has hecho, volviendo a leer esta receta. O mejor aún, utilizando los tutoriales de http://soupermail.sourceforge.net/, que son muy sencillos de seguir, aunque estén en ingles. Si lo deseas puedes darnos un toque en
fundamento@sindominio.net o amorrua@sindominio.net, por si podemos ayudarte (no sé yo, eh :-). Ah, por supuesto, si encuentras algún error en todo esto (que no me extrañaría) mándanos un cachete y la solución, que en seguida lo arreglamos.
Pues nada más, un saludo y suerte con tus formularios.