¿Es php mail () una buena opción para el envío masivo de correos?

Estoy creando un sistema, en el que se enviará periódicamente una lista de miles de correos electrónicos. Sé que la función mail() en PHP es bastante pesada, especialmente si lo llamo muchas veces simultáneamente.

Aproximadamente la forma en que funciona mi sistema, 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 serie de 25.

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

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

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

    Mire la respuesta de j08691 con respecto al rendimiento, pero otros problemas con el uso de mail() para este propósito incluyen:

    1. Escalabilidad (llegará a un muro que ningún servidor SMTP puede manejar eventualmente, y ya lo está pensando)

    2. Integridad: es mucho más probable que te marquen como mail no mail cuando envíes tu propio correo masivo, especialmente si usas el mail ya que utiliza el mail local.

    3. Costo / Beneficio y ROI: los confiables masajeadores lo hacen bien y por una tarifa competitiva. En algún momento, usted se está pagando menos por hora para mantener su servidor de correo cuando falla, saliéndose de las listas negras, escribiendo el diseño del correo electrónico a mano, el mantenimiento general, etc., de lo que pagaría por el servicio de correo masivo.

    En general, el gran problema es que tienes que hacer todo el trabajo por ti mismo y es probable que te marquen como SPAM con el beneficio de no pagar por un servicio que podrá enviar cientos de correos electrónicos por segundo en lugar de 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 correos masivos): tuvimos un cliente que envió más de 100 mil correos electrónicos por campaña, con 1 a 3 campañas por día como mínimo. Comenzaron a quejarse de que los clientes recibían correos electrónicos sobre “ofertas diarias” con 2 días de retraso. No fue porque la biblioteca de Mailer fuera lenta (incluso esta aplicación evitó el uso de mail simple), era porque no podía estar segura de enviar todos los correos electrónicos para cada campaña antes de que el correo electrónico fuera irrelevante. Los cambiamos a SES (con algunas optimizaciones en nuestro extremo, pero no mucho), y pudieron borrar una campaña en menos de una hora.

    Del manual de PHP :

    Nota:

    Vale la pena señalar que la función de correo () no es adecuada 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, lo cual no es muy eficiente.

    Para el envío de grandes cantidades de correo electrónico, consulte los paquetes » PEAR :: Mail y» PEAR :: Mail_Queue .

    Trate de usar PHPMailer. Lo usé para enviar alrededor de 100 correos todos los días sin ningún problema.