2011-12-14 50 views
5

Actualmente estoy creando un sistema de cita que funciona así:¿Cómo crear una cola de correo electrónico en PHP?

El usuario envía los datos a través del formulario -> datos enviados a DB -> PDF generado -> correo electrónico enviado

soy usando la biblioteca htmlmimemail5 para hacer esto y el correo electrónico generado se envía a un intercambio de correo en un servidor separado en la red local.

Lamentablemente, el lado negativo de esto es que el script php tarda aproximadamente un minuto en ejecutarse por completo ya que el script espera la confirmación de que el correo electrónico ha sido enviado o ha fallado.

Entonces, lo que esperaba era que fuera posible tener una aplicación PHP separada que maneja todo el procesamiento del correo electrónico y significa que el usuario no tiene que esperar un minuto y puede pasar a la página siguiente donde pueden ver información etc.

Esta aplicación funcionaría felizmente en una cola de correo electrónico que se ha creado a partir de solicitudes de proceso de usuario y si la cola está vacía posiblemente se cerraría?

Supongo que debería ser algún tipo de cola de correo electrónico (como una cola de impresión).

Sin embargo, como soy un desarrollador de PHP junior y todos los demás desarrolladores están demasiado ocupados para cuidar niños, estoy completamente perdido y ni siquiera sé por dónde empezar o si esta es la estrategia correcta.

Más información:

  • Server es una cárcel BSD
  • Apache 2.2/PHP5

Todos los correos electrónicos internos y externos se enrutan a través de POSTINI, que añade un retardo también.

¡Todas las ideas o sugerencias son bienvenidas! :)

Respuesta

14

Sí, esto es bastante sencillo de implementar. En lugar de enviar de inmediato, guarde los datos del correo electrónico en una base de datos. Tener un script (ejecutando cada minuto a través de cron, o mejor aún, un daemonized PHP script) que toma los correos electrónicos en cola y los envía.

Asegúrese de tener indicadores en su base de datos para indicar el progreso, es decir, una columna para "enviar" y otra para "enviado", para que su secuencia de comandos sepa que no intente enviar repetidamente uno que ya está en proceso de envío.

+1

... y quizás algunos indicadores de "rebote suave/fuerte", "demorado", "no hay MX para el dominio", etc. – Piskvor

0

Ejecutar un MX local que solo recuperará de localhost, y se retransmitirá al MX "real".

+0

Crear y administrar la cola en PHP es posible, pero huele a reinventar la rueda. – Piskvor

Cuestiones relacionadas