martes, 18 de octubre de 2011

26. Solución - Envío de correo a una lista de mails.

Hola amigos! Espero que hayas podido realizar la aplicación sin ningún problema. O gran parte de la aplicación. Bien como dije en el post anterior y de forma muy resumida explico en qué consiste el script. 


1) Lo primero es crear una base de datos a la que he llamado subscripción, con una tabla que la he llamado subscriptores. Esta tabla contiene dos campos: id y email.




































2) La primera página corresponde al archivo subscriptore.php:




































En este archivo lo primero es indicar la dirección email y seleccionar Subscribir y nos aparecerá la siguiente página:




































A la misma vez que el mail se inserta en la base de datos. Si volvemos a indicar el mail y volvemos a seleccionar Subscribir nos aparece la siguiente advertencia:




































Porque la aplicación hace como unja especie de rastreo en la base de datos y se cerciora que el email ya está en la base de datos. 
Otra cosa que hace la aplicación es borrar el mail de la base de datos, si en vez de seleccionar Subscribir seleccionamos borrar:




































Borra nuestro mail de la base de datos. Bueno pues todo este script viene incluido dentro del archivo subscriptres.php que es el siguiente:

<?php
//configurar un par de funciones
function doDB() {
   global $conn;
   //conectar al servidor y seleccionar la base de datos; puedes necesitarlo
   $conn = mysql_connect("localhost", "amizba", "wedk4o") or die(mysql_error());
   mysql_select_db("subscripcion",$conn)  or die(mysql_error());
}

function emailChecker($email) {
   global $conn, $check_result;
   //comprobar que el email no esté ya en la lista
   $check = "select id from subscriptores where email = '$email'";
   $check_result = mysql_query($check,$conn) or die(mysql_error());
}

//Determinar si necesita ver el formulario o no
if ($_POST[op] != "ds") {
   //lo necesitan, así que creamos el bloque formulario
   $display_block = "
   <form method=POST action=\"$_SERVER[PHP_SELF]\">

   <p><strong>Dirección E-Mail:</strong><br>
   <input type=text name=\"email\" size=40 maxlength=150>

   <p><strong>Acción:</strong><br>
   <input type=radio name=\"action\" value=\"sub\" checked> Subscribirse
   <input type=radio name=\"action\" value=\"unsub\"> Borrarse

   <input type=\"hidden\" name=\"op\" value=\"ds\">

   <p><input type=submit name=\"Enviar\" value=\"Enviar Formulario\"></p>
   </form>";

} else if (($_POST[op] == "ds") && ($_POST[action] == "sub")) {
    //intento de subscribir; validar dirección email
   if ($_POST[email] == "") {
       header("Location: subscriptores.php");
       exit;
   }

   //conectar a la base de datos
   doDB();

   //comprobar si el email está en la lista
   emailChecker($_POST[email]);

   //tener número resultados y hacer acción
   if (mysql_num_rows($check_result) < 1) {
        //añadir record
        $sql = "insert into subscriptores values('', '$_POST[email]')";
        $result = mysql_query($sql,$conn) or die(mysql_error());
        $display_block = "<P>Gracias por subscribirte</P>";
   } else {
       //imprimir mensaje de error
       $display_block = "<P>Ya estás subscrito en nuestra base de datos</P>";
   }
} else if (($_POST[op] == "ds") && ($_POST[action] == "unsub")) {
   //intentando borrarse; validar dirección email
   if ($_POST[email] == "") {
       header("Location: subscriptores.php");
       exit;
   }

   //conectar a la base de datos
   doDB();

   //comprobar que email está en la lista
   emailChecker($_POST[email]);

   //tener el número de resultados y hacer acción
   if (mysql_num_rows($check_result) < 1) {
       //imprimir mensaje de error
       $display_block = "<P>No hemos podido encontrar su dirección</P>
       <P>No se llevo a cabo ninguna acción.</P>";
   } else {
       //Borrar la dirección
       $id = mysql_result($check_result, 0, "id");
       $sql = "delete from subscriptores where id = '$id'";
       $result = mysql_query($sql,$conn) or die(mysql_error());
       $display_block = "<P>Has sido borrado de nuestra lista de usuarios subscriptores</p>";
   }
}
?>
<HTML>
<HEAD>
<TITLE>Subscripci&oacute;n de usuarios</TITLE>
</HEAD>
<BODY>
<h3>Subscribete y recibe semanalmente todas nuestras novedades</h3>
<?php echo "$display_block"; ?>
</BODY>
</HTML>

3) La tercera parte es una página en el que le indicamos el asunto y un comentario y lo enviamos a los mails que tenemos insertados en la base de datos:













Esta página es llamada enviarmail.php cuyo código es el siguiente:
<?php
if ($_POST[op] != "send") {
   //No se ve el formulario, así que lo mostramos
   print "
   <HTML>
   <HEAD>
   <TITLE>Enviar un Boletín</TITLE>
   </HEAD>
   <BODY>
   <h1>Envío de Boletines Informativos</h1>
   <form method=\"post\" action=\"$_SERVER[PHP_SELF]\">
   <P><strong>Asunto:</strong><br>
   <input type=\"text\" name=\"subject\" size=30></p>
   <P><strong>Cuerpo del Mail:</strong><br>
   <textarea name=\"message\" cols=50 rows=10 wrap=virtual></textarea>
   <input type=\"hidden\" name=\"op\" value=\"send\">
   <p><input type=\"submit\" name=\"submit\" value=\"Enviar\"></p>
   </FORM>
   </BODY>
   </HTML>";

} else if ($_POST[op] == "send") {
    //quiere enviar el formulario, así que comprobar los campos requeridos
    if (($_POST[subject] =="") || ($_POST[message] == "")) {
       header("Location: enviarmail.php");
       exit;
   }

   //conectar a la base de datos
   $conn = mysql_connect("localhost", "amizba", " wedk4o ") or die(mysql_error());
   mysql_select_db("subscripcion",$conn)  or die(mysql_error());

   //conseguir emails de la lista de subscriptores
   $sql = "select email from subscriptores";
   $result = mysql_query($sql,$conn) or die(mysql_error());

   //Crear una cabecera mail: From
   $headers = "From: Boletin Semanal Informativos  <amizba@gmail.com>\n";

   //loop a través resultados y enviar mail
   while ($row = mysql_fetch_array($result)) {
       set_time_limit(0);
       $email = $row['email'];
       mail("$email", stripslashes($_POST[subject]), stripslashes($_POST[message]), $headers);
       print "Boletín enviado a: $email<br>";
   }
}
?>
Fácil, ¿no? Esta práctica está dividida en tres partes, la primera la creación de la base de datos; la segunda la creación del script subscriptores.php, y la tercera enviarmail.php.

En el próximo post será la realización de un proyecto muy interesante, pero eso ya será el próximo día, de momento esto es todo. Hasta pronto!