> Manuales > Taller de PHP

Código en PHP para el envio de boletines a emails almacenados en una base de datos.

Ahora está muy de moda el envío de boletines para informar de las novedades en las webs. El único problema es que para hacerlo, la mayoría de webmasters tienen que depender de alguna empresa (o servidor) que les gestione la base de datos y les envíe los emails cuando lo requieran.

En este artículo explicaré paso a paso como crear la tabla (en la base de datos MySQL) necesaria para el almacenamiento de los emails y posteriormente, cómo enviar un boletín a todos ellos, con el aliciente de que no aparezcan todos los destinatarios en el campo "Para:" del mensaje.

Creación de tabla en la base de datos

Mediante su gestor de la base de datos MySQL (seguramente "phpMyAdmin") debe crear una nueva tabla en su base de datos. Aquí le facilitamos el archivo de texto para ello:

CREATE TABLE usuarios (
id bigint(7) NOT NULL auto_increment,
nick varchar(100) NOT NULL,
passowrd varchar(100) NOT NULL,
nombre varchar(255) default NULL,
email varchar(100) default NULL,
KEY id (id)
)

Y quedará así en su phpMyAdmin:


Tras esto usted ya tiene la tabla necesaria para almacenar los datos dentro de una base de datos MySQL. Podría explicar como introducir los datos en esta tabla mediante formularios de registro... pero eso ya lo dejo a gusto del webmaster.

Envío del boletín

Para enviar el boletín solo debe cambiar los datos del siguiente archivo php por los de su base de datos y tendrá listo su archivo. Para enviar el boletín solo tiene que ejecutar este archivo en su servidor (cargarlo: por ejemplo, entrar en http://usuarios.lycos.es/tunombredeusuario/prueba.php):

<?php
  $mi_conexion=mysql_connect('servidor','nombre_de_usuarior','contraseña') or die('No se puedo conectar con la base de datos!');

/*
Servidor: aquí debe poner la dirección de su servidor, en la mayoría de las compañías es 'localhost'
Nombre_de_usuario: debe pone su nombre de usuario en el servidor.
Contraseña: su contraseña.
*/

   mysql_select_db('base_de_datos',$mi_conexion);

/*
Base_de_datos: nombre de su base de datos.
*/

   $query_Tabla = "SELECT email FROM usuarios ORDER BY id ASC";
   $Tabla = mysql_query($query_Tabla, $mi_conexion) or die(mysql_error());

/*
Email: es el nombre del campo que requerimos, si ha seguido nuestras instrucciones creando nuestra misma tabla en la base de datos no debe cambiar esto.
Usuarios: es el nombre de la tabla donde está el campo 'email', si ha seguido nuestras instrucciones creando nuestra misma tabla en base de datos no debe cambiar esto.
*/

   //elaboramos cadena de emails
  $losemails="";
  while ($row_Tabla=mysql_fetch_assoc($Tabla)) {
   $losemails.=($row_Tabla['email'].", ");
   }

  $largo=strlen($losemails);
   if ($largo>2)
{
   //quitamos ultimos ", "
   $losemails=substr($losemails,0,$largo-2);
}
else
{
   echo "No hay destinatarios!";
   die();
};

// se definen los argumentos de mail( ):
$asunto='Prueba de email desde PHP';
$mensaje='<html>
<head>
   <title>Titulo de la Pagina</title>
</head>
<body>
   <p>Esta es una prueba de emails en formato HTML</p>
   Precios de nuestros productos:
   <table>
    <tr>
   <th>PRODUCTO<th>PRECIO<th>PROMOCION</th>
   </tr>
  <tr>
   <td>Refresco Grande</td><td>25,50</td><td>23,00</td>
  </tr>
  <tr>
    <td>Helado Napolitano</td><td>27,50</td><td>25,00</td>
  </tr>
  <tr>
   <td>Patatas</td><td>18,50</td><td>15,00</td>
  </tr>
  </table>
</body>
</html>';

/*
Aquí debe poner su email en formato HTML
*/

$envia='enviante';
$remite='email_remitente';

/*
Enviante: Nombre del enviante
Email_remitente: email que desea mostrar como remitente.
*/

/// Envío del email:

mail(null, $asunto, $mensaje, "MIME-Version: 1.0
Content-type: text/html; charset=iso-8859-1
From: $envia <$remite>
Bcc: $losemails" . "\r\n") or die("Error al Enviar el Email");
echo "Mensaje Enviado con Éxito!"; //

   mysql_free_result($Tabla);
   mysql_close($mi_conexion);
?>
Ya tenemos nuestro sistema de envío de boletines, no tendremos que depender de nadie.

El único problema que presenta este sistema es que al no aparecer nada en el campo "Para:" del email, algunos gestores de email lo colocan como "correo no deseado". Acepto contribuciones de otros lectores para mejorarlo.

Raúl Avilés

Manual