2012-03-07 12 views
5

Estoy creando un sistema, donde se enviará una lista de miles de correos electrónicos periódicamente, sé que la función mail() en PHP es bastante pesada, especialmente si la llamo demasiadas veces al mismo tiempo.¿Es php mail() una buena opción para el envío masivo de correos?

Aproximadamente la forma en que mi sistema funciona, es que creo una cola de correos electrónicos en MySQL y los envío en lotes de 25 usando mail(), eliminando de la tabla los 25 principales enviados. Y espero 2 segundos entre cada conjunto de 25.

¿Esto es demasiado esfuerzo para el servidor o puedo impulsarlo un poco más? Digamos que 50 por segundo? O hay una forma mejor de enviar muchos correos electrónicos en menos tiempo sin sacrificar el rendimiento del servidor.

Tengo un servidor dedicado sin mail() límite de llamadas.

+0

Espero que no estés trabajando para los spammers. :) – Kaz

+0

posible duplicado de [PHP Mass Mailing (25K-100K) listas] (http://stackoverflow.com/questions/1296546/php-mass-mailing-25k-100k-lists) –

+0

espero que estés en una máquina dedicada , ningún host compartido permitiría este tipo de tráfico, y yo voto por PHPMailer –

Respuesta

5

Hay otros factores a considerar además del rendimiento, pero la respuesta corta es: hay mejores opciones. Amazon SES y MailChimp son los dos que conozco que han escuchado comentarios positivos.

mirada a la respuesta de j08691 con respecto al rendimiento, pero otros problemas con el uso mail() para este fin incluyen:

  1. Escalabilidad (que puede golpear una pared que ningún servidor SMTP puede manejar el tiempo, y ya estás pensando en ello)

  2. Integridad: es mucho más probable que te marquen como spam cuando mueves tu propio correo masivo, especialmente usando mail ya que usa el correo local de diseño.

  3. Costo/beneficio y retorno de la inversión: los anuncios masivos confiables lo hacen bien y por un precio competitivo. En algún momento, se está pagando menos por hora para mantener su servidor de correo cuando se cuelga, salirse de las listas negras, escribir el diseño del correo electrónico a mano, mantenimiento general, etc. de lo que pagaría por el servicio de correo masivo.

En general, el gran problema es que usted tiene que hacer todo el trabajo usted mismo y es muy probable que se marcan como SPAM para el beneficio de no pagar por un servicio que va a ser capaz de enviar cientos de correos electrónicos un segundo frente a cien por minuto cuando PHP no está ocupado haciendo todo lo demás que maneja para su aplicación web.

Anécdota personal (no un respaldo para SES, solo envíos masivos): Tuvimos un cliente que envió 100k + correos electrónicos por campaña, con 1 - 3 campañas por día como mínimo. Empezaron a quejarse de que los clientes recibían correos electrónicos sobre "ofertas diarias" con 2 días de retraso.No era porque la biblioteca de Mailer era lenta (ni siquiera esta aplicación evitó usar mail), era que no podía estar seguro de enviar todos los de los correos electrónicos para cada campaña antes de que el correo electrónico fuera irrelevante. Los cambiamos a SES (con algo de optimización de nuestro lado, pero no mucho), y pudieron despejar una campaña en menos de una hora.

+0

Escuché sobre eso, pero para crear el contenido de cada correo electrónico necesito extraer datos de diferentes tablas en mi databse, además tengo un cronjob que envía los correos electrónicos automáticamente; ¿Puedo hacer eso usando MailChimp o Amazon SES? – multimediaxp

+0

Amazon SES, definitivamente. Básicamente puedes usarlo como un servidor de correo (más o menos). Mailchimp tiene una bonita API de descenso, pero no puedo recordar si te permite pasar contenido de mensaje o solo listas de usuarios (formas fáciles de averiguarlo). SES va a ser una opción más costosa, así que tal vez haya un buen correo masivo de media tierra para empezar. Y el programador cronjob no debería importar. Una secuencia de comandos es una secuencia de comandos, y la aplicación de correo masivo, sin embargo, se conecta, solo querrá credenciales igual que cualquier recurso. – Anthony

4

Desde el PHP manual:

Nota:

Vale la pena señalar que la función mail() no es adecuado para grandes volúmenes de correo electrónico en un bucle. Esta función abre y cierra un socket SMTP para cada correo electrónico, que no es muy eficiente. Para enviar grandes cantidades de correo electrónico, consulte los paquetes »PEAR::MailPEAR::Mail_Queue.

+1

¿Considerado usando 'Zend_Mail'? –

+0

PEAR es un marco ¿verdad? Sé que debería leer la documentación, pero tal vez me puede decir si para instalarlo necesito ejecutar comandos en la consola o simplemente puedo cargar los archivos y las carpetas a mi servidor. – multimediaxp

+0

Técnicamente puede hacerlo, sin embargo, si está utilizando un proveedor de alojamiento, la mayoría de ellos lo tienen instalado. – j08691

4

Intente utilizar PHPMailer. Lo usé para enviar unos 100 correos diarios todos los días sin ningún problema

+0

¡Gracias! cualquier enlace? No encontré un sitio web de PHPMailer. – multimediaxp

+0

http://phpmailer.worxware.com/? ¿Es este el – multimediaxp

+0

PHPMailer es mi biblioteca SMTP de elección. Solo tenga en cuenta que seguirá compartiendo recursos con el resto de PHP, al igual que el correo. Solo usa menos de esos recursos para hacer el trabajo. – Anthony

Cuestiones relacionadas