Foros del Web » Programando para Internet » PHP »

ENVIO MASIVO DE EMAIL CON FUNCION mail() dentro de un bucle for

Estas en el tema de ENVIO MASIVO DE EMAIL CON FUNCION mail() dentro de un bucle for en el foro de PHP en Foros del Web. Hola amigos , mi problema es el siguiente: A través de un formulario quiero enviar un correo a cada usuario que tengo en una base ...
  #1 (permalink)  
Antiguo 11/10/2010, 10:16
 
Fecha de Ingreso: octubre-2010
Mensajes: 8
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta ENVIO MASIVO DE EMAIL CON FUNCION mail() dentro de un bucle for

Hola amigos , mi problema es el siguiente:

A través de un formulario quiero enviar un correo a cada usuario que tengo en una base de datos con datos personales para cada uno.

Por lo que tengo que enviar un correo personalizado para cada usuario de mi tabla de mysql. Pues bien , recorro la tabla en un for y envio los correos.

Todo esto lo hace bien pero cuando termino tengo un header() a una pagina php que no realiza. tengo puesto set_Time_limit(0) por si es por el tiempo que tarda el script (alrededor de 15 min ya que son 3000 correos los que envía ). Alguna sugerencia?

Muchas gracias de antemano
  #2 (permalink)  
Antiguo 11/10/2010, 10:19
Usuario no validado
 
Fecha de Ingreso: abril-2010
Ubicación: La habana
Mensajes: 229
Antigüedad: 13 años, 11 meses
Puntos: 4
Respuesta: ENVIO MASIVO DE EMAIL CON FUNCION mail() dentro de un bucle for

Ando en lo mismo y nada.
Salu2
  #3 (permalink)  
Antiguo 11/10/2010, 10:24
 
Fecha de Ingreso: octubre-2010
Mensajes: 8
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: ENVIO MASIVO DE EMAIL CON FUNCION mail() dentro de un bucle for

mi script es el siguiente por si sirve de ayuda:


<?php

set_time_limit(0);

//Realiza la conexion a la base de datos
$conexion=mysql_connect("","","")
or die ("Fallo en la conexion");

mysql_select_db("",$conexion)
or die ("fallo en la base datos");


function enviar_correo(){

$mensaje=$_REQUEST['mensaje'];
$fecha=$_REQUEST['fecha'];

$consulta=mysql_query("select * from tabla");
if (!mysql_error()){

while ($obj=mysql_fetch_object($consulta)){


if (!empty($obj->EMAIL)){

$cuerpo .=$mensaje ."\n\n";

$email="$obj->EMAIL";
//mando el correo...
mail("$email"," asunto ",$cuerpo);
}
}
}
mysql_close();

}

enviar_correo();

$alerta=" -// Email enviado con éxito";
header("Location: pagina.php?alerta=$alerta");
exit();
?>
  #4 (permalink)  
Antiguo 11/10/2010, 10:52
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 1 mes
Puntos: 4
Respuesta: ENVIO MASIVO DE EMAIL CON FUNCION mail() dentro de un bucle for

Quita el exit() ya que esta función finaliza el script y por eso no se hace la redirección.

Como recomendación, no deberías enviar los emails de esa forma, ya que ese proceso consume recursos en el servidor y tu hosting lo puede tomar como spam y podría banearte, lo ideal sería hacerlo por bloques cada cierto tiempo, usando CRON, googlea un poco al respecto.

Saludos.
  #5 (permalink)  
Antiguo 11/10/2010, 11:11
 
Fecha de Ingreso: octubre-2010
Mensajes: 8
Antigüedad: 13 años, 5 meses
Puntos: 0
Te comento, lo he probado sin el exit(), pero la pagina se queda esperando y no hace nada (no redirecciona) . Y otra cosa el servidor es de mi facultad y no tengo problemas con el spam ni con los recursos ( estoy autorizado)

sigo intentandolo y nada , no consigo encontrar el problema.

Si alguien me pudiera ayudar.

Gracias.

Última edición por GatorV; 12/10/2010 a las 18:37
  #6 (permalink)  
Antiguo 12/10/2010, 17:23
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 19 años, 1 mes
Puntos: 4
Respuesta: ENVIO MASIVO DE EMAIL CON FUNCION mail() dentro de un bucle for

Prueba esto:

Código PHP:
<?php
    set_time_limit
(0);
    
    
//Realiza la conexion a la base de datos
    
$conexion mysql_connect("","","")    or die ("Fallo en la conexion");
    
    
mysql_select_db("",$conexion) or die ("fallo en la base datos");
    
$mensaje $_REQUEST['mensaje'];
    
$fecha $_REQUEST['fecha'];
    
$consulta mysql_query("select * from tabla") or die(mysql_error());
    while(
$obj mysql_fetch_array($consulta)) {
        if(!empty(
$obj['EMAIL'])) {
            
$de_nombre "Fulano";
            
$de_correo "[email protected]";
            
$cuerpo $mensaje;
            
$email $obj['EMAIL'];
            
//mando el correo...
            
mail($email,"asunto",$cuerpo"From: ".$de_nombre." <".$de_correo.">");
        }
    }
    
$alerta ""// Email enviado con éxito
    
header("Location: pagina.php?alerta=$alerta");
?>
  #7 (permalink)  
Antiguo 13/10/2010, 00:39
 
Fecha de Ingreso: febrero-2007
Mensajes: 18
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: ENVIO MASIVO DE EMAIL CON FUNCION mail() dentro de un bucle for

Te conviene hacerlo por cron, ajustando una cierta cantidad de envíos por ejecución y programando la ejecución cada X cantidad de tiempo. No sirve de nada que envíes 3000 mails de una porque servidores como Yahoo o Hotmail bloquean a los remitentes que envían más de cierta cantidad de mails por hora (creo que 100).

Armate en una base de datos un puntero que guarde la posición donde está el envío y programá el cron para ejecutar ese php cada X cantidad de tiempo.

También podes hacerlo con javascript dejando el navegador abierto o con etiquetas META REFRESH, que recarguen la página por ejemplo cada 2 minutos y que en cada ejecución mande 10 correos.

saludos
  #8 (permalink)  
Antiguo 13/10/2010, 00:45
 
Fecha de Ingreso: octubre-2010
Mensajes: 8
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: ENVIO MASIVO DE EMAIL CON FUNCION mail() dentro de un bucle for

Chapi muchas gracias por contestar. El tema del servidor está resuelto, los 3000 correos se envian sin problemas y en un tiempo de 15 min aprox. El problema que tras ese tiempo el script se queda pillao y no redirecciona al header que tengo al final.
  #9 (permalink)  
Antiguo 13/10/2010, 00:52
 
Fecha de Ingreso: febrero-2007
Mensajes: 18
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: ENVIO MASIVO DE EMAIL CON FUNCION mail() dentro de un bucle for

Por qué no ponés un print que imprima cada correo que se va enviando? Quizás con eso funcione... porque pasa mucho tiempo sin que el navegador reciba nada....
  #10 (permalink)  
Antiguo 13/10/2010, 00:52
 
Fecha de Ingreso: febrero-2007
Mensajes: 18
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: ENVIO MASIVO DE EMAIL CON FUNCION mail() dentro de un bucle for

De última reemplazás la función header() por un código Javascript.
  #11 (permalink)  
Antiguo 13/10/2010, 00:58
 
Fecha de Ingreso: octubre-2010
Mensajes: 8
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: ENVIO MASIVO DE EMAIL CON FUNCION mail() dentro de un bucle for

Gracias pero nada, se sigue quedando pillao, los emails si que los manda, pero no redirecciona. ACLARACIÓN: los correos se envian desde mi servidor de la universidad a correos de la universidad del mismo servidor , no hay problema de spam.
  #12 (permalink)  
Antiguo 13/10/2010, 02:15
 
Fecha de Ingreso: octubre-2010
Mensajes: 8
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: ENVIO MASIVO DE EMAIL CON FUNCION mail() dentro de un bucle for

chapi tenias razón, el tiempo que está el navegador inactivo es la causa de que se quede en idle. Con un simple print que muestre por la salida me soluciona el problema .

Muchas gracias. A veces las soluciones mas sencillas son las mas eficientes.

Etiquetas: bucle, email, envio, funcion, mail, masivo
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 22:37.