一个可重用的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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c8bd9298759b81736310cddcac65afb8a424da57342fd522182e200403ad7713 |
|
MD5 | 782310f7519fd92be05e05848af5e882 |
|
BLAKE2b-256 | 61ae77227f270d99645448427eff544a7acd6fa2e9ac6f2fb2017fffecedb739 |