Acabo de escribir un conjunto de clases de envío masivo de correos para manejar enormes cantidades de correos electrónicos y analizar su contenido de acuerdo con los parámetros pasados. Si pruebo un correo electrónico en 1000 destinatarios aleatorios y 1000 remitentes aleatorios de mi base de datos, hasta el punto en que el script acierta en la parte send() (lo comenté por ahora), obtengo un rendimiento de alrededor de 2 segundos y 20 MB de memoria máxima , Lo cual es genial.PHP, sendmail y transportes: cómo acelerar el envío de correos
Sin embargo, si descomiento la parte de envío, el envío tarda 30 segundos. Esto es inaceptable, y me gustaría acelerarlo de alguna manera. Es evidente por las pruebas que la demora es causada por nada menos que la llamada $ mail-> send(), como si estuviera esperando que devuelva algo antes de continuar el ciclo y enviar el siguiente correo electrónico.
Lo que me pregunto es: ¿cómo puedo acelerar la llamada a send()? ¿Qué puedo hacer para que sea más rápido? Intenté usar dos métodos de envío:
- Zend Transporte SMTP, conectándose directamente al servidor y simplemente enviando. Esto demora 30 segundos por cada 1000 correos electrónicos.
- Sendmail vía Zend_Mail. Simplemente llame a la función de envío de Zend_Mail después de preparar cada correo electrónico. Esto toma 60 segundos.
Tenga en cuenta que hacer cola es definitivamente una opción, y la he incorporado a mis clases. Todo lo que se necesita es activar un cron y funciona como un hechizo. Pero me pregunto sobre el envío real y cómo acelerarlo. Por lo tanto, la llamada real send().
Corrígeme si me equivoco, pero una buena consulta de MySQL siempre superará la lectura de un archivo. El mecanismo de puesta en cola ya está hecho de cualquier manera, y no necesita ninguna mejora en este momento. Del mismo modo, nuestros correos electrónicos tienen cada uno un contenido diferente. Entonces, mientras enviamos 1000 correos electrónicos en 2 segundos, cada uno de ellos tiene un destinatario diferente, un remitente diferente y contenido diferente. Creo que este aspecto que muestra aquí puede ser útil solo en correos electrónicos masivos, ¿sí? Donde el contenido es idéntico en todos los mensajes? De lo contrario, la pregunta sigue siendo: ¿podría ser esto más rápido que hacer cola en la base de datos? Soy escéptico – Swader
¡Pensé que el problema es ENVIAR NO GENERAR! :) Puede haber algún servidor de correo optimizado, que pueda cargar masivamente gazzilions de mensajes. Anycase: sería más rápido que el método sendmail de php. El acceso directo al servidor debe ser muchas veces mayor que php (puede, por ejemplo, usar una conexión persistente). –
Hmmm, está bien. Un correo electrónico preparado podría guardarse fácilmente en el disco en formato eml y, a partir de ese momento, un script tomaría el relevo. Esto también podría servir decentemente como una cola alternativa. ¿Tiene algún ejemplo de esto de manera eficiente? Me encantaría echar un vistazo a algunos. – Swader