2011-05-17 29 views
6

Tengo un formulario simple de registro de usuario con una casilla de verificación que permite a los usuarios recibir notificaciones diarias por correo electrónico si hubo actividad en alguno de sus proyectos ... al igual que Stack Overflow tiene un "Notify [email protected] diario de nuevas respuestas ".¿Cómo puedo enviar una notificación diaria por correo electrónico a los usuarios en PHP?

Mi pensamiento actual para implementar esto en un entorno LAMP es como sigue:

  1. En la base de datos de usuario, establezca un valor booleano si el usuario desea recibir un email diario.

  2. Si hay alguna actividad de proyecto, el proyecto se actualiza con la marca de tiempo actual.

  3. Cada noche (medianoche), se ejecuta un archivo PHP (probablemente a través de un trabajo cron) que escanea a través de la base de datos del proyecto para identificar qué proyectos tuvieron actividad ese día. Para los proyectos con actividad, se selecciona el nombre del propietario del proyecto y se escanea la tabla del usuario para verificar si el usuario desea recibir una notificación por correo electrónico a diario. Si es así, agréguelo a una lista de destinatarios; otra cosa, ignorar.

Preguntas/preocupaciones que tengo que agradecería alguna orientación sobre antes de empezar a aplicar:

  1. estoy en un entorno de alojamiento compartido. ¿Qué precauciones debo tomar al ser identificado erróneamente como correo basura por la empresa de alojamiento o por los servidores de correo recibidos?

  2. ¿Necesito "dividir" la lista de destinatarios (50 correos electrónicos a la vez) y enviar un correo electrónico a cada grupo? ¿Es esto tan simple como poner un sueño (30); entre cada llamada al correo()?

  3. Estoy usando el framework CodeIgniter y el cron job llamará a la función apropiada en un controlador para ejecutar esto a la medianoche. ¿Cómo limito las llamadas solo desde el trabajo cron para evitar que algún usuario no autorizado llame a esta función desde el navegador?

Thanks.

Respuesta

1
  1. Si cambia el encabezado "De" en php, asegúrese de cambiar al dominio que está alojado en ese servidor. Parece sospechoso cuando los servidores de b.com envían mail @ a.com.

  2. Enviaría los correos electrónicos individualmente foreach ($Users as $User)..., ya que esto le permite personalizar los contenidos del correo electrónico. Incluso si no necesita personalizar los correos electrónicos ahora, es posible que desee hacerlo más adelante, y la compatibilidad ya estará allí cuando lo necesite.

  3. Primero, almacenaba el script fuera de la raíz web. No estoy seguro de si CodeIgniter te permitirá hacer esto, pero no es necesario que Apache lo ejecute. A Cron no le importa dónde está almacenado el script. Además, he comprobado la hora en que se ejecuta el script. Si no es medianoche, no elimine los correos electrónicos. Además, puede mantener un registro y también verificar para asegurarse de que los correos electrónicos no hayan sido enviados ese día antes del envío.

+0

Re. # 3: supongo que si mantengo un archivo PHP arriba de webroot, CodeIgniter realmente no debería importar. Puedo hacer que el cron se sitúe también sobre webroot y llame al script PHP que escanea la base de datos, crea una lista de destinatarios y luego envía correos electrónicos a cada usuario a medianoche. ¿No? – zee

+0

Cron se ejecuta como un programa de Linux, por lo que tiene acceso a cada archivo que el usuario al que ejecuta tiene acceso. –

1

1) Comience con un registro SPF y DKIM si puede que deja servidores de correo saben esperar de correo electrónico de los servidores

2) En primer lugar, usted necesita para poner los destinatarios en el campo CCO para que no cada usuario tiene las direcciones de correo electrónico de otros 49 usuarios en su sistema. Un paso más es hacer cada correo electrónico por separado, colocando solo al destinatario en el campo TO. Este enfoque también permite a su para adaptar cada correo electrónico al usuario (tal vez poniendo en "Hola [Nombre]".

3) Tener el algo tarea cron como esto wget http://localhost/send-emails

Luego, en la secuencia de comandos, compruebe $_SERVER y asegúrese de que solo permite solicitudes desde 127.0.0.1

1

Acerca de la tercera pregunta: Puede usar un archivo .htaccess para evitar el acceso a esa página específica o puede llamar al script en cron con un parámetro de línea de comando y verificar para esa variable en $argv.

1

1) El registro SPF es lo más importante. Utilice el correo electrónico del dominio para que sea [email protected], donde whatever.com tenga los registros SPF establecidos correctamente.

2) Siempre es bueno acelerar el correo electrónico, especialmente cuando se inicia. Debe verificar sus políticas de servidores compartidos, que normalmente son 200-500/hora. Calcule cuántos segundos llega a. Por ejemplo, 300/hora es 1 cada 12 segundos. Después de algunas semanas de enviar buenos correos electrónicos, debería estar bien para enviar cantidades mayores.

3) Puede tener el archivo cron fuera de la raíz web o limitar el acceso a través de .htaccess u otro método.

+0

Re. # 1: estoy en una cuenta de alojamiento compartido y tengo algunos de mis dominios alojados en él (y estoy seguro de que muchos otros también residen en la misma máquina). Si configuro el registro SPF para mydomain.com en DNS, ¿sería suficiente? ¿Es un SPF registrar una de las cosas que un servidor de correo receptor busca para decidir si un correo electrónico es correo no deseado o no? – zee

+0

Es mejor obtener una IP dedicada, que generalmente es de unos pocos dólares al mes o, a veces, gratis según el paquete, pero si no lo desea, normalmente está bien establecer el registro de SPF correctamente. SPF es un factor importante en la configuración de spam. Aún debe asegurarse de que su contenido sea legítimo y de que no esté utilizando demasiadas palabras clave/frases de correo no deseado, pero asegurarse de que el registro SPF coincida con el envío del servidor es una gran parte al decirle al servidor de correo receptor que el correo es legítimo. – fanfavorite

Cuestiones relacionadas