Pregunta

Tengo una aplicación web escrita en PHP5.

La aplicación permite a los usuarios registrarse y me gustaría retrasar cuando se enviarán los diversos detalles, como contraseña y enlaces. Me gustaría que el correo electrónico que contenga esta información vaya a 24 h después de que un usuario se haya resistido.

¿Cómo puedo ejecutar la función que enviará el correo electrónico después de que haya pasado 24 horas?

¿Fue útil?

Solución

Dependería de cuán precisas deben ser las '24' horas, pero algo como el siguiente enfoque debería funcionar.

Cree una tabla para mantener los registros de los usuarios o adaptar una tabla existente para mantener un registrationTime columna. Hacer esta columna nullable DATETIME Lo usará para mantener el HH: MM del registro de usuarios. La tabla nueva (o modificada) también debe tener los datos relevantes para los correos electrónicos, o un identificador común para los usuarios, lo que permite seleccionar los datos correctos.

Finalmente, configuraría un trabajo cron para consultar la base de datos cada x mins y seleccione los usuarios que se registraron en y mins de 24 horas. Dónde x es la frecuencia que desea que se ejecute el trabajo y y Sería un cierto grado de tolerancia para cuán cerca de las 24:00 horas había transcurrido.

Para cualquier resultado, construiría y enviaría los correos electrónicos. Finalmente, establecería una bandera para demostrar que el usuario había sido tratado, una buena manera estaría configurando el registrationTime A NULL para todos los usuarios que han enviado el correo electrónico.

Aquí hay algunos enlaces para ayudarlo:

Compare el tiempo en SQL Server¿Cómo puedo comparar el tiempo en SQL Server?

Presentando Cronhttp://www.sitePoint.com/introducing-cron/

Otros consejos

Configuraría la mesa de la base de datos que maneja su cola de correo electrónico. Esta tabla puede tener una columna que especifica cuando cada fila, correspondiente a un correo electrónico, se colocó en cola. Puede tener un trabajo de Cron en funcionamiento, digamos cada hora más o menos, que verifica si las 24 horas han transcurrido.

email_type   | to             | data
--------------------------------------------------------------------------
registration | fred@stuff.com | {first_name: "Fred", last_name: "Stuff" }

Esta solución es flexible porque puede tener otros tipos de correos electrónicos que desea retrasarse por diferentes cantidades de tiempo. Puede agregar una columna que indique qué tipo de correo electrónico y su código maneja cada tipo de manera diferente.

Este cronjob correrá cada hora:

0 * * * * php check_mail_queue.php

Puede agregar una columna que indique si se ha enviado un correo electrónico o simplemente eliminar la fila. Además, si va a tener datos personalizados en cada correo electrónico, sea serializa la matriz, el hash, el diccionario, lo que sea, y almacene también en una columna en la tabla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top