一个可重用的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

其他文档

将被添加。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
我可以用C++代码使用java代码吗?   java使用JSR303在派生类中提供更具体的约束   java在这个查找唯一路径数算法中我做错了什么?   java如何为2个不同的服务提供商使用2个不同的SSL证书?   java在Gridview上绘制文本   java使用连接for循环构建字符串名   java StringBuilder拆分无法处理某些文件   java事件关注EditText   Java Web Start“找不到URL的缓存资源”   java程序从命令行运行的速度比在Eclipse中慢   java为什么HttpServletRequest会截断#字符上的url输入?   java自定义折叠工具栏平滑标题大小调整   使用Mockito对安卓 java中调用另一个静态函数的函数进行单元测试   http在java客户机中使用cachecontrol头   java如何使用。是否使用Delimiter从输入文件中排除标点符号和数字?   使用上下文作为参数/参数的java   java更有效地从Jar中提取文件   java为多个JButton提供相同的actionListener