Django / Python:电子邮件回复已更新到站点[关闭]
Posted
技术标签:
【中文标题】Django / Python:电子邮件回复已更新到站点[关闭]【英文标题】:Django/Python: email reply is updated to site [closed] 【发布时间】:2012-07-08 17:41:29 【问题描述】:我目前正在开发的 Django 网站会在内容更新时发送电子邮件。
我想添加的一个功能是用户可以回复这些邮件,即评论某个主题。此回复随后会在页面上显示更新。
解决这个问题的好方法是什么?有没有可以放入的模块?
【问题讨论】:
【参考方案1】:首先,您需要能够接收邮件并在这样做时调用 python 函数。有多种方法可以做到这一点:
使用Python内置的poplib定期检查邮箱 一些虚拟主机,尤其是 Webfaction,允许您在收到邮件时自动调用 python 脚本,通过他们称为 mail2script 的东西 其他主机推荐使用第三方服务,如Mailgun 或Postmark。真的,这取决于您的需求。一旦您收到邮件并能够在此事件中调用 python 脚本,就可以简单地将注释添加到 Django 模型中的正确线程。
但是,在考虑构建此功能时,您还应该考虑使其更安全的方法(众所周知,电子邮件很容易伪造) - 您不希望随机的人能够像其他人一样发布 cmets。这并不是那么容易做到的,但唯一的电子邮件回复 ID 是一种相当直接的方式(但绝不保证安全)。
【讨论】:
【参考方案2】:我在从事类似项目时遇到的一些基本问题,以防有任何帮助:
发送电子邮件:我开始在子进程中使用 Django 的 send_mail
和 send_mass_mail
,但我现在切换到 django-mailer 和 cron 条目,以便我们能够正确管理邮件队列并拥有发送内容的记录等。您可能会发现来自 Pinax 项目的其他应用很有用:http://pinaxproject.com/ecosystem/,例如用于通知的应用或用于电子邮件确认的应用。
获取电子邮件:我正在使用 poplib,正如 @herman-schaaf 所建议的那样,加上一个 cron 条目来每隔几分钟检查一次邮件。我会记录使用其 UIDL 下载的所有电子邮件,以便检查它们是否已被处理。
注意循环:您可能希望使用与 From 地址不同的 Return-Path。为了防止泛滥,我还设置了检查以阻止任何用户在单次迭代中提交超过 x 封邮件,或者每次迭代超过 n 封邮件。
日期和时间:您可能还需要解析电子邮件中的发送日期以跟踪插入,而不是使用 datetime.now()
或 timezone.now()
,因为您可以接收发送数分钟的电子邮件前。我猜你将不得不像我们一样处理时区。当它可用时,我们切换到 Django 版本 1.4,它比以前的版本 (see release notes about this here) 更容易处理时区感知日期时间,并将其与存储感知日期时间的 PostgreSQL 结合使用。 Pinax 也有一个应用程序来简化用户时区本地化的实施。
伪造电子邮件:在我们的案例中,由于应用程序的封闭性,我们并不担心伪造电子邮件,但我们会通知票证中的所有参与者任何更新,包括通知创建者创建本身,因此每个人至少可以注意到他/她是否要被冒充(您可以在通知电子邮件中包含管理员的电子邮件地址,用户可以报告任何可疑活动)。
【讨论】:
【参考方案3】:查看 django.core.mail 模块 here...
from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', 'from@example.com',
['to@example.com'], fail_silently=False)
或查看此帖子here...
【讨论】:
谢谢,但我已经从我的 Django 应用程序发送邮件了。这里的问题是让用户对这些邮件的回复出现在网站上。以上是关于Django / Python:电子邮件回复已更新到站点[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 django 中使用 gmail smtp 更改回复和返回路径标头
把outlook express 邮箱设置成收到邮件自动回复对方邮件已收到。