hola tengo una duda estoy haciendo un boletin de noticias y tengo que enviar un mail a todos los usuarios registrados... mi duda seria como enviar correos masivos sin saturar el servidor
un saludo.
| |||
mail hola tengo una duda estoy haciendo un boletin de noticias y tengo que enviar un mail a todos los usuarios registrados... mi duda seria como enviar correos masivos sin saturar el servidor un saludo. |
| |||
Re: mail Otro modo es como dice ftabilo, pero en vez de utilizar el fichero, utilizar un array en el que introduzcas el alfabeto, y al final del script, sperar un tiempo y después llamarle así mismo pasando en la query la letra por la que continuar. Ej: envioNews.php?letraSig=c; por supuesto deberás filtrar por esa letra en la consulta que lanzes a la base de datos: $letra = $_GET['letraSig']; $sql = "Select email From usuriosNew Where email like '$letraSig%'"; //despues hacer el envío con un while, así hasta llegar a la z. Otra alternativa si usas MySql es utilizar la clausula LIMIT para enviar por intervalos...por ejemplo de 50 en 50 para no saturarlo y esperar un teimpo entre los intervalos...hay muchas alternativas. |
| |||
Re: mail of course my baby.... Voy a ponerte un ejemplo de como hacerlo por bloques y recargar la pagina cada cierto tiempo apoyandome en javascript, seguro que hay maneras mejores de hacerlo, pero esta es la que se me ocurre así rápidamente: Te pongo la estructura y las directrices básicas, el trabajo completo ya lo haces tu (es una orientación, no te voy ha hacer toda la tarea) la página tiene que llamarse enviomail.php pues se llamará a si misma. la primera vez hay que ejecutarla así (si queremos enviar desde el principio, y en bloques de 100. enviomail.php?dsd=1&cuantos=100 <?php $dsd = $_GET['dsd']; $bloque = $_GET['cuantos']; $final = false; $sql = "Select email From usuariosNews LIMIT ". $dsd .", ". $bloque ." ORDER BY email;"; //aqui haces la conexión y traes los datos, // //En algun momento tendrás que contolar el finarl de la tabla si registros es menor que bloque + dsd o algo así...y poner $final = true; // //Con un while o un for del tamaño de $bloque, envias el email que tengas que enviar //ahora preparamos el siguente bloque $siguienteBloque = $bloque + $dsd + 1; ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Documento sin título</title> </head> <body> </body> </html> <?php //hay que controlar si se ha llegado al final de los registros entonces if ($final == false){ ?> <script language="javascript" type="text/javascript"> function enviar(){ //creamos la url que url = "enviomail.php?dsd=<?php echo $siguienteBloque; ?>&cuantos=100"; window.location = url; } valor = setTimeout("enviar()",15000); //con esta sentencia javascript, son 15000 milisegundos, osea 15 segundos de intervalo entre bloque y bloque. </script> <?php }else{ //El envio se ha completado correctamente. echo "El envio terminó satisfactoriamente"; //aqui pondríamos el campo enviado a No, para el siguiente envio $sql = "Update usuariosNews Set enviado=false "; //y lanzas la query contra la base de datos } ?> Por último ya solo me queda recomendarte que para controlar hasta que usuario se realizó el envío, por si en algún momento se rompió el envio, poder retomarlo desde donde lo dejaste...para ello, podrías hacer un campo de "enviado" y actualizarlo al final del script, en caso de que "rompa" el envio, podrás ir a la tabla y ver hasta donde se envió, luego solo tendrás que lanzar el script, y en dsd poner el número del usuario ultimo enviado. Espero ser de ayuda Salu2 |