Django集成celery发送异步邮件实例


Posted in Python onDecember 17, 2019

安装依赖

pip install django-celery-beat
pip install django-celery-email
pip install celery
pip install msgpack-python
pip install msgpack

在settings文件中配置

添加app应用到installed_apps中

"djcelery_email",
 "django_celery_beat"

修改.env文件配置:

#邮箱后端,使用celery email
DJANGO_EMAIL_BACKEND=djcelery_email.backends.CeleryEmailBackend
DJANGO_EMAIL_HOST=smtp.qq.com
DJANGO_EMAIL_HOST_USER=xxx@qq.com # 您的邮箱号
DJANGO_EMAIL_HOST_PASSWORD=你的邮箱密码
DJANGO_DEFAULT_FROM_EMAIL=默认发送的邮箱号

#CELERY
CELERY_BROKER_URL=redis://127.0.0.1:6379/1 #使用redis 1作为消息代理
CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/2 #把任务结果放在redis2库中

添加配置项:

# Celery
# ------------------------------------------------------------------------------
if USE_TZ:
 # http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-timezone
 CELERY_TIMEZONE = TIME_ZONE
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-broker_url
CELERY_BROKER_URL = env("CELERY_BROKER_URL")
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-result_backend
CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND')
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-accept_content
CELERY_ACCEPT_CONTENT = ["json", 'msgpack']
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-task_serializer
CELERY_TASK_SERIALIZER = "msgpack"
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-result_serializer
CELERY_RESULT_SERIALIZER = "json"
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#task-time-limit
# TODO: set to whatever value is adequate in your circumstances
CELERY_TASK_TIME_LIMIT = 5 * 60
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#task-soft-time-limit
# TODO: set to whatever value is adequate in your circumstances
CELERY_TASK_SOFT_TIME_LIMIT = 60
# http://docs.celeryproject.org/en/latest/userguide/configuration.html#beat-scheduler
CELERY_BEAT_SCHEDULER = "django_celery_beat.schedulers:DatabaseScheduler"


EMAIL_BACKEND = env(
 "DJANGO_EMAIL_BACKEND", default="djcelery_email.backends.CeleryEmailBackend"
)

添加邮箱配置项:

EMAIL_HOST = env('DJANGO_EMAIL_HOST', default="smtp.qq.com")
EMAIL_USE_SSL = env('DJANGO_EMAIL_USE_SSL', default=True)
EMAIL_PORT = env('DJANGO_EMAIL_PORT', default=465)
EMAIL_HOST_USER = env('DJANGO_EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = env('DJANGO_EMAIL_HOST_PASSWORD')
DEFAULT_FROM_EMAIL = env('DJANGO_DEFAULT_FROM_EMAIL')

编写celery文件

在项目配置的目录下新增celery_app.py文件

import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production")

app = Celery("你的项目名")

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object("django.conf:settings", namespace="CELERY")

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

在某app目录下新增tasks.py文件:

from django.conf import settings
from django.core.mail import send_mail

from config import celery_app

# 打上装饰器celery就会自动搜索到添加到任务中
@celery_app.task()
def send_activity_verify_email():
 """异步发送新订单邮件"""
 title = '[学时通] 您有一个新活动等待审核'
 message = '您有一个新活动等待审核,请进入学时通管理系统查看'
 send_mail(title, message=message, from_email=settings.DEFAULT_FROM_EMAIL,
    recipient_list=settings.EMAIL_RECIPIENT_LIST)

启动celery

来到项目目录下:

执行以下命令

其中config为我的项目配置目录,config.celery_app指我项目配置目录下的celery_app文件

$ /usr/local/python3/bin/celery -A config.celery_app worker -l info

Django集成celery发送异步邮件实例

当点击发送邮件时,celery会把任务添加到redis 1库中,邮箱发送完毕后,会在redis 2库中显示结果。

以上这篇Django集成celery发送异步邮件实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python学习笔记(一)(基础入门之环境搭建)
Jun 05 Python
Python解决鸡兔同笼问题的方法
Dec 20 Python
Python中__name__的使用实例
Apr 14 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
Python创建xml文件示例
Mar 22 Python
Python+OpenCV让电脑帮你玩微信跳一跳
Jan 04 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
Python装饰器基础概念与用法详解
Dec 22 Python
为什么黑客都用python(123个黑客必备的Python工具)
Jan 31 Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 Python
python学生信息管理系统实现代码
Dec 17 #Python
pymysql模块的操作实例
Dec 17 #Python
Django异步任务线程池实现原理
Dec 17 #Python
python 求10个数的平均数实例
Dec 16 #Python
python 经典数字滤波实例
Dec 16 #Python
Python实现把类当做字典来访问
Dec 16 #Python
python中p-value的实现方式
Dec 16 #Python
You might like
SONY ICF-F10中波修复记
2021/03/02 无线电
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
WordPress中使主题支持小工具以及添加插件启用函数
2015/12/22 PHP
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
客户端js性能优化小技巧整理
2013/11/05 Javascript
jQuery实现ichat在线客服插件
2014/12/29 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
python中的set实现不重复的排序原理
2018/01/24 Python
在VS Code上搭建Python开发环境的方法
2018/04/06 Python
python把转列表为集合的方法
2019/06/28 Python
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
Ajax请求总共有多少种Callback
2016/07/17 面试题
优秀求职自荐信怎样写
2013/12/18 职场文书
个人现实表现材料
2014/02/04 职场文书
向领导表决心的话
2014/03/11 职场文书
教学改革实施方案
2014/03/31 职场文书
无婚姻登记记录证明
2015/06/18 职场文书
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL