Foros del Web » Programando para Internet » PHP »

Envio rápido con clase phpmailer

Estas en el tema de Envio rápido con clase phpmailer en el foro de PHP en Foros del Web. Hola, vengo a exponer un problema con el cual llevo semanas pero no sé cómo solucionar, se trata del envío de correos mediante la clase ...
  #1 (permalink)  
Antiguo 10/01/2015, 14:06
Avatar de fieroso  
Fecha de Ingreso: diciembre-2009
Mensajes: 127
Antigüedad: 10 años
Puntos: 1
Envio rápido con clase phpmailer

Hola, vengo a exponer un problema con el cual llevo semanas pero no sé cómo solucionar, se trata del envío de correos mediante la clase phpmailer, el problema es la lentitud, cuando ejecuto el script quizás tenga que enviar 500 correos por ejemplo y se demora casi 30 minutos.

Código PHP:
        //Creo el contenido del email
        
require 'phpmailer/class.phpmailer.php'//incluyo la clase necesaria para el envío
        //Crear una instancia de PHPMailer
        
$mail = new PHPMailer();
        
//Definir que vamos a usar SMTP
        
$mail->IsSMTP();
        
//Esto es para activar el modo depuración. En entorno de pruebas lo mejor es 2, en producción siempre 0
        // 0 = off (producción)
        // 1 = client messages
        // 2 = client and server messages
        
$mail->SMTPDebug  0;
        
//Ahora definimos gmail como servidor que aloja nuestro SMTP
        
$mail->Host       'mail.midominio.com';
        
//El puerto será el 587 ya que usamos encriptación TLS
        
$mail->Port       25;
        
//Definmos la seguridad como TLS
        
$mail->SMTPSecure 'tls';
        
//Tenemos que usar gmail autenticados, así que esto a TRUE
        
$mail->SMTPAuth   true;
        
//Definimos la cuenta que vamos a usar. Dirección completa de la misma
        
$mail->Username   "[email protected]";
        
//Introducimos nuestra contraseña de gmail
        
$mail->Password   "mipass";
        
//Definimos el remitente (dirección y, opcionalmente, nombre)
        
$mail->SetFrom('[email protected]''minombre');
        
//Esta línea es por si queréis enviar copia a alguien (dirección y, opcionalmente, nombre)
                
while($matrizdestinatarios=mysql_fetch_array($destinatarios)){ //recorro la matriz y  hago el envío uno a uno a cada usuario
        //Y, ahora sí, definimos el destinatario (dirección y, opcionalmente, nombre)
        
$mail->AddBCC($matrizdestinatarios['email']);
        }
//del while
//aquí ya compongo el mensaje y hago el send 
Básicamento lo que hago es recorrer un array extraido de la base de datos con las direcciones, la demora es en recorrer dicha array e ir introduciendolos en $mail->AddBCC($matrizdestinatarios['email']);

En principio pensaba que fuera por lentitud de la máquina pero nada después ha sido probado en máquinas más potentes dando los mismo resultados.

Ahora ya no se si es problema de configuración de php o que de por sí este método es así de lento pero no lo creo ya que supongo que esta clase es usada por empresas y demás que se que tardan escasos segundos en componer esto.

Gracias, agradecería mucho quien me diera un poco de luz sobre el asunto o como hacer un envío más rápido mediante smpt, como pueden ver uso un servidor smtp propio pero de ahí tampoco es el problema lógicamente este funciona perfecto ya que una vez que el script compone la lista mi smtp si envia todos los correos a la vez y llegan a todos en el mismo momento.
__________________
Me gusta la programación y los retos
  #2 (permalink)  
Antiguo 10/01/2015, 17:38
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 6 años, 5 meses
Puntos: 379
Respuesta: Envio rápido con clase phpmailer

Supongo que ya revisaste otros factores y estas seguro que es el rendimiento del script, revisa tu versión de php este tema es muy importante ya que existen mejoras de rendimiento en las versiones recientes de php como el uso de Zend Opcode por defecto. Tambien es importante que este tipo de procesos lo trates de forma asíncrona mediante colas de mensajes, en este hilo se toco un poco el tema: http://www.forosdelweb.com/f18/como-...8/#post4660810
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 11/01/2015, 12:20
Avatar de fieroso  
Fecha de Ingreso: diciembre-2009
Mensajes: 127
Antigüedad: 10 años
Puntos: 1
Respuesta: Envio rápido con clase phpmailer

he actualizado a la versión 5.5 pero nada sigue igual, esta version se supone que ya usa Opcache, no se a que se deberá lo que tarda es en ir meteiendo los registros del array estraida de la base de datos en el array que usa la clase phpmailer para las direcciones a las que se envía
__________________
Me gusta la programación y los retos
  #4 (permalink)  
Antiguo 11/01/2015, 17:52
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 6 años, 5 meses
Puntos: 379
Respuesta: Envio rápido con clase phpmailer

Separa el envío por lotes, es decir en vez de meter el arreglo completo de una sola vez, ve metiendo direcciones de 10 en 10 o algo asi. Es cosa de que pruebes y realmente verifica que tienes instalado php 5.5 con un phpinfo
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 12/01/2015, 03:24
Avatar de fieroso  
Fecha de Ingreso: diciembre-2009
Mensajes: 127
Antigüedad: 10 años
Puntos: 1
Respuesta: Envio rápido con clase phpmailer

Cita:
Iniciado por hhs Ver Mensaje
Separa el envío por lotes, es decir en vez de meter el arreglo completo de una sola vez, ve metiendo direcciones de 10 en 10 o algo asi. Es cosa de que pruebes y realmente verifica que tienes instalado php 5.5 con un phpinfo
Sí php 5.5 lo és instalado a posta y despues comprobado con phpinfo()
__________________
Me gusta la programación y los retos
  #6 (permalink)  
Antiguo 12/01/2015, 09:39
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 6 años, 5 meses
Puntos: 379
Respuesta: Envio rápido con clase phpmailer

Como lo comente, intenta envío por lotes y también revisa tus consultas a la base de datos.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 12/01/2015, 11:45
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 11 años, 1 mes
Puntos: 175
Respuesta: Envio rápido con clase phpmailer

Bueno, convengamos que tu hosting no es dedicado al envio de mails masivos, por ende le generas un trafico de correo que a la larga termina ralentizandote el proceso...
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #8 (permalink)  
Antiguo 12/01/2015, 13:20
Avatar de fieroso  
Fecha de Ingreso: diciembre-2009
Mensajes: 127
Antigüedad: 10 años
Puntos: 1
Respuesta: Envio rápido con clase phpmailer

Cita:
Iniciado por loncho_rojas Ver Mensaje
Bueno, convengamos que tu hosting no es dedicado al envio de mails masivos, por ende le generas un trafico de correo que a la larga termina ralentizandote el proceso...
si es decicado, tanto el servidor que ejecuta el script como el otro en el que tengo el servidor de correo, mi problema es la lentitud de la clase phpmailer
__________________
Me gusta la programación y los retos
  #9 (permalink)  
Antiguo 12/01/2015, 13:38
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 11 años, 1 mes
Puntos: 175
Respuesta: Envio rápido con clase phpmailer

Bueno... pues al ser PHP mailer deduje que no era dedicado... creo que deberías usar el PHPLIST para tal efecto...
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #10 (permalink)  
Antiguo 12/01/2015, 14:27
Avatar de fieroso  
Fecha de Ingreso: diciembre-2009
Mensajes: 127
Antigüedad: 10 años
Puntos: 1
Respuesta: Envio rápido con clase phpmailer

Cita:
Iniciado por loncho_rojas Ver Mensaje
Bueno... pues al ser PHP mailer deduje que no era dedicado... creo que deberías usar el PHPLIST para tal efecto...
haber me e expresado mal quizás, yo uso una web propia en la que al hacer determinada acción envía un correo a una lista de usuarios sacada de la base de datos. Cuando digo phpmailer siempre me refiero a la clase phpmailer https://github.com/PHPMailer/PHPMailer
__________________
Me gusta la programación y los retos
  #11 (permalink)  
Antiguo 12/01/2015, 15:08
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 11 años, 1 mes
Puntos: 175
Respuesta: Envio rápido con clase phpmailer

Yo me he expresado correctamente según lo que acabas de escribir e interpreté perfecto lo que dijiste... phpList es un software de código abierto para la gestión de listas de correo electrónico. Está diseñado para la divulgación de información.. excelente para tu tarea... Si el phpMailer tiene esa limitación, pues, como optimizar una librería que de por sí ya tiene ese defecto... seguro es posible "hackear" su codigo, pero bueno, eso ya es otro nivel de conocimiento...
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Etiquetas: clase, phpmailer, sql
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 18:33.