跳转到主要内容

一个可重用的Django应用,用于排队发送电子邮件(从未维护的APSL/django-mailer-2派生而来)

项目描述

django-mailer-2是异步的,因此除了将邮件放入队列外,您还需要定期通知它清除队列并实际发送邮件。

后者通过命令扩展完成。

将邮件放入队列(Django 1.2或更高版本)

在settings.py中,配置Django的EMAIL_BACKEND设置如下

EMAIL_BACKEND = ‘django_mailer.smtp_queue.EmailBackend’

如果您不需要消息优先级支持,可以像在Django中通常那样调用send_mail

send_mail(subject, message_body, settings.DEFAULT_FROM_EMAIL, recipients)

如果您需要优先级消息,请创建一个EmailMessage实例,并在headers参数中指定{‘X-Mail-Queue-Priority’: ‘<value>’},其中<value>是以下之一

‘now’ - 不排队,立即发送 ‘high’ - 高优先级 ‘normal’ - 标准优先级 - 这是默认值。 ‘low’ - 低优先级

如果您未指定优先级,则消息将以“normal”优先级发送。

将邮件放入队列(Django 1.1或更早版本)

由于django-mailer当前使用与Django核心邮件支持相同的函数签名,您可以在代码中这样做

# favour django-mailer-2 but fall back to django.core.mail
from django.conf import settings

if "django_mailer" in settings.INSTALLED_APPS:
    from django_mailer import send_mail
else:
    from django.core.mail import send_mail

然后像在Django中通常那样调用send_mail

send_mail(subject, message_body, settings.DEFAULT_FROM_EMAIL, recipients)

此外,您可以通过调用发送所有指定的管理员

mail_admins(subject, message_body)

或通过调用定义在MANAGERS设置中的所有经理

mail_managers(subject, message_body)

命令扩展

在您的INSTALLED_APPS中添加邮件发送器后,您将可以运行四个新的manage.py命令

  • send_mail将清除当前的消息队列。如果有任何失败,它们将被标记为延迟,并且不会再次尝试通过send_mail

  • retry_deferred将任何延迟的邮件移回正常队列(因此它将在下一个send_mail时再次尝试)。

  • cleanup_mail将删除X天前创建的邮件(默认为90天)。

  • status_mail此命令的目的是允许像nagios这样的系统

    能够查询队列的状态。它返回一个字符串,可以解析为(?P<queued>\d+)/(?P<deferred>\d+)/(?P<seconds>\d+)

您可能希望通过cron定期设置这些

* * * * * (cd $PROJECT; python manage.py send_mail >> $PROJECT/cron_mail.log 2>&1)
0,20,40 * * * * (cd $PROJECT; python manage.py retry_deferred >> $PROJECT/cron_mail_deferred.log 2>&1)
0 1 * * * (cd $PROJECT; python manage.py cleanup_mail --days=30 >> $PROJECT/cron_mail_cleanup.log 2>&1)

这尝试每分钟发送一次邮件,在失败的每20分钟进行重试,并且每天运行一次清理任务,清理所有30天前创建的消息。

manage.py send_mail使用锁文件,以防清除队列所需时间超过调用manage.py send_mail之间的间隔。

请注意,如果您的项目位于virtualenv中,您还必须从virtualenv中执行此命令。当然,这也适用于使用cron执行它的情况。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源分布

django-mailer-2-1.3.3.tar.gz (23.7 kB 查看哈希值)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面