Foros del Web » Programando para Internet » PHP »

mail

Estas en el tema de mail en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 29/10/2007, 11:25
 
Fecha de Ingreso: septiembre-2007
Mensajes: 83
Antigüedad: 16 años, 7 meses
Puntos: 0
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.
  #2 (permalink)  
Antiguo 29/10/2007, 12:18
Avatar de ftabilo  
Fecha de Ingreso: junio-2007
Ubicación: En el Pc
Mensajes: 139
Antigüedad: 16 años, 10 meses
Puntos: 3
Re: mail

Hola, pues dificilmente si tienes que enviar tantos correos no se te va a saturar el servidor, lo que puedes hacer, es enviarlos por cantidades y en intervalos, por ejemplo se me ocurre que podrias enviar primero los correos a los usuarios cuyo login empieze con "a" o "A", dejar pasar unos momentos y luego continuar con la "b" o "b", podrias ir guardando en un archivo donde se quedo para continuar despues.

Es sólo una idea y seguro que hay mas alternativas.

Saludos
  #3 (permalink)  
Antiguo 29/10/2007, 12:43
 
Fecha de Ingreso: mayo-2005
Mensajes: 74
Antigüedad: 18 años, 11 meses
Puntos: 2
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.
  #4 (permalink)  
Antiguo 29/10/2007, 14:56
 
Fecha de Ingreso: septiembre-2007
Mensajes: 83
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: mail

el envio de email por bloques creo que seria mi mejor opcion podrias explicar como hacer el envio con el limit en mysql
  #5 (permalink)  
Antiguo 29/10/2007, 16:45
 
Fecha de Ingreso: mayo-2005
Mensajes: 74
Antigüedad: 18 años, 11 meses
Puntos: 2
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&iacute;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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:51.