5

我目前正在开发的 Django 站点会在内容更新时发送电子邮件。

我想添加的一个功能是用户可以回复这些邮件,即评论某个主题。然后,此回复会在页面上显示为更新。

解决这个问题的好方法是什么?有没有可以插入的模块?

4

3 回答 3

7

首先,您需要能够接收邮件并在这样做时调用 python 函数。有多种方法可以做到这一点:

  • 使用 Python 内置的poplib定期检查您的邮箱
  • 一些虚拟主机,尤其是 Webfaction,允许您在收到邮件时自动调用 python 脚本,通过他们称为 mail2script 的东西
  • 其他主机建议使用MailgunPostmark等第三方服务。这取决于你的需求,真的。

一旦您收到邮件并能够在此事件中调用 python 脚本,只需将注释添加到 Django 模型中的正确线程即可。

但是,在考虑构建此功能时,您还应该考虑使其更安全的方法(众所周知,电子邮件很容易伪造)-您不希望随机的人能够像其他人一样发表评论。这并不是那么容易做到的,但唯一的电子邮件回复 ID 是一种相当直接的方式(但绝不保证安全)。

于 2012-07-09T10:44:28.773 回答
2

我在从事类似项目时遇到的一些基本问题,以防有任何帮助:

发送电子邮件:我开始使用 Djangosend_mailsend_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 还有一个应用程序来简化用户时区本地化的实施。

伪造电子邮件:在我们的案例中,由于应用程序的封闭性,我们并不担心伪造电子邮件,但我们会通知所有更新票证的参与者,包括创建者收到创建本身的通知,因此每个人至少可以注意到如果他/她被冒充(您可以在通知电子邮件中包含管理员的电子邮件地址,用户可以报告任何可疑活动)。

于 2012-07-10T08:56:42.860 回答
1

在这里查看 django.core.mail 模块...

from django.core.mail import send_mail

send_mail('Subject here', 'Here is the message.', 'from@example.com',
    ['to@example.com'], fail_silently=False)

或在此处查看此帖子...

于 2012-07-09T10:34:33.953 回答