确保联系表格电子邮件不会丢失(python)

时间:2009-01-12 16:33:03

标签: python email race-condition data-formats

我有一个联系表格的网站。用户提交姓名,电子邮件和消息,该网站通过电子邮件向我发送详细信息。

我的服务器偶尔会遇到电子邮件系统的问题,因此用户会收到错误,但这些联系方式会丢失。 (不要说:获得更好的服务器,任何服务器都可以随时关闭电子邮件,我们会收到很多提交。)

如果邮件发送功能返回错误代码,我想实现一个可以存储用户详细信息的系统。然后在每次进一步提交时,检查任何存储的提交,并尝试将它们发送给我。

但是如何存储数据?

我正在使用python所以我考虑使用shelve(单文件半数据库)。或者也许有人可以提出更好的数据格式? (我认为完整的数据库解决方案会有点过分。)

我用单一文件方法看到的问题是竞争条件:两个或多个同时失败的电子邮件会导致对数据文件进行两次编辑,从而导致数据损坏。

那该怎么办?多文件解决方案,文件锁定或其他什么?

3 个答案:

答案 0 :(得分:8)

当我们在环境中实施电子邮件发送功能时,我们会以分离的方式进行。因此,例如,用户将提交将存储在数据库中的数据。然后我们有一个单独的服务运行,查询数据库并发送电子邮件。这样,如果有任何电子邮件服务器问题,该服务将稍后再试,数据和用户信心永远不会丢失。

答案 1 :(得分:4)

尝试sqlite。它在标准库中有默认的python bindings,应该适用于有用的负载级别(或者我被告知)

答案 2 :(得分:2)

你可以按照建议使用sqlite。主要问题是:勒芒是如何“大量提交”的?我低于每秒几秒就可以了。否则,数据库文件将一直被锁定,您还有另一个问题。

但你可以保持简单,愚蠢和简单:将文件写入磁盘。 对于每次传递,文件都写在临时目录中(如果邮件服务器已关闭)。然后,您将向mailserver启动脚本添加几行,以读取目录并发送邮件。没有数据库,没有锁定问题,如果你使用一个设置了配额的目录(或一个固定大小的ramdisk),你不应该遇到任何问题。