在python中定时发送电子邮件提醒

时间:2010-04-28 19:06:45

标签: python mysql email reminders

我写了一个python脚本,允许用户输入消息,他的电子邮件和时间,他们希望发送电子邮件。这都存储在mysql数据库中。

但是,如何让脚本在上述时间和日期执行?它需要一个cron工作吗?我的意思是说在2月20日凌晨2点15分,脚本将在2:15的所有时间搜索数据库,然后发送这些电子邮件。但是2:16的电子邮件呢?

我正在使用提供的共享托管,因此无法继续运行脚本。

由于

3 个答案:

答案 0 :(得分:2)

如果你不能持续运行脚本,必须触发它,因此必须依赖你的操作系统内部。在unix环境中,一个cron作业,就像你自己说的那样,可以解决这个问题。

设置cron以运行脚本,并使脚本等待给定时间,然后继续运行并发送,直到下一封电子邮件超过此给定时间。然后让你的脚本为新的唤醒时间添加一个新的cron作业。

答案 1 :(得分:2)

看起来这个django应用程序仅适用于您的情况......

http://code.google.com/p/django-cron/

此外,您的设计似乎有点缺陷。如果它在2:15运行,您不希望只发送应该在2:15发送的电子邮件,而是发送过去应该发送的所有尚未发送的电子邮件。

您的数据库应该: A.发送后删除条目 要么 B.在数据库表上定义一列以存储是否已发送。然后你的逻辑应该使用那一列。

答案 2 :(得分:1)

每分钟左右的cronjob就可以做到。如果你正在考虑这个问题,你可能会想到两件事:

1 - 预计每分钟发送多少封电子邮件?如果您需要1秒钟发送电子邮件并且每分钟有100封电子邮件,您将无法完成队列。

2 - 如果一个工作在最后一个工作完成之前就会发生什么?小心不要两次发送电子邮件。您需要确保第一个流程结束(风险:您最终可以删除电子邮件),避免下一个流程启动(风险:第一个流程挂起整个队列)或使它们并行工作(风险:同步问题)。 / p>

如果您采用daramarak的建议 - 让脚本最后添加一个新的cron作业 - 如果发生一个错误,您将面临整个系统崩溃的风险。