Pregunta

Tengo un sitio web con un formulario de contacto. El usuario envía su nombre, correo electrónico y mensaje, y el sitio me envía los detalles por correo electrónico.

Muy ocasionalmente, mi servidor tiene un problema con su sistema de correo electrónico, por lo que el usuario recibe un error y esos datos de contacto se pierden. (No diga: obtenga un mejor servidor, cualquier servidor puede tener un correo electrónico inactivo de vez en cuando y recibimos muchos envíos).

Me gustaría implementar un sistema que pudiera almacenar los detalles del usuario si la función de envío de correo vuelve con un código de error. Luego, en cada envío adicional, verifique si hay envíos almacenados e intente enviármelos.

¿Pero cómo almacenar los datos?

Estoy usando Python, así que pensé en usar shelve (semi archivo único -base de datos). ¿O tal vez alguien podría sugerir un mejor formato de datos? (Creo que una solución de base de datos completa sería exagerada).

El problema que veo con un enfoque de archivo único es condiciones de carrera : dos o más correos electrónicos fallidos al mismo tiempo causarían dos ediciones en el archivo de datos que resultarían en corrupción de datos.

Entonces, ¿qué hacer? ¿Solución de varios archivos, bloqueo de archivos u otra cosa?

¿Fue útil?

Solución

Cuando implementamos la funcionalidad de envío de correo electrónico en nuestro entorno, lo hacemos de forma desacoplada. Entonces, por ejemplo, un usuario enviaría sus datos que se almacenarían en una base de datos. Luego tenemos un servicio separado que se ejecuta, consulta la base de datos y envía correos electrónicos. De esa forma, si alguna vez hay problemas con el servidor de correo electrónico, el servicio volverá a intentarlo más tarde, los datos y la confianza del usuario nunca se perderán.

Otros consejos

pruebe sqlite . Tiene enlaces de python predeterminados en la biblioteca estándar y debería funcionar para un nivel útil de carga. (o eso me dicen)

Podría, como se sugiere, usar sqlite para esto. La pregunta principal es: ¿Cómo es el hombre " muchas presentaciones " ;? Si está por debajo de unos pocos por segundo, esto funcionaría. De lo contrario, el archivo de la base de datos estará bloqueado todo el tiempo y tendrá otro problema.

Pero también podría mantenerlo simple, estúpido y simple: escribir archivos en el disco. Por cada sumisión se escribe un archivo en un directorio temporal (si el servidor de correo está inactivo). Luego agrega algunas líneas al script de inicio del servidor de correo que lee el directorio y envía correos. Sin bases de datos, sin problemas de bloqueo y si utiliza un directorio para el que se establece una cuota (o un disco RAM con tamaño fijo) no debería tener ningún problema.

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