Envío de boletines a emails de una base de datos MySQL
Código en PHP para el envio de boletines a emails almacenados en una base de datos.
22/6/05 - 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.
Seguir navegando a partir aquí:
+ 1 manual relacionado
+ 1 categoria relacionada
+ 4 comentarios (Añadir)
+ 19 comentarios no revisados
| Autoría, licencia y acciones sobre este artículo |
|
|
Manuales relacionados con este artículo
Categorias relacionadas
A través de las categorías de nuestro directorio se pueden encontrar otro tipo de recursos relacionados con este artículo:
+ Entrar en
Scripts en PHP
Comentarios de los visitantes
|
Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar.
|
| Se muestran 4 comentarios revisados |
Comentario de pepe
29/6/05
La verdad que muy buen articulo, y es verdad habria que ver como no tomarlo como spam. Yo no se tanto como tu pero se me ocurre una idea...
Si en vez de enviar un mail con copia a todos los destinatarios, hacemos un bucle para que ejecute la funcion mail por cada destinatario ?
Me parece que sirve, pero la pregunta es...
¿El servidor se cargaria mucho mas enviando cientos de mails para 1 solo destinatario, que enviando 1 solo mail con copia para cientos destinatarios?
Yo creo que si pero realmente no se la respuesta.
Saludos!
Comentario de Gabriel Cambronero
01/7/05
Bueno, en realidad en relación con el último comentario les digo que justamente eso fue lo que se puso al final del artículo, al no especificarse el PARA, muchas empresas de E-MAIL, tienen filtros que pueden clasificar el correo como SPAM es por eso que no les va a llegar a la totalidad de los destinatarios, no es tanto porque exista limitante porque el bucle individual simplemente es eso.. es enviar N veces el mismo email pero a diferente destinatario.
Se me ocurre aplicar la idea del compañero que posteo de primero, lo que pasa es que si son 5000... primero estarías consumiendo recursos de tu server, incluyendo el tráfico disponible.
El artículo esta excelente, pero para tales efectos quizás sea mejor utilizar un programa foráneo Advanced Mass Sender.
Comentario de leo
02/7/05
una alternativa al problema del campo "PARA" es completarlo con una direccion de email propia y que exista.
Por ejemplo si el sitio es www.xxx.com nos creamos una casilla q sea novedades@xxx.com y enviamos el mensaje a esa direccion con todos los demas destinatarios en forma de copia oculta (BCC)
Yo lo probe con hotmail y gmail y funciona ok, no los toma como spam. inclusive no lo filtra el anti-spam del panda.
Para hacer algo mas personalizado, se podria (como bien dice otro usuario anteriormente) hacer un bucle... pero seria bueno ya que nos tomamos ese trabajo ampliar la tabla de usuarios con nombre y apellido, entonces al enviarlo utilizariamos el campo "PARA" de la siguiente forma:
$para = 'Jose Lopez <pepe@pepe.com>';
de esa forma el remitente vera su nombre al recibir el correo.
Para ampliar estos temas recomiendo el manual de PHP en formato chm que se puede descargar en español de :
http://www.php.net/download-docs.php
permite buscar funciones desde un indice. Pongan mail() en el buscador y les tirara todos los detalles con ejemplos de aplicacion.
saludos...
Comentario de Raúl Avilés (Autor del artículo)
26/4/06
Agradezco de antemano todos los comentarios que he recibido para intentar mejorar el artículo. Voy a responder a la mayoría de cuestiones preguntadas (si me da tiempo xD):
-Solución al campo 'PARA', para que no se filtre en el anti-spam: tal y como ha dicho uno de los lectores, se puede poner un campo para con el nombre de la lista a la que la gente se ha "suscrito" algo así como
"To: boletin-novedades@mipagina.com"
y en el Bcc la lista real de destinatarios. La direccion boletin-novedades puede existir y recoger copias de los boletines, por ejemplo.
-A la pregunta de si se pueden personalizar lo emails: sí. La manera de hacerlo es definir el mensaje HTML como una variable a trozos. Entonces puedes ir extrayendo de la base de datos lo que quieres que aparezca, y luego se imprime esa variable en el lugar excato que quieras (intercalado en la posición, en el trozo que quieras del manesaje). Luego donde se definen los parámetros del mensaje, en el cuerpo pon la variable que define el mensaje(que está troceada) y ya está.
-¿Se pueden enviar emails en php? No, me temo que no se puede, ya que los gestores de correo no pueden leer PHP.
-¿Qué pasa con las comillas del del cuerpo del mensaje en HTML? Para que no de error, hay que poner una barra invertida: \ antes de cada comilla, véase: \"
-Respecto a lo de tumbar el servidor y enviar uno por uno los mensajes: si se define un sistema mediante el que se envían uno por uno los mensajes, como proponían algunos lectores, lo que se está haciendo es ejecutar la función mail como un bucle a veces interminable, con lo que el tiempo de ejecución de la acción se alarga mucho y suele dar este error "Error en el tiempo de ejecución", que quiere decir que se ha sobrepasado el límite de tiempo de ejecución, además de los problemas de tumbar el servidor, como comentaba otro usuario.
-Por último, tal y como indica otro lector, este sistema sirve para cantidades asequibles de usuarios (depende de cada servidor) pero para cantidades masivas puede resultar engorroso. Un usuario nos sugiere que para tales efectos quizás sea mejor utilizar un programa auxiliar como Advanced Mass Sender.
Espero haberles servido de ayuda.
Un saludo a todos,
Atte. Raúl Avilés
| Comentarios sin revisar |
|
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
|
Se han encontrado 19 comentarios sin revisar
Ir arriba