25 noviembre 2007

Formularios con scripts CGI. FormMail

Si lo que desea es un formulario que funcione de forma transparente al usuario, puede usar el método clásico de utilizar los scripts CGI. Con ellos, el usuario de su formulario, no tiene más que rellenarlos, pulsar el botón "Enviar" y nada más. Usted recibirá en su correo los datos que hayan sido completados.
Los scripts CGI son archivos escritos normalmente en lenguaje Perl y de los que gestionan el uso de formularios el más famoso es FormMail. Es un recurso tipo Open Source, desarrollado por Matt Wright, gratuito y de código abierto. Es el más usado universalmente.
Puede descargarlo de las múltiples páginas que lo ofrecen en internet, o bien desde el enlace en la escuela de arte de Talavera, en la sección documentos. Se ofrece como archivo comprimido, con un fichero de texto adicional de instrucciones (en inglés).
También se ha de comprobar con el servidor si éste da soporte para scripts CGI (los gratuitos no suelen). Con los servicios de hospedaje de pago es habitual que sí lo hagan. Si no lo hacen, ya sabe el camino que debe tomar cuando toque renovar el servicio.
Por lo general, si no quiere complicarse la vida configurando el FormMail, diríjase a su proveedor de servicios de hospedaje y hágale la consulta directamente, de cuál es la dirección en donde reside FormMail en su servidor. Le dirán qué debe poner en el campo Acción de su formulario y ya está. Suelen funcionar sin problemas.
Por el contrario, si su servicio de hospedaje no tiene un script tipo FormMail configurado para sus clientes, debe realizar sus operaciones a mano del modo en que se describe a continuación.
A través de su programa de FTP (yo recomiendo fervientemente no usar uno de terceros si edita con Dreamweaver, use directamente el propio DW para comprobar el estado de su sitio y su sincronización con los datos remotos), compruebe si hay una carpeta llamada cgi-bin en su servidor. Si no la tiene, puede crearla usted mismo y aquí es donde hay un punto de discordia entre los diferentes proveedores de servicio: ¿dónde crear la carpeta?
Habitualmente las páginas se publican en una carpeta llamada html_public o httpdocs o algo por el estilo. Pues bien, dependiendo de como traten los contenidos de su web, habitualmente la carpeta cgi-bin está por encima de la mencionada. Ahí es donde debe alojar el script o mirar si ya se la proporciona el proveedor, fuera de la pública. Si no tiene asignada una estructura de carpetas por el proveedor, puede probar a crearla dentro de la que aloja su sitio web completo. Esto afecta a la ruta que debe indicar en su formulario para ser procesado.
Debe modificar el FormMail con un editor de texto tipo Bloc de Notas (Notepad) o WordPad, desaconsejándose que se use un procesador de textos de los que guardan el texto con formato, pues no funcionará. El fichero ha de ser ASCII y el resultado de guardado posterior ha de ser FormMail.pl, aunque puede usarse otro nombre siempre que después lo indique en la acción de su formulario.

Las modificaciones esenciales de FormMail son las siguientes:

@referers = ('midominio.com','ip del servidor');

en su domino, debe poner el propio, por ejemplo 'escueladeartetalavera.com' y después la ip del servidor donde está alojada su web. Esta información puede obtenerla de los detalles del contrato con su proveedor de servicios, o del panel de control que suele asignarse a los clientes y donde se encuentran los datos referentes a su cuenta. Si no lo encuentra, puede dirigirse al proveedor de hospedaje para que se lo proporcione.

@recipients = ('midominio.com','usuario@midominio.com');

Aquí se indica el destinatario del correo que recibe los datos del formulario. Tiene la restricción que debe ser una cuenta de correo asociada a su dominio, no una dirección de correo cualquiera, porque FormMail hace referencia a los servidores de correo asociados con midominio.com. Cuestión distinta es si usted puede y quiere redirigir los mensajes que reciba en esa dirección a otra de su conveniencia, aunque en cuestiones de correo, yo prefiero no mezclar unos asuntos con otros. Razón de más para usar varias cuentas de correo y gestionarlas todas separadas, pero al mismo tiempo, con un programa como Outlook, pero esa es otra cuestión.

Para la web de la escuela de arte sería algo así:

@referers = ('escueladeartetalavera.com','192.43.132.56');
@recipients = ('escueladeartetalavera.com','info@escueladeartetalavera.com');

(la ip es ficticia)

Con estas modificaciones básicas, por el momento basta. No se abrume con el contenido del resto del script.

Una vez modificado, súbalo a su servidor por el método habitual, a la carpeta cgi-bin anterior.
Ahora hay que darle permisos al script, los llamados permisos CHMOD de lectura/escritura. Puede hacerlo directamente con Dreamweaver (¿no es maravilloso?), pulsando con el botón derecho sobre el fichero remoto alojado en el servidor (debe estar conectado) y en el menú contextual "Establecer permisos". Básicamente se permite al autor poder leer/escribir/ejecutar el script y a los usuarios, permitirles ejecutarlo solamente. Las diferentes opciones escogidas producen un valor total del permiso, pero usted puede limitarse a escribir 755 en el valor total.
No olvide comprobar que el valor total es 755 tanto para el script como para la carpeta donde se aloja.

Y, en el formulario, en la Acción, desde el inspector de propiedades de DW se pondría:

http://www.escueladeartetalavera.com/cgi-bin/FormMail.pl
El formulario ha de contener de modo imprescindible un campo oculto de tipo
[INPUT TYPE="hidden" NAME="recipient" VALUE="info@escueladeartetalavera.com"] donde el valor recipient ha de coincidir con la dirección de correo definida en el script.

Puede también probar a usar otros nombres del formmail si tiene problemas con las mayúsculas, siempre que lo indique en la acción del formulario.

El método como en el caso anterior, es POST.

El resultado es que cuando el usuario pulsa el botón enviar, el formulario se remite al archivo FormMail, que se encuentra ubicado en la carpeta cgi-bin. Este procesa la información y manda el resultado a la dirección de correo que se encuentra en el @recipient.

Pueden hacerse más modificaciones en el script, pero para lo que nos proponíamos, esto basta.

Puede consultar también otros tutoriales de internet, como éste, por si se entera mejor.

Pero desde este momento le indicamos que hay más consultas en internet respecto a como se configura y problemas insolubles, que a consejos útiles para que funcione debidamente. Creo que es por causa de que hay varias revisiones de FormMail funcionando y hay que leerse el manual adjunto (en inglés), lo que no siempre es fácil. Mi experiencia me dice que la mayor parte de problemas provienen de detalles absurdos, como el establecimiento de permisos o de la sintaxis empleada en el campo @recipients.
Si no ha sido capaz de hacer que funcionen de ninguna de las dos maneras, no desespere, porque le propongo dos métodos más: lea los artículos de correo.pl y FormMail compat.

Artículos relacionados:

Gestionar formularios
Formulario básico de correo
scripts CGI. correo.pl
FormMail compat

0 comentarios: