2011-03-09 22 views
8

Sé cómo enviar correos electrónicos usando PHPmail. Pero, ¿y si necesito enviar muchos correos electrónicos?Cómo programar notificaciones por correo electrónico en php

Esto podría ser una "notificación" a los suscriptores del sitio cuando se publique un nuevo mensaje. Hacerlo directamente en el controlador de la página afectará seriamente el rendimiento y hará que la carga del navegador sea demasiado lenta. Entonces necesito hacer este trabajo en el "fondo".

¿Cómo puedo "programar" algo en PHP, en mi caso, enviar correos electrónicos? En C++, por ejemplo, crearía un hilo por separado, pero AFAIK no existe tal como multihilo en PHP.

Respuesta

8

Crear tarea de cron que envía correo electrónico en colas que haya guardado en una base de datos:

  1. Guardar un correo electrónico con toda la información en una base de datos.

  2. Use periódicamente un trabajo CRON (como cada media hora más o menos -depende de su proveedor de hosting y la cantidad de correos electrónicos que envíe) para tomar correos de la cola y enviarlos. A continuación, establezca un indicador sent en el correo electrónico en la base de datos, agregue la información de envío que desee (por ejemplo, hora, errores, encabezado, ...).

Asegúrese de romper los mensajes de correo electrónico a trozos y enviar con pausas para evitar problemas con anti-spam y anti-inundación protecciones de algunos servidores de correo electrónico. Algunas bibliotecas de correo tienen complementos para esto (como SwiftMailer).

3

Para programar tales cosas, es mejor utilizar cronjobs, esto se define en el servidor en lugar de en PHP. El cronjob puede, sin embargo, llamar a un script PHP para ser ejecutado.
Hacer esto con un cronjob tiene algunas ventajas porque no afectará (directamente) al rendimiento del usuario final y puede hacerlo funcionar en determinados momentos.

1

utilizo un proceso de fondo (un programa PHP se puede ejecutar desde la línea de comandos si tiene acceso al servidor a través de la CLI [interfaz de línea de comandos ]). El proceso comprueba una tabla MySql para que se envíen los correos electrónicos en cola.

En mi enfoque, el navegador no se usa para enviar correos electrónicos, sino solo para escribirlos en la tabla MySql.

1

Tenga todos sus datos de correo electrónico almacenados en una base de datos Mysql. La estructura de la tabla podría ser similar.

TO_EMAIL_ID | EMAIL_TYPE | EMAIL SUBJECT | EMAIL_CONTENT | PROCESADO | INSERT_TIME.

inserte todo el contenido de su correo electrónico en esta tabla. Y tiene un script php que obtiene datos de esta tabla y envía correos electrónicos en lotes, y elimina/marcas como procesados ​​los correos electrónicos que se envían. Digamos que el archivo es sendMailers.php Luego puede configurar un trabajo cron para ejecutar este archivo cada 5 minutos. ver http://www.foogazi.com/2006/12/07/understand-cron-jobs-in-5-minutes/

*/5 * * * * PATH_TO_PHP sendMailers.php 
2

Puede utilizar una tarea programada para ejecutar un script periódicamente y enviar las notificaciones pendientes.

Una alternativa sería iniciar otro proceso en segundo plano, usando algo como: exec('php send_notifications.php 1>/dev/null 2>1 &'); (observe las cosas al final).

0

Debe usar las tareas de programación en windows, o trabajos cron en sistemas operativos tipo Unix (es decir, linux).

Cuestiones relacionadas