Desarrollo Web con PHP Ignacio Andrés González
Una tarea habitual en aplicaciones web es el envío de email. Php dispone de la función mail() de forma implícita, por lo que no precisa istalación de ningún módulo adicional. Lógicamente se necesita un servidor de correo para gestionar el envío. En nuestro caso (XAMPP) ya está instalado Mercury que solo habrá que configurar (se hace más adelante). La sintaxis básica de mail es: bool mail ( string $to, string $subject, string $message) Devuelve true si el correo es aceptado para reparto. Tener en cuenta que si el correo es aceptado para reparto, NO quiere decir que el correo haya alcanzado el destino indicado.
Ejemplo sencillo de envío: <?php // El mensaje $mensaje = "Línea 1\nLínea 2\nLínea 3"; // En caso de que cualquiera de las líneas sea más larga de 70 caracteres, // debe usarse wordwrap() que lo ajusta a longitud máxima de caracteres. $mensaje = wordwrap($mensaje, 70); // Envio del email mail('caffeinated@example.com', 'Mi título', $mensaje);?> Este ejemplo de utilización se encuentra en el código email_sencillo.php
Un código más completo que permite formatear el cuerpo del correo mediante código html o enviar copias a otros destinatarios, es el siguiente: //para el envío en formato HTML $cuerpo = '<html>. </html> ; $headers = "MIME-Version: 1.0\r\n"; $headers.= "Content-type: text/html; charset=iso-8859-1\r\n"; //dirección del remitente $headers.= "From: Pepito Grillo <pepito@eldominio.com>\r\n"; //dirección de respuesta, si queremos que sea distinta que la del remitente $headers.= "Reply-To: mariano@eldominio.com\r\n"; //direcciones que recibián copia $headers.= "Cc: maria@eldominio.com\r\n" $resultado = mail($destinatario,$asunto,$cuerpo,$headers) Se encuentra en el fichero: email_complejo.php
Ejercicio: Crear una funcionalidad nueva sobre el formulario de contacto realizado en la parte I del curso (form_contacto.php) adaptándolo y cambiando los campos para recoger los datos necesarios del registro. email_registro.php Cuando se envíen los datos del formulario por parte de un usuario, les remitiremos al administrador de registros, enviandolos en un email (con cualquier correo personal para probar). (email_registro_solucion.php)
Configuración de Mercury (con gmail): Iniciamos el Mercury/32 desde el panel del xampp y damos al botón Admin. Configuration/Protocol Modules: Desactivamos MercuryB HTTP web server y Mercury IMAP4rev1 server. Para mandar emails a correos externos desactivamos MercuryE SMTP end-to-end delivery client y activamos MercuryC SMTP relaying client. Damos al Ok y reiniciamos el Mercury Configuration/Mercury core module Pestaña General En internet name for this system ponemos el dominio que tenemos «localhost» Desactivar todos los check de abajo menos Send copies of all errors to postmaster Pestaña Local domains Añadimos el internet name en nuestro caso puede ya estar localhost, sino añadirlo En Configuration/MercuryS SMTP Server, configurar SMTP para los emails salientes Pestaña General, en Announce myself as ponemos un nombre p.ej. MISMTP Comprobar que el TCP/IP port es 25 (SMTP). En IP interface to use poner 127.0.0.1. Pestaña Connection control en el botón Add restriction ponemos 127.0.0.1 to 127.0.0.1 (Para limitar el acceso a tu servidor sólo a tu máquina local) Comprobamos que está activos Allow Connection y dejamos todos los check desactivados. Pestaña Connection Control desactivamos Do not Permit SMTP relaying to non-local mail. Damos al OK.
Configuración de Mercury (con gmail): Configuration/MercuryP POP3 Server, para configurar el POP3 del Mercury Pestaña General Comprobamos que el TCP port es 110 y la IP interface to use es 127.0.0.1. Pestaña Connection Control añadimos la misma restricción que en el anterior punto, sólo para nuestra máquina local de la misma forma. Damos al Ok. Configuration/MercuryC SMTP Client para configurar el cliente del SMTP del Mercury. Para mandar emails al exterior necesitamos los datos de un correo exterior. Pondremos los datos de el gmail del SMTP para correos salientes. En Smart host name ponemos smtp.gmail.com. El puerto elegiremos el 465. (Con el 587 no ha funcionado). Luego elegimos normal (SSL encryption ) (STARTTLS no ha funcionado) En Login username (nacho.cursophp.gmail.com) ponemos nuestra cuenta de correo de gmail, y en Password (cursophp) nuestra contraseña del correo gmail. Damos al Ok. Configuration/Manage local users comprobamos que tenemos los usuarios Admin y postmaster con permisos de administrador. Probamos que salen los email en File / SendMail de Mercury/32
Configuración de Mercury (con gmail): Modificamos php.ini en C:/xampp/php: Hacemos una copia de seguridad de php.ini Editamos y buscamos [mail function] para modificar lo siguiente si no lo está: ; For Win32 only. SMTP = localhost smtp_port =25 ; ; For Win32 only. sendmail_from = postmaster@localhost
Para comprobar si funciona el servidor Mercury con php, podemos hacer un sencillo programa: <?php mail("destinatario@dominio.com", "Aunto Comprobación Email", "Si lees el mensaje, terminaste correctamente la configuración");?> email_sencillo.php