Foros del Web » Programando para Internet » PHP »

Error al enviar muchos correos

Estas en el tema de Error al enviar muchos correos en el foro de PHP en Foros del Web. Hola a todos Estoy haciendo un boletin de noticias y a la hora de enviarlo, utilizo un bucle while conteniendo la funcion mail, para poder ...
  #1 (permalink)  
Antiguo 02/10/2006, 12:58
Avatar de Lolaloleitor  
Fecha de Ingreso: abril-2006
Mensajes: 22
Antigüedad: 18 años
Puntos: 0
Error al enviar muchos correos

Hola a todos

Estoy haciendo un boletin de noticias y a la hora de enviarlo, utilizo un bucle while conteniendo la funcion mail, para poder enviar correos personalizados.Hasta aquí todo bien, pero el problema es cuando mando más de 15 emails. No llegan algunos de ellos y otros si.Hay alguna manera de enviar de manera espaciada los mails ?

Pego el codigo que utilice:


$id_envios=$_POST['id_envios'];

$result5=mysql_query("SELECT id_cliente FROM destinatarios WHERE id_envios=$id_envios",$link);
while( $row=mysql_fetch_array($result5))
{
$id_cliente = $row['id_cliente'];
$result2 = mysql_query ("SELECT nombre , email FROM clientes WHERE id_cliente=$id_cliente",$link);
$email= mysql_result($result2,0,email);

$id_envios=$_POST['id_envios'];
$result=mysql_query("SELECT * FROM envios WHERE id_envios=$id_envios",$link);
while($row=mysql_fetch_array($result))
{ $asunto=$row['asunto'];
$cabecera=$row['cabecera'];
$id_news=$row['id_news'];
$id_firma=$row['id_firma'];
$id_banner=$row['id_banner'];
$id_envios=$row['id_envios'];

}

$remitente='x';
$remite='x';
$responder ='x';

$head ="Date: ".date("l j F Y, G:i")." \r\n";
$head .="MIME-Version: 1.0 \r\n";
$head .="Content-type: text/html ; charset=iso-8859-1 \r\n";
$head .="From: x\r\n";
$head .="Reply-To:< x> \r\n";
$head .="X-Mailer: PHP/".phpversion()."\r\n";

$result2 = mysql_query ("SELECT nombre , email FROM clientes WHERE id_cliente=$id_cliente",$link);
$email= mysql_result($result2,0,email);


$archivo="http//......";

$msj=file_get_contents($archivo);


mail($email , $asunto , $msj , $head);
.....


gracias
  #2 (permalink)  
Antiguo 02/10/2006, 16:00
Avatar de limboings  
Fecha de Ingreso: enero-2005
Mensajes: 794
Antigüedad: 19 años, 3 meses
Puntos: 2
Hola buenas,

Primero de todo,siempre que pongas codigo php,ponlo entre las etiquetas php que tienes arriba a la derecha en la pagina de publicar un nuevo tema.

Esta vez te lo pongo yo,pero ya para la proxima lo sabes:
Código PHP:
$id_envios=$_POST['id_envios'];

$result5=mysql_query("SELECT id_cliente FROM destinatarios WHERE id_envios=$id_envios",$link);
while( 
$row=mysql_fetch_array($result5))
{
$id_cliente $row['id_cliente'];
$result2 mysql_query ("SELECT nombre , email FROM clientes WHERE id_cliente=$id_cliente",$link);
$emailmysql_result($result2,0,email);

$id_envios=$_POST['id_envios'];
$result=mysql_query("SELECT * FROM envios WHERE id_envios=$id_envios",$link);
while(
$row=mysql_fetch_array($result))
$asunto=$row['asunto'];
$cabecera=$row['cabecera'];
$id_news=$row['id_news'];
$id_firma=$row['id_firma'];
$id_banner=$row['id_banner'];
$id_envios=$row['id_envios'];

}

$remitente='x';
$remite='x';
$responder ='x';

$head ="Date: ".date("l j F Y, G:i")." \r\n";
$head .="MIME-Version: 1.0 \r\n";
$head .="Content-type: text/html ; charset=iso-8859-1 \r\n";
$head .="From: x\r\n";
$head .="Reply-To:< x> \r\n";
$head .="X-Mailer: PHP/".phpversion()."\r\n";

$result2 mysql_query ("SELECT nombre , email FROM clientes WHERE id_cliente=$id_cliente",$link);
$emailmysql_result($result2,0,email);


$archivo="http//......";

$msj=file_get_contents($archivo);


mail($email $asunto $msj $head);
..... 
  #3 (permalink)  
Antiguo 02/10/2006, 16:12
Avatar de limboings  
Fecha de Ingreso: enero-2005
Mensajes: 794
Antigüedad: 19 años, 3 meses
Puntos: 2
Buenas de nuevo,

Creo que puede ser que faltan las comillas simples en las expresiones de los where,por lo que estoy viendo estos ultimos dias es una avalancha de estos errores,bueno,pruebalo y dices que tal.

Un Saludo y espero haverte ayudado en algo.

P.D: Si me equiboco que me rectifiquen porfavor.
  #4 (permalink)  
Antiguo 03/10/2006, 00:15
Avatar de Lolaloleitor  
Fecha de Ingreso: abril-2006
Mensajes: 22
Antigüedad: 18 años
Puntos: 0
Ups, gracias, no sabía lo de envolver el código con la etiqueta php.

Lo de las comillas en las expresiones de los where: al ser el id un integer no admite comillas( al menos así lo he estudiado yo, de hecho si pongo comillas me da error)
Según he estado mirando (aunque aun no he conseguido saber cómo se hace) tiene más que ver con los bufer. Funcionar funciona, enviar envia, pero cuando el volúmen de envios es muy elevado, hay muchos correos que no se reciben.

De todas formas te agradezco tu aportación

  #5 (permalink)  
Antiguo 03/10/2006, 00:22
 
Fecha de Ingreso: mayo-2004
Mensajes: 101
Antigüedad: 20 años
Puntos: 0
Según he estado mirando (aunque aun no he conseguido saber cómo se hace) tiene más que ver con los bufer. Funcionar funciona, enviar envia, pero cuando el volúmen de envios es muy elevado, hay muchos correos que no se reciben.

Espero compartas lo que has averiguado. Gracias!!!!
  #6 (permalink)  
Antiguo 03/10/2006, 01:12
Avatar de Lolaloleitor  
Fecha de Ingreso: abril-2006
Mensajes: 22
Antigüedad: 18 años
Puntos: 0
Ojalá alguien nos ayude, pero de cualquier forma, si consigo averiguarlo, no te preocupes que lo publicaré detalladopara que se entienda.
  #7 (permalink)  
Antiguo 03/10/2006, 05:53
Avatar de Lolaloleitor  
Fecha de Ingreso: abril-2006
Mensajes: 22
Antigüedad: 18 años
Puntos: 0
Bueno, ya he solucionado el problema; (gracias "alma de cantaro", que haría yo sin ti ;P )
La solucion es muy sencilla (si se sabe , claro); hacemos uso de la funcion sleep(), la cual para la ejecucion del bucle el tiempo que le pasamos como parametro, expresado en segundos.

Bueno, espero que os sirva
  #8 (permalink)  
Antiguo 03/10/2006, 09:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Lolaloleitor Ver Mensaje
Bueno, ya he solucionado el problema; (gracias "alma de cantaro", que haría yo sin ti ;P )
La solucion es muy sencilla (si se sabe , claro); hacemos uso de la funcion sleep(), la cual para la ejecucion del bucle el tiempo que le pasamos como parametro, expresado en segundos.

Bueno, espero que os sirva
OJO! ..

Si usas sleep() lo que haces es retardar la ejecución del scritp PHP esos N segundos que indicas. Multiplica por el N° de e-mails a enviar y obtendras (+ el proceso própio de envio del e-mail y código en general) el tiempo que va a consumir tu script en ejecutarse.

Por ende, en muchos casos tendrás que aumentar el tiempo por defecto que PHP le dá a la ejecución de un script PHP vía función:

set_time_limit()
www.php.net/set_time_limit

Si no lo aumentas, .. el script terminará su ejecución con un error al sobrepasar su tiempo asignado (por defecto unos 30 segundos).

Por otro lado .. en una conexión "HTTP" muchos servidores HTTP también imponen límite al tiempo de "espera" en la "respuesta" del script PHP en cuestión .. así que por ahí también podría "reventar" esta técnica del "sleep()".

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 04/10/2006, 14:14
Avatar de Lolaloleitor  
Fecha de Ingreso: abril-2006
Mensajes: 22
Antigüedad: 18 años
Puntos: 0
Gracias Cluster por tus advertencias
Entonces que me aconsejas? Puedes darme alguna indicacion de por donde tirar? No hace falta que me digas al pie de la letra como hacerlo, sólo unas pistas para seguir estudiando e investigando.

Gracias de antemano
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 09:52.