2008-08-20 22 views
5

¿Cuál es la forma más adecuada para enviar correos electrónicos con un mínimo de 1000 o más en PHP? ¿Alguna técnica confiable de cola de correo electrónico que sea capaz de manejar eso? Colas de correo electrónico en php

Respuesta

5

Puede simplemente insertar sus correos electrónicos en una tabla de base de datos de Mail Queue, y tener un proceso separado para verificar la cola y enviar por lotes un determinado número a la vez.

0

En general, he confiado en un truco. Tengo una lista de bases de datos de direcciones de correo electrónico y luego utilizo un meta-redireccionamiento a mí mismo con un parámetro creciente 'offset' que especifica qué fila de la base de datos estoy haciendo. Los redireccionamientos del servidor causan problemas porque los navegadores suponen que el tiempo empleado indica un ciclo infinito.

1

como me sugirió Mercutio, insertaba un nuevo registro en una tabla de cola de correo para cada correo electrónico esperando a ser enviado y luego utilizaba un proceso separado (como un CRON) para revisar la tabla periódicamente para cualquier artículo en cola.

si hay correos electrónicos en cola (y el correo electrónico no está personalizado para cada destinatario) agruparé los correos electrónicos por dominio y enviaré bloques para reducir el número total de correos electrónicos que deben enviarse, es decir, si tiene 1000 correos electrónicos en cola y 250 son para cuentas de Gmail, enviaría los 250 en 25 bloques de 10 (recuerde a los destinatarios CCO para evitar que se vean entre sí).

para enviar realmente el correo, lo usaría PEAR mail sobre el correo de funciones PHP()

después de enviar el correo electrónico o bien eliminar el registro (s) de la cola o cambiar un indicador de estado para mostrar que fue enviado y el bucle - i sería también añadir un contador para realizar un seguimiento de correos electrónicos que no pudo enviar y eliminarlos después de x intentos fallidos

para superar los problemas de tiempo de espera que lo haría bien, (dependiendo de la situación) - establecer el set_time_limit() para x segundos y haga un seguimiento del tiempo de ejecución del script (matando el script después de (x-1) segundos) - llame al script desde la línea de comando para evitar tim eouts : establezca un límite para la cantidad de correos electrónicos que el script podría enviar en una ejecución

1

Claro, la tabla de la base de datos podría ser una idea. Pero, ¿qué pasa con el envío de 1000 correos electrónicos con un archivo adjunto de 2 MB? tendrías que tener eso en cuenta también. Yo mismo tuve el problema, y ​​finalmente recurrí a escribir el correo electrónico en la base de datos y los archivos en el sistema de archivos. El script de correo electrónico que utilicé luego leyó los registros de la base de datos y trató de buscar los archivos adjuntos para enviar.

2

Hay una solución probada para ello: PERA Mail_Queue

funciona bien para mí.

+1

Lo he usado para poner en cola más de 30,000 correos a la vez. Un script bastante simple envía alrededor de 250 veces, si el promedio de carga no es demasiado alto. No los enviará más rápido, pero lo hará sin ningún problema. –

1

¿Está seguro de que necesita hacer esta cola de correo usted mismo?

Simplemente envíe todos los correos al agente de transferencia de correo de la máquina local (sendmail ...) y deje que eso se encargue de la puesta en cola y el envío. Después de todo, para eso fue diseñado.

En otras palabras: ¡no te preocupes!

+1

si está entregando un par de docenas, eso no es un problema. Enviar miles de correos electrónicos generará un nuevo proceso de sendmail para todos, y luego obtendrá grandes promedios de carga que pondrán al servidor de rodillas.Tengo Pear_Mail_Queue'd 50,000+ sin problema –

+0

Intenté eso, y encontré que sendmail comienza a dar pausas largas - ver http://serverfault.com/questions/551649/sendmail-slow-to-accept-emails – Rich

Cuestiones relacionadas