Foros del Web » Programando para Internet » PHP »

Error enviando mail

Estas en el tema de Error enviando mail en el foro de PHP en Foros del Web. Buenos dias, tengo un boletin de noticias html que envio a todos los asociados de mi bd. el problema es que dependiendo del numero de ...

  #1 (permalink)  
Antiguo 07/10/2004, 03:44
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Error enviando mail

Buenos dias, tengo un boletin de noticias html que envio a todos los asociados de mi bd. el problema es que dependiendo del numero de asociados, me da un error y no me los envia. tengo lo siguiente:

while ($query=mysql_fetch_array($result)){

$html_personalizado= mostrar_html($tema, $query);


$emailaenviar=$query['mail'];
$mail= mail($emailaenviar,$asunto, $html_personalizado, $headers);
}//fin while

Me comentaron que pusiera un set_time_limit(0); , pero de todas maneras, cuando pasa un rato, me da un error de pagina. como puedo solucionarlo, para no tener que hacer mas de una bd?

salu2, y gracias!!
  #2 (permalink)  
Antiguo 07/10/2004, 04:12
Avatar de LatamHost  
Fecha de Ingreso: octubre-2004
Ubicación: Santiago, Chile
Mensajes: 522
Antigüedad: 19 años, 6 meses
Puntos: 1
Y el error seria?
__________________
MiRevolucionDigital.com - Unete a la revolución digital!
  #3 (permalink)  
Antiguo 07/10/2004, 04:24
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
gracias LatamHost.ahora mismo no te puedo decir el error, pq para ello deberia enviar un mail a todos los contactos de mi bd. te comento que el error que da es un error de pagina, pero si pongo pocos registros,no me da ningun problema.

el problema está que la barra de progeso de abajo tarda mucho, y supongo que la aplicación se quedará colgada. pensaba que con el set_time_limit no ocurriria, pero si q pasa..

que puedo hacer? salu2
  #4 (permalink)  
Antiguo 08/10/2004, 03:03
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
acabo de probar de hacer el envio. la barra de progreso de abajo va funcionando, hasta que se para y me sale el error de 'No Se Puede Mostrar La Pagina.'. el problema de esto es que no se hasta que numero de socio se ha hecho el envio..

como puedo solucionar el problema??

salu2
  #5 (permalink)  
Antiguo 08/10/2004, 03:33
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 10 meses
Puntos: 2
Si vas a mandar muchos mensajes te recomiendo que dejes un lapso entre el envio de uno y el siguiente:
sleep(1);

Aparte te recomiendo que no lo ejecutes desde una página puesto que te va a dar un timeout, hazlo desde consola si es posible.
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #6 (permalink)  
Antiguo 08/10/2004, 03:37
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Gracias Living, perdona pero no acabo de entender bien lo que me dices. te pongo el codigo para que me digas donde poner el sleep.

<?
//cabeceras para el envio del mail en html y dire de quien lo envia
set_time_limit(0);
$headers = "MIME-Version: 1.0\r\n";
$headers = "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: [email protected]\r\n";

$tema=$HTTP_POST_VARS ["tema"];

function mostrar_html($tema, $variables)
{
$cod = implode("", @file($tema));
ob_start();
extract($variables);
eval('?>'.$cod.'<?');
$temp=ob_get_contents();
ob_end_clean();
return $temp;
}


$asunto="Emailing ";

$conecto = mysql_connect("localhost","1","1");
mysql_select_db("bd",$conecto);

$result=mysql_query("SELECT * FROM mailing1_125 ") or die (mysql_error());

while ($query=mysql_fetch_array($result)){

$html_personalizado= mostrar_html($tema, $query);


$emailaenviar=$query['mail'];
$mail= mail($emailaenviar,$asunto, $html_personalizado, $headers);
}//fin while

?>

y lo envio desde mi pagina de internet. a que te refieres cuando dices a hacerlo desde consola??

salu2
  #7 (permalink)  
Antiguo 08/10/2004, 03:47
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 10 meses
Puntos: 2
Después de llamar a la función mail, antes de cerras la llave del while, pero eso no arreglaría tu problema simplemente sirve para que tu servidor smtp no se vuelva "loco" con una cola tan grande de envios. Te lo digo por experiencia, cuando enviaba muchísimos seguidos acaba fallando.

El set_time_limit no funciona si en la configuración de tu php está puesto el safe_mode en "on". Eso puedes verlo con un <?=phpinfo?>
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #8 (permalink)  
Antiguo 08/10/2004, 03:58
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
entonces living, la primera cuestion se resolveria con esto?

$mail= mail($emailaenviar,$asunto, $html_personalizado, $headers);
sleep(1);
}//fin while

para no hacer el envio todo entero, he hecho tres bd, cada una de ellas tienes 125 usuarios. con esto se enviara a todos?

como puedo enviarlo desde consola? de que me sirve modificar el php.info si tengo subido el script a mi servidor de internet? tambien se puede cambiar alli? perdona, pero nunca habia utilizado esta sentencia, y me seria de gran utilidad!!

salu2, y muchas gracias por estar ayudandome!!
  #9 (permalink)  
Antiguo 08/10/2004, 04:02
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
podria enviarlo desde mi pc, sin necesidad de subirlo a un servidor externo??
  #10 (permalink)  
Antiguo 08/10/2004, 04:13
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 10 meses
Puntos: 2
Si, podrías instalar por ejemplo el Argosoft y enviar los email desde ahí. No tendrías ningún problema y así ajustas los parámetros como más te convengan.

Desde consola sería "php pagina.php" pero no creo que en tu hosting tengas acceso por telnet.
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #11 (permalink)  
Antiguo 08/10/2004, 04:24
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
gracias Living, pero entonces, para no tener que utilizar ningun tipo de software, con el sleep se me conseguiran enviar los mails sin el error anterior?

como puedo verificar que se me ha enviado hasta el ultimo mail de la bd?

si me da error, como puedo saber que mail ha sido el ultimo en enviar??

salu2!
  #12 (permalink)  
Antiguo 08/10/2004, 04:29
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 10 meses
Puntos: 2
no, el problema es que está establecido un tiempo máximo de ejecución del script y al enviar el email se sobre pasa ese límite. Eso sólo lo podrías controlar con set_time_limit(0); o modificando la directiva max_execution_time en el php.ini

Lo que puedes hacer es ir guardando en un fichero de texto los email que se han enviado correctamente.Un especie de log.
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #13 (permalink)  
Antiguo 08/10/2004, 04:41
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
me podrias decir como puedo hacer eso del log?? muy interesante.

pero como modifico la directiva del php.ini, si envio los mails desde internet con un hospedaje como arsys, acens, etc...
  #14 (permalink)  
Antiguo 08/10/2004, 04:49
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
he preguntado en el hospedaje, y me han dicho q podrian cambiar el php.ini. que datos tendria que pasarle al admin para que el script tenga mas tiempo para ejecutarse??

max_execution_time...

salu2
  #15 (permalink)  
Antiguo 08/10/2004, 04:50
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

La mayoria de los hostings tiene limitado los recursos que puede ocupar un script concreto. Ademas del time limit de PHP, puede ser que tu hosting tenga un timeout para el servidor web, para que cualquier peticion tenga un tiempo maximo. Ademas, por el error que comentas, no estas generando salida. generar salida puede ayudar a evitar el timeout (asi no parece que se ha colgado). Despues del mail(), haz un echo de la direccion a la que has envidado.

El log no seria mas que un fichero de texto donde vas escribiendo los emails segun vas enviandolos (parecido al echo que te comento antes).

Saludos.

PD: Por norma general, no ejecutes este tipo de scripts en alojamientos compartidos. Puedes usar remotamente el SMTP de tu servidor, configurandolo en una instalacion local de PHP.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #16 (permalink)  
Antiguo 08/10/2004, 04:52
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 10 meses
Puntos: 2
te quedaría una cosa así:


<?
$ficheromailscorrectos = fopen("mailcorrectos.txt","w");

//cabeceras para el envio del mail en html y dire de quien lo envia
set_time_limit(0);
$headers = "MIME-Version: 1.0\r\n";
$headers = "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: [email protected]\r\n";

$tema=$HTTP_POST_VARS ["tema"];

function mostrar_html($tema, $variables)
{
$cod = implode("", @file($tema));
ob_start();
extract($variables);
eval('?>'.$cod.'<?');
$temp=ob_get_contents();
ob_end_clean();
return $temp;
}


$asunto="Emailing ";

$conecto = mysql_connect("localhost","1","1");
mysql_select_db("bd",$conecto);

$result=mysql_query("SELECT * FROM mailing1_125 ") or die (mysql_error());

while ($query=mysql_fetch_array($result)){

$html_personalizado= mostrar_html($tema, $query);


$emailaenviar=$query['mail'];
$mail= mail($emailaenviar,$asunto, $html_personalizado, $headers);
if ($mail){
fputs($ficheromailscorrectos,$emailaenviar."\r\n") ;
}
sleep(1);
}//fin while
fclose($ficheromailscorrectos);
?>
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #17 (permalink)  
Antiguo 08/10/2004, 04:53
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 10 meses
Puntos: 2
lo mejor es que pongan el safe mode a off y con set_time_limit ajustas tu el tiempo
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #18 (permalink)  
Antiguo 08/10/2004, 04:58
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
X Josemi:

Gracias Josemi,pero como podria hacer lo que me dices? ojala pudiera hacerlo desde mi pc sin a modo local, sin necesidad de subir el archivo a internet.

como seria el echo?? como puedo ponerlo para que me vaya poniendo una direccion tras otra (una debajo de la otra), y cuando diera error que haria, no mostraria mas?

X Living:

gracias Living, probare lo que me dice. le dire que me pongan el safe mode a off, pero que tiempo tendria que ponerle al set_time_limit(x)???

hay que enviar unos 125 por bd. tengo un topo entre los mails, en el numero 75 (de 125), y hasta el ha llegado. pero no se cuantos se han quedado sin...

salu2
  #19 (permalink)  
Antiguo 08/10/2004, 05:24
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 10 meses
Puntos: 2
Pues yo creo que con 60 debería valerte.
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #20 (permalink)  
Antiguo 08/10/2004, 08:03
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
es normal que envie el mail 2 veces?? como puedo hacer un echo de los mails que voy enviando?
  #21 (permalink)  
Antiguo 08/10/2004, 10:29
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Living, he puesto el codigo tal y como me dices, y me enviael mail perfectamente pero no me pone nada en el archivo txt...

donde puede estar el error?

salu2
  #22 (permalink)  
Antiguo 09/10/2004, 03:02
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
No consido escribir en un txt

Buenas, en un post anterior expuse mi idea para enviar mails a todas las direcciones de mi bd (con el previo consentimiento de los asociados).

el amigo Living me echo un cable, y me comento que podia grabar en un txt los mails que se habian enviado. pero la cuestion es que no consigo escribir en el txt, y si edito algo, en vez de reescribrir me borra lo que hay.

donde esta el error??

$ficheromailscorrectos = fopen("mailscorrectos.txt","w");

....

$emailaenviar=$query['mail'];

$mailenviar= mail($emailaenviar,$asunto, $html_personalizado, $headers);
if ($mail){
fputs($ficheromailscorrectos,$emailaenviar."\r\n") ;
}
sleep(1);
}//fin while
fclose($ficheromailscorrectos);
  #23 (permalink)  
Antiguo 09/10/2004, 07:06
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 10 meses
Puntos: 2
Tienes puesto esto:
if ($mail){
fputs($ficheromailscorrectos,$emailaenviar."\r\n") ;
}

Deberías tener esto

if ($mailenviar){
fputs($ficheromailscorrectos,$emailaenviar."\r\n") ;
}
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #24 (permalink)  
Antiguo 09/10/2004, 09:55
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
gracias Living, aprovechando que te tengo por aqui, aprovecho para hacerte llegar tres dudas:

1) como podria añadir en la misma linea, el id y el nombre? tengo

$idenviar=$query['id'];
$nombreenviar=$query['nombre'];

2) me dijeron en el servidor que no pueden modificarme esos datos, pq si no tendria que modificar los de todos los clientes. que puedo hacer?

3) he comprobado que se reciben 2 mails en vez de uno. el segundo llega pasadas unas horas.. donde esta el error??

muchas gracias!!
  #25 (permalink)  
Antiguo 09/10/2004, 10:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
1) .. piensa que cada "linea" no es más que un string (cadena) y que como tal ... en PHP para unir "cadenas" lo haces concatenando usando el "." (punto) ..

fputs($ficheromailscorrectos,$idenviar." ".$emailaenviar." ".$nombreenviar."\r\n");

2) No entendí nada .. Si te refieres a abrir ese archivo para modificar algún dato de ese archivo (registros/campos) generados en el ... no hay problema en hacerlo. ¿o a que te refieres?

3) Si no pones el código completo (pese que tal vez todo esto viene de otros mensajes como parece ser ... ) poco se puede hacer para ver que sucede.

La única sugerencia es que compruebes antes de atacar tu mail() que $emailaenviar contenga un e-mail (dirección) válida y no más ...o con espacios o algo así (podrías aplicar un trim() que quita espacios por delante y por detras de una cadena a esa variable antes de llevarla a mail().

Un saludo,
  #26 (permalink)  
Antiguo 09/10/2004, 11:38
 
Fecha de Ingreso: marzo-2003
Ubicación: Bogotá
Mensajes: 199
Antigüedad: 21 años, 1 mes
Puntos: 0
ayuda con función mail()

PD: Por norma general, no ejecutes este tipo de scripts en alojamientos compartidos. Puedes usar remotamente el SMTP de tu servidor, configurandolo en una instalacion local de PHP.[/QUOTE]

Tengo una página en un servidor compartido y envio correo a cerca de 27.000 pesonas, un periodico virtual empresarial, uno económico y uno de salud, en la base de datos mi cliente escoje cual de los tres quiere, si quiere dos o los tres, estuvo funcionando perfectamente durante mas de un año, pero se comenzo a caer el servidor cuando enviaba esos correos, y mi servidor me amenaza con bajar la página definitivamente (ya la ha bajado dos veces) que otro sistemas puedo utilizar para enviar estos correos sin que sea muy dificil el cambio??? los del server me dicen que utilice mailman pero no se si se pueda integrar a la BD que poseo actualmente, por favor ayuda.

Gracias.
  #27 (permalink)  
Antiguo 09/10/2004, 11:43
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 10 meses
Puntos: 2
a la segunda pregunta:

Prueba a subir un fichero .htaccess a tu servidor (tendrás que crear un fichero htaccess y en el servidor renombrarlo y ponerle el . (punto) delante) con esta línea como contenido:

php_value safe_mode Off
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #28 (permalink)  
Antiguo 09/10/2004, 11:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Uní los mensajes .. que "al parecer" guardan relación ..por qué el los últimos ya parecía una conversación "privada" ... (se perdió el contexto de lo que preguntan y responden..)

Un saludo,
  #29 (permalink)  
Antiguo 09/10/2004, 11:58
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 living
a la segunda pregunta:

Prueba a subir un fichero .htaccess a tu servidor (tendrás que crear un fichero htaccess y en el servidor renombrarlo y ponerle el . (punto) delante) con esta línea como contenido:

php_value safe_mode Off
Parece que el "safe_mode" no se puede cambiar por un .htaccess ..sólo por php.ini

safe_mode "0" PHP_INI_SYSTEM
http://www.php.net/ini_set

Un saludo,
  #30 (permalink)  
Antiguo 09/10/2004, 12:26
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
buff me he perdidoooo!!!

por favor, decirme como puedo hacerlo sin subirlo a un hospedaje compartidooo!!!

Cesar24, como lo hago sin subirlo a un servidor??

ayudarme por favor!!!
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 14:37.