一个可重用的django应用程序,用于控制应用程序电子邮件的排队和发送
django_queue_mailer的Python项目详细描述
一个可重用的django应用程序,用于控制应用程序电子邮件的排队和发送。 关键用例是将电子邮件发送从请求中移出以加快速度 请求时间并帮助解决发送电子邮件、处理问题 电子邮件延迟和应用程序电子邮件通信日志。
这款应用程序最初是德里克·斯特格曼(derek stegelman)的Django Mail Queue和heavilly的叉子 灵感来自詹姆斯·陶伯的 django-mailer。
欢迎任何反馈、问题和建议。那样的话请 使用Bitbucket’s issues。
主要功能
- 电子邮件排队并在芹菜的帮助下作为异步任务发送 或者休伊,或者作为crontab作业调度程序。
- 使用自己的后端轻松集成到现有的应用程序中。
- 易于配置,可以使用不同的邮件后端作为django的smtp 使用Sea Cucumber的后端或Amazon SE。
安装
安装django_queue_mailer:
$ pip install django_queue_mailer
将以下内容添加到您的设置中.py:
# Add django_queue_mailer to INSTALLED_APPS INSTALLED_APPS = ( ... "django_queue_mailer", ... ) # Add django_queue_mailer's backend EMAIL_BACKEND = "django_queue_mailer.backend.DbBackend" # Setup email backend for sending queued emails DJANGO_QUEUE_MAILER_EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" # Or other backed as Sea Cucumber DJANGO_QUEUE_MAILER_EMAIL_BACKEND = "seacucumber.backend.SESBackend"
您需要创建必要的表。如果你使用 south,快跑 迁移:
$ python manage.py migrate django_queue_mailer
否则,普通的syncdb就可以了。使用 south用于数据库 强烈建议迁移。
$ python manage.py syncdb
基本用法
使用Django的“发送邮件”功能发送电子邮件并将其放入队列:
from django.core.mail import send_mail send_mail('Subject here', 'Here is the message.', 'from@example.com', ['to@example.com'], fail_silently=False)
或者,您可以使用队列模型对消息进行排队:
from django_queue_mailer.models import Queue new_message = Queue() new_message.subject = "Testing subject" new_message.to_address = "nobody@example.com, noone@example.com" new_message.bcc_address = "blindcopy@example.com" new_message.from_address = "hello@example.com" new_message.content = "Mail content" new_message.html_content = "<h1>Mail Content</h1>" new_message.app = "someapp" new_message.save()
使用可以发送排队的消息 Celery异步 任务。应用程序文件夹中的芹菜task.py示例:
from django_queue_mailer.models import Queue @celery.task def send_mail(): Queue.objects.send_queued()
Huey是一个完美的轻量级 芹菜替代品。使用多线程任务的示例, 定期或基于事件(需要时根据请求调用)。配置 tasks.py中的任务:
from huey.djhuey import task, periodic_task, crontab from django.core.management import call_command @task() @periodic_task(crontab(minute='*/2')) def send_mail(): call_command('send_queued_messages')
最简单的解决方案是运行crontab作业,使用 crontab -e:
*/2 * * * * path-to-virtualenv/bin/python path-to-app-folder/manage.py send_queued_messages
其他文档
将被添加。