martes, 18 de octubre de 2011

25. Trabajar con Mails en PHP

Hola gente, que tal? Este post lo voy a dedicar al envió de mails mediante formularios. Aunque este tema ya lo hemos visto anteriormente en el blog cuando dimos los formularios. Sin embargo, he querido dedicar un post para que veamos las muchas funcionalidades que tiene la función de enviar mails mediante formularios. Uno de los motivos por los que me he animado también a escribir este post ha sido porque he recibido algunos mails en el que me indicaban que al enviar el formulario por mail les daban a algún tipo de error. Algunos de esos errores era porque no tenía configurado el programa de correo Mercury (en otro post ya indicare como configurarlo), otros errores era porque no tenían configurado el archivo php.ini. Así que voy a empezar explicando cómo configurar el archivo php.ini para el envió de mail. Abrimos el archivo php.ini y buscamos la variable SMTP:


















Si utilizamos un servidor en nuestro ordenador tenemos que poner localhost. Y otra variable a modificar es sendmail_from. Aquí pondremos la dirección que queramos que nos envíen los mails.  No obstante, por defecto aparece otra que aunque no la cambiemos no pasa nada, ya que en el código la mayoría de veces le indicamos a que dirección queremos que nos envié el formulario.











La función para enviar mail es:
mail ();
Un ejemplo de esta función será el siguiente:
<?
mail(“amizba@gmail”, “Esto es un ejemplo de la función mail”, “Así es como funciona la función mail”);
?>
Primero aparece la dirección donde se va a enviar el mail. La frase “Esto es un ejemplo de la función mail”, sería el asunto. Y la frase “Así es como funciona la función mail”, sería el cuerpo del mensaje.
Sin embargo, la dirección de mail, el asunto y el cuerpo del mail normalmente no se escribe así, se recurre a las variables. Por lo general no os vais a encontrar un código de esa manera, ¿por qué? Porque es una chapuza. Hay que ser profesional y recurrir como he dicho a las variables. Un código más profesional y que sería exactamente igual que el anterior ejemplo es el siguiente:
<?
$mail=”amizba@gmail.com”;
$asunto=”Esto es un ejemplo de la función mail”;
$cuerpo=”Así es como funciona la función mail”;
$enviarmail=mail($mail, $asunto, $cuerpo);
echo $enviarmail;
?>
Crear vosotros un archivo php con vuestra dirección mail y lo comprobáis vosotros mismos.
Si queremos enviar el formulario a varios mails, también es posible de una manera muy sencilla.
<?
$mail1=”amizba@gmail.com”;
$mail2=”amizba@hotmail.com”;
$mail3=”amizba@yahoo.es”;
$mails=”$mail1, $mail2, $mail3”;
$asunto=”Esto es un ejemplo de la función mail”;
$cuerpo=”Así es como funciona la función mail”;
$enviarmail=mail($mails, $asunto, $cuerpo);
echo $enviarmail;
?>
Si por ejemplo pusiéramos en la función mail esto así:
mail (“amizba@gmail”, “amizba@hotmail.com”, “amizba@yahoo.es”, $asunto, $cuerpo);
Nos daría un error, porque hay que englobar todas las direcciones email en una única variable.
Por cierto el echo $enviarmail; nos devolverá un valor booleano, verdadero o falso, si nos devuelve un 1 es que el mail se ha enviado correctamente, si nos devuelve el valor 0 el mail no se ha enviado correctamente.
Por otra parte, si tenemos una página Web y queremos enviar boletines o novedades sobre el sitio Web a nuestros usuarios registrados podemos tener almacenada en una base de datos una lista de mails. A la hora de enviar un correo a los usuarios nos será más cómodo que todos los mails estén englobados en una variable. Imaginaros que en la base de datos hay más de 100 usuarios registrados, pues esto nos puede ahorrar un montón de trabajo. Como ejemplo he creado una base de datos en la que he insertado una serie de emails:



















Ahora voy a crear un archivo mail.php para que se envié un correo a todos los emails que tengo almacenado en la base de datos.
<?
mysql_connect('localhost', 'amizba', wed123'');
mysql_select_db('mail');
$query = "SELECT email FROM email"; //seleccionamos la tabla
$result= mysql_query($query);
while ($MailArray = mysql_fetch_array($result)) {
$formsent = mail($MailArray[0], "Ejemplo de envio de mails mediante MySql", "Trabajar con mails en PHP-MySql", "From: amizba@gmail.com");
echo $formsent; //Nos devuelve el resultado de mail. Si es 1 se ha enviado correctamente, si es 0 no se ha enviado.
}
?>
Y visto en el navegador nos saldrá así:


















Aparecen 4 valores booleanos que significa true (verdadero), quiere decir que se ha enviado correctamente, se ha enviado cuatro veces, porque son 4 mails los que tenemos almacenados en la base de datos.
No obstante, hay otras formas de trabajar con mails. Una de esas formas es desde un script PHP indicar que el mail vaya formateado en HTML, o indicar que hayan imágenes o incluso la posibilidad de adjuntar archivos, que se enviaran junto con el mail. ¿Cómo podemos hacer esto? Mediante el uso de MIME  (Multi-purpose Internet Mail Extension), que es una extensión del correo electrónico para multipropósito en Internet, estándar que permite la transmisión de correo electrónico de todo tipo de ficheros (gráfica, audio, video). Para utilizar esta extensión hay que descargar primero la clase MIME en la siguiente página: http://www.phpguru.org/static/mime.mail.html
Vemos el archivo ejemplo.php (es propiedad de Jesús Conde)
<?php
/**
* This file is part of the htmlMimeMail5 package (http://www.phpguru.org/)
*
* htmlMimeMail5 is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* htmlMimeMail5 is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with htmlMimeMail5; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
* © Copyright 2005 Richard Heyes
*/

    require_once('../htmlMimeMail5.php'); //el nombre del archivo que vamos a utilizar

    $mail = new htmlMimeMail5();//creamos una nueva instancia de la clase para utilizar las distintas funciones.

    /**
    * Configurar la dirección desde donde se envía
    */
    $mail->setFrom('El blog de Amizba<amizba@gmail.com>');

    /**
    * Configurar el asunto
    */
    $mail->setSubject('email de Prueba');

    /**
    * Configurar alta prioridad
    */
    $mail->setPriority('high');

    /**
    * Configurar el texto del Email
    */
    $mail->setText('Ejemplo de Texto');

    /**
    * Configurar el HTML del email
    */
    $mail->setHTML('<b>Ejemplo HTML</b> <img src="background.gif">');

    /**
    * Añadir una imagen embebida
    */
    $mail->addEmbeddedImage(new fileEmbeddedImage('background.gif'));

    /**
    * Añadir un adjunto
    */
    $mail->addAttachment(new fileAttachment('ejemplo.zip'));

    /**
    * El mail donde se envia
    */
    $mail->send(array('amizba@gmail.com'));
?>
La primera parte de este archivo es un comentario largo y da una descripción de la clase htmlMimeMail. Además hay comentarios explicativos a lo largo del código que os va a ayudar a comprenderlo mejor.
Bueno, pues ya tenemos una cosa más, como enviar email con archivos, imágenes, etc. adjuntos. Os voy a poner una práctica muy sencilla para que la hagáis vosotros SOLOS, con ayuda de este post.
La práctica consiste en lo siguiente, tenemos el archivo subscriptores.php:



















Aquí le indicamos una dirección mail y le damos a la opción suscribirse, al darle al botón Enviar la dirección se nos almacena en la base de datos (que se supone que es lo primero que hemos creado). Y nos aparecerá la siguiente pantalla:


















Si volvemos al archivo y le indicamos la misma dirección nos sale la siguiente pantalla:



















Si le indicamos el mail y en vez de elegir la opción Subscribir, elegimos Borrar, nos aparece lo siguiente:

















Esto es una parte de nuestra aplicación. Ahora hay una segunda parte. Imaginaros que en nuestra base de datos hay almacenados 20 mails y queremos enviarle un boletín informativo a todos esos mails. ¿Cómo lo hacemos? Creamos un archivo php, que en el navegador será visto así:




















Cuando le indiquemos el Asunto y el Cuerpo del Mail y le demos a Enviar será enviado por correo a todos los mails que tengamos almacenados en nuestra base de datos. Es muy fácil. Paciencia y poco a poco. Ya veréis como os sale. En el próximo post veremos la solución. Hasta pronto!

No hay comentarios:

Publicar un comentario