我目前正在开发的 Django 站点会在内容更新时发送电子邮件。
我想添加的一个功能是用户可以回复这些邮件,即评论某个主题。然后,此回复会在页面上显示为更新。
解决这个问题的好方法是什么?有没有可以插入的模块?
首先,您需要能够接收邮件并在这样做时调用 python 函数。有多种方法可以做到这一点:
一旦您收到邮件并能够在此事件中调用 python 脚本,只需将注释添加到 Django 模型中的正确线程即可。
但是,在考虑构建此功能时,您还应该考虑使其更安全的方法(众所周知,电子邮件很容易伪造)-您不希望随机的人能够像其他人一样发表评论。这并不是那么容易做到的,但唯一的电子邮件回复 ID 是一种相当直接的方式(但绝不保证安全)。
我在从事类似项目时遇到的一些基本问题,以防有任何帮助:
发送电子邮件:我开始使用 Djangosend_mail
和send_mass_mail
子进程,但我现在切换到django-mailer和 cron 条目,以便我们能够正确管理邮件队列并记录发送的内容等。您可以从Pinax项目很有用:http: //pinaxproject.com/ecosystem/,比如用于通知的一个或另一个用于电子邮件确认的。
获取电子邮件:正如@herman-schaaf 所建议的那样,我正在使用 poplib,加上一个 cron 条目以每隔几分钟检查一次邮件。我会记录使用他们的 UIDL 下载的所有电子邮件,以便检查它们是否已经被处理。
注意循环:您可能希望使用与 From 地址不同的 Return-Path。为了防止泛滥,我还设置了检查以阻止任何用户在单次迭代中提交超过x封邮件,或者每次迭代超过n封邮件。
日期和时间:您可能还希望从电子邮件中解析发送日期以跟踪插入,而不是使用datetime.now()
或timezone.now()
因为您可以接收几分钟前发送的电子邮件。我猜你将不得不像我们一样处理时区。我们在 Django 版本 1.4 可用时切换到它,它比以前的版本更容易处理时区感知日期时间(请参阅此处的发布说明),并将其与存储感知日期时间的 PostgreSQL 结合使用。Pinax 还有一个应用程序来简化用户时区本地化的实施。
伪造电子邮件:在我们的案例中,由于应用程序的封闭性,我们并不担心伪造电子邮件,但我们会通知所有更新票证的参与者,包括创建者收到创建本身的通知,因此每个人至少可以注意到如果他/她被冒充(您可以在通知电子邮件中包含管理员的电子邮件地址,用户可以报告任何可疑活动)。