2010-01-27 16 views
7

Estoy preparando un sitio web que enviará notificaciones por correo electrónico a los usuarios registrados. Según mi experiencia, sé que enviar correos electrónicos es un proceso algo doloroso para PHP, especialmente cuando hablamos de miles. Uno de mis sitios web envía correos electrónicos de vez en cuando a 1000-1500 personas. Se necesitan alrededor de 5 minutos para que PHP logre eso, por lo que lo ejecutamos de la noche a la mañana cuando la carga del servidor es la más baja. Estoy usando la función nativa mail() sin ningún SMTP. Esto funciona bien en un servidor dedicado, pero no soy un gran admirador de esta solución.Opinión sobre el envío de correos electrónicos de php

Deseo poder enviar montos similares en cualquier momento sin poner en riesgo la baja del servidor (y su inclusión en la lista negra).
He leído que la solución ideal es enviar correos electrónicos en lotes (digamos de 20) cada dos minutos desde un script que se desencadena por Cron. Esto me parece una idea realmente razonable, pero ... ¿Qué pasa si no tengo acceso a Cron? (No todos los proveedores de hosting dan acceso) y el sitio web no es lo suficientemente popular como para poder activar el script en la página ¿carga?

Insisto en usar mi servidor para hacer el envío de correos y no en ninguna solución externa.

PS. Encontré soluciones como estas: http://www.mywebcron.com/ pero ¿esto es bueno?


EDITAR

sólo para añadir:

  • estoy usando CodeIgniter,
  • velocidad a la que se envían mensajes de correo electrónico de mi servidor actual es por lo general 0.2SEC por correo electrónico.
+0

No es un envoltorio de CodeIgniter para SwiftMailer; está en la wiki, pruébalo: http://codeigniter.com/wiki/CI_SWIFT_MAILER/ – gyo

Respuesta

3

utilizar una clase PHP Mailer como PHPmailer o SwiftMailer, puede enviar correos SMTP directamente a través de esa manera, que será mucho más rápido. Y sí, el envío de grandes cantidades de correos electrónicos se realiza mejor a través de cron, por lo que envía correos X cada minuto. Evitará la sobrecarga del servidor de esa manera. Si no puede crear trabajos cron en su servidor, le sugiero que cambie su proveedor de alojamiento, de lo contrario el sitio web que ha vinculado es su única alternativa viable (pero depende de un tercero de esta manera, que no es realmente genial)

+0

Como una adición a la respuesta de Jan: si no puedes programar trabajos cron en tu servidor (como es el caso con el hosting más barato) soluciones), hay algunas alternativas de php puro para ejecutar trabajos programados: [phpjobscheduler] (http://www.phpjobscheduler.co.uk/) es una de esas alternativas. – Powertieke

2

Si no puede usar un trabajo periódico, es posible que desee buscar en una solución de colas como Gearman.

Lo que desea hacer es insertar todos sus correos electrónicos en la cola y tener 1 o más trabajadores de larga duración que elijan trabajos de la cola. Si desea agregar retraso en el sistema, simplemente agregue un descanso allí también.

Algunos pseudocódigo muy básico:

#wherever you launch the jobs from 
for each user 
    gearman.push(user.generateEmail()) 


#in your consumer script 
while true 
    message = gearman.consume() 
    message.send() 
    sleep(5) 
Cuestiones relacionadas