elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Problemas con envio de correos en php !!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con envio de correos en php !!  (Leído 4,217 veces)
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Problemas con envio de correos en php !!
« en: 14 Noviembre 2008, 19:31 pm »

Que tal..

Realize un pequeno sistema para:

- guardar correos por grupos
- guardar correos en lugares independientes (grupos distintos)
- enviar correos a grupos
- enviar correos a direcciones independientes

Actualmente uno de los grupos donde contengo correos a crecido demasiado :S, y cuando le doy Enviar Correos a dicho grupo (contiene todos los destinatarios) la pagina se queda enviando correos y de repente como que el script se frena o simplemente ya no responde, vaya, ya no pone nada en la pantalla, ya sea "Correos enviados" o  bien "Problemas para enviar correos".

Cuando realize el proceso de codificacion de mi sistema me asegure de implementar la funcion set_time_limit(segundos), para aumentar el tiempo de ejecucion del script, estableciendolo a 5 minutos (set_time_limit(300);), pero aun asi el codigo es frenado :(...

Mi sistema esta funcionando en un hosting en internet (el cual estoy rentando).

Por otro lado, en mi servicio de hosting siempre me posicionan en mi directorio de raiz el archivo php.ini el cual posee ya variables configuradas y pues me imagino que lo posicionan hay para que yo pueda variar dicha informacion, de modo que segun la modificacion solo agrege esto: max_execution_time 300, pero aun asi el script no puede terminar de enviar correos :(.

Aqui dejo el php.ini que tengo en el directorio de raiz del servidor:

Código:
register_globals = off
allow_url_fopen = off

expose_php = Off
max_input_time = 300
max_execution_time = 300
variables_order = "EGPCS"
extension_dir = ./
upload_tmp_dir = /tmp
precision = 12
SMTP = relay-hosting.secureserver.net
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="

[Zend]
zend_extension=/usr/local/zo/ZendExtensionManager.so
zend_extension=/usr/local/zo/4_3/ZendOptimizer.so

[browscap]
browscap = php_browscap.ini

Aqui un pedazo del codigo de mi sistema para envio de mails"

Código
  1. //verifica que los correos y grupos sean validos, a su vez les realiza el proceso de verificacion de dominio, quita
  2. //los espacios, asegura que el texto este en minusculas (lo convierte),etc...
  3. //Si todo tuvo exito, retorna todos los correos delimitados por una coma
  4. if( ($mail_dest=verificar_correos_grupos( proteger_cadena($_POST["publicidad_redactar_emaildestino"]) )) )
  5. {
  6. set_time_limit(600); //10 minutos
  7.  
  8. if( strchr($mail_dest, ",") ) //si contiene coma, existen mas mails
  9. {
  10. $x_mails= explode( ",", $mail_dest ); //dividimos
  11.  
  12. for( $i=0; $i<sizeof($x_mails); $i++ ) //ciclo para recorrer toda la lista
  13. {
  14. if( strchr($x_mails[$i], "@") ) //si existe un arroba es mail directo
  15. enviar_correo( $x_mails[$i], proteger_cadena($_POST["publicidad_redactar_titulo"]), 6, proteger_cadena($_POST["publicidad_redactar_codigo"]) );
  16. else //es un grupo
  17. {
  18. $grupo_id= consultar_datos_general( "PRIVILEGIOS", "NOMBRE='". $x_mails[$i]. "'", "ID"); //obtenemso ID apartir del nombre de grupo
  19. $cons_lista= consultar_con( "LISTA_CORREOS", "GRUPO='". $grupo_id. "'" ); //obtenemos todos los correos del grupo
  20. while( $buf_lista=mysql_fetch_array($cons_lista) ) //recorriendo el buffer
  21. enviar_correo( $buf_lista["EMAIL"], proteger_cadena($_POST["publicidad_redactar_titulo"]), 6, proteger_cadena($_POST["publicidad_redactar_codigo"]) );
  22.  
  23. unset($cons_lista);
  24. unset($buf_lista);
  25. unset($grupo_id);
  26. }
  27. }
  28. unset($x_mails);
  29. }
  30. else //solo es un destinatario o grupo
  31. {
  32. if( strchr($mail_dest, "@") ) //si existe un arroba es mail directo
  33. enviar_correo( $mail_dest, proteger_cadena($_POST["publicidad_redactar_titulo"]), 6, proteger_cadena($_POST["publicidad_redactar_codigo"]) );
  34. else //es un grupo
  35. {
  36. $grupo_id= consultar_datos_general( "PRIVILEGIOS", "NOMBRE='". $mail_dest. "'", "ID"); //obtenemso ID apartir del nombre de grupo
  37. $cons_lista= consultar_con( "LISTA_CORREOS", "GRUPO='". $grupo_id. "'" ); //obtenemos todos los correos del grupo
  38. while( $buf_lista=mysql_fetch_array($cons_lista) ) //recorremos el buffer
  39. enviar_correo( $buf_lista["EMAIL"], proteger_cadena($_POST["publicidad_redactar_titulo"]), 6, proteger_cadena($_POST["publicidad_redactar_codigo"]) );
  40.  
  41. unset($cons_lista);
  42. unset($buf_lista);
  43. unset($grupo_id);
  44. }
  45. }
  46.  
  47. //esto es solo como metodo estadistico, se agrega un incremente a diho grupo que se
  48. //le ha enviado un correo
  49. $trama= array(
  50. "id"=>"'". $_GET["id_send"]. "'",
  51. "hit"=>"'". (consultar_datos_general("PUBLICIDAD", "ID='". $_GET["id_send"]. "'", "hit")+1). "'"
  52. );
  53. actualizar_bdd( "PUBLICIDAD", $trama );
  54. unset($trama);
  55.  
  56. set_time_limit(30); //30 segundos
  57. echo "Publicidad enviada con exito...";
  58. }
  59. else
  60. echo "Error: verifique los destinatarios.";
  61.  
  62. echo "<p><input type=\"submit\" value=\"Continuar\" class=\"boton_01\" onclick=\"cargar_datos( 'id=". $_GET["id"]. "&mov=ver', 'tabla_publicidad_lista', 'GET', '0' );\"> ";

Que podria hacer para poder completar el envio de mails a todos los contenedores ???

bye bye


« Última modificación: 14 Noviembre 2008, 19:42 pm por Diabliyo » En línea

el-brujo
ehn
***
Desconectado Desconectado

Mensajes: 21.637


La libertad no se suplica, se conquista


Ver Perfil WWW
Re: Problemas con envio de correos en php !!
« Respuesta #1 en: 14 Noviembre 2008, 19:55 pm »

La gente suele usar:

set_time_limit(20);

o

sleep(100);

para pausar envíos en los e-mails, pero creo que debes poner ese código dentro del bucle while en tu caso.


En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Problemas con envio de correos en php !!
« Respuesta #2 en: 14 Noviembre 2008, 20:21 pm »

La gente suele usar:

set_time_limit(20);

o

sleep(100);

para pausar envíos en los e-mails, pero creo que debes poner ese código dentro del bucle while en tu caso.

Bueno, entonces lo que debo hacer es modificar mi codigo actual y cambiar de posicion los set_time_limit(), cierto ??... moviemdolos hacia la parte antes que se invoque la funcion mail(), cierto ??..

Por otr lado, yo tengo entendido que apartir de que un archivo PHP esta ciento leido e interpretado por el compiler de PHP y mostrado su resultado en tags HTML hacia el cliente, este proceso de duracion se le llama tiempo de ejecucion, asi que independientemente de que se aplique: sleep(), fopen, fread, mail(), o cualquier otra funcion, si el tiempo que tarde dicho archivo PHP en interpretarse o hacer su tarea, estara limitado por el tiempo de ejecucion establecido en la configuracion del php.ini... o no ???, asi lo entiendo yo !!

Por lo tanto si fuese correcto mi conocimiento de arriba, la implementacion de sleep() no serviria de mucho :s, ya que el script al momento de estare jecutando realizaria un retardo (sleep()) y esto se uniria al tiempo de ejecucion limite :S !!...

Posiblemente tambien no me has entendido en mi post principal, nose :S !!...

bye bye
« Última modificación: 14 Noviembre 2008, 20:32 pm por Diabliyo » En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Problemas con envio de correos en php !!
« Respuesta #3 en: 14 Noviembre 2008, 21:37 pm »

Hola

Listo, solamente quite el set_time_limit(600) hacia dentro del while() donde invoco la funcion enviar_correo(). Con esto logre enviar todo lo deseado xD...

bye bye
En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Problemas con envio de correos en php !!
« Respuesta #4 en: 25 Noviembre 2008, 15:57 pm »

Hola

Listo, solamente quite el set_time_limit(600) hacia dentro del while() donde invoco la funcion enviar_correo(). Con esto logre enviar todo lo deseado xD...

bye bye

Retomo el tema, debido a que sigo experimentando problemas al momento de estar enviando correo...

En mi base de datos poseo muchos correos asi que al momento de estar enviando llega un momento en el que el AJAX se queda Cargando.. (por que oviamente esta enviando correos a todos los destinatarios), y finalmente solo se queda la pagina sin ningun letrero, vaya, pareciera como si se frenara todo :(...

deduzco que el script es frenado por exceder el limite de ejecucion... pero como puedo resolver este problema, debido a que no se alcanza a enviar los correos a todos los destinatarios...

Por otro lado, estuve contando aproximadamente CUANTOS correos si se pudieron enviar, y solo acanze a contar: 420 envios...

Utilizo el siguiente codigo:

Funcion que lee contactos e invoca funcion de envio de correos[/b
Código
  1. while( ($buf_lista=mysql_fetch_array($cons_lista)) && $smtp_error==1 )
  2. {
  3. set_time_limit(600); //10 minutos
  4. $smtp_error= enviar_correo( $buf_lista["EMAIL"], proteger_cadena($_POST["publicidad_redactar_titulo"]), 6, proteger_cadena($_POST["publicidad_redactar_codigo"]), $_POST["file_adjunto"] );
  5. set_time_limit(30); //3 minutos
  6. }

Funcion que envia correos
Código
  1. function enviar_correo( $to, $asunto, $modo, $enlace, $adjunto )
  2. {
  3. $boundary= md5(time()); //valor boundary
  4. $htmlalt_boundary= $boundary. "_htmlalt"; //boundary suplementario
  5. $subject=$asunto; //titulo del correo
  6.  
  7. //cabeceras para enviar correo en formato HTML
  8. $headers = "MIME-Version: 1.0\r\n";
  9. $headers .= "Content-Type: multipart/mixed; boundary=\"". $boundary. "\"\r\n"; //datos mixteados
  10. $headers .= "From: ". TITULO_WEB. "<robot@sie-group.net>\r\n"; //correo del que lo envia
  11.  
  12. //incia cuerpo del mensaje que se visualiza
  13. $cuerpo="--". $boundary. "\r\n";
  14. $cuerpo .= "Content-Type: multipart/alternative; boundary=\"". $htmlalt_boundary. "\"\r\n\r\n"; //contenido alternativo: texto o html
  15. $cuerpo .= "--". $htmlalt_boundary. "\r\n";
  16. $cuerpo .= "Content-Type: text/html; charset=iso-8859-1\r\n";
  17. $cuerpo .= "Content-Transfer-Encoding: 8bits\r\n\r\n";
  18.  
  19. if( $modo==0 ) //enviar correo para comentarios
  20. {
  21. //Cuerpo o contexto del mensaje, la esencia del correo, el todo ;)
  22. $cuerpo .= "Han publicado un nuevo comentario en <b>". $_SERVER['HTTP_HOST']. "</b>.<br>Enlace al tema: ";
  23. $cuerpo .= "<b></b><a href=\"". $enlace. "\" target=\"_blank\">". $enlace. "</a></b>";
  24. }
  25. else if( $modo==1 ) //error en correo para comentarios
  26. {
  27. $trama_deficiente= $_POST;
  28. //Cuerpo o contexto del mensaje, la esencia del correo, el todo ;)
  29. $cuerpo .= "Se produjo un error en el servidor <b>". $_SERVER['HTTP_HOST']. "</b> al interntar enviar aviso de notificacion a las bandejas, ";
  30. $cuerpo .= "la notificacion se intento enviar en blanco o sin u enlace hacia la noticia donde se publico el comentario.";
  31. $cuerpo .= "<p>A continuacion de muestra la trama deficiente obtenida: <br>". $trama_deficiente;
  32. unset($trama_deficiente);
  33. }
  34. //mas modos....
  35. //....
  36.  
  37. $cuerpo .= "\r\n\r\n";
  38. $cuerpo .= "--". $htmlalt_boundary. "--\r\n\r\n"; //fin cuerpo mensaje a mostrar
  39.  
  40. //archivos adjuntos
  41. if( strcmp($adjunto, "0") && strcmp($adjunto, "vacio")  )
  42. {
  43. set_time_limit(600); //limite maximo 10 minutos
  44. $archivo= $adjunto;
  45. $buf_type= obtener_extencion_stream_archivo($adjunto); //obtenemos tipo archivo
  46.  
  47. $fp= fopen( "uploads/".$archivo, "r" ); //abrimos archivo
  48. $buf= fread( $fp, filesize("uploads/".$archivo) ); //leemos archivo completamente
  49. fclose($fp); //cerramos apuntador;
  50.  
  51. $cuerpo .= "--". $boundary. "\r\n";
  52. $cuerpo .= "Content-Type: ". $buf_type. "; name=\"". $archivo. "\"\r\n"; //envio directo de datos
  53. $cuerpo .= "Content-Transfer-Encoding: base64\r\n";
  54. $cuerpo .= "Content-Disposition: attachment; filename=\"". $archivo. "\"\r\n\r\n";
  55. $cuerpo .= base64_encode($buf). "\r\n\r\n";
  56. }
  57. $cuerpo .= "--". $boundary. "--\r\n\r\n";
  58.  
  59. //funcion para enviar correo
  60. set_time_limit(600); //limite maximo 10 minutos
  61. if( mail($to, $subject, $cuerpo, $headers) == FALSE )
  62. return 0;
  63. return 1;
  64. }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Nueva campaña de envío de correos, hora a los senadores, para detener la 'Ley...
Noticias
wolfbcn 0 1,451 Último mensaje 7 Febrero 2011, 18:31 pm
por wolfbcn
envio de correos masivos
Seguridad
kenneth77 2 2,790 Último mensaje 12 Abril 2012, 18:17 pm
por kenneth77
Envio de correos via TELNET funcionando 100%...
Windows
fabian7593 5 8,798 Último mensaje 24 Abril 2019, 22:28 pm
por simorg
Error en el envio de correos
Redes
huerto123 0 2,198 Último mensaje 16 Agosto 2014, 16:27 pm
por huerto123
Problemas con servidor de correos [En VPS]
Redes
Droit 1 1,909 Último mensaje 12 Abril 2015, 19:45 pm
por MinusFour
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines