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双向链表实现实例代码
Nov 21 Python
Python中的列表知识点汇总
Apr 14 Python
分享Python字符串关键点
Dec 13 Python
深入理解Django中内置的用户认证
Oct 06 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
对python pandas 画移动平均线的方法详解
Nov 28 Python
python编写softmax函数、交叉熵函数实例
Jun 11 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
Jun 24 Python
从python读取sql的实例方法
Jul 21 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 Python
Pytorch 使用tensor特定条件判断索引
Apr 08 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
Jun 11 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
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
双击滚屏-常用推荐
2006/11/29 Javascript
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
js获取时间精确到秒(年月日)
2016/03/16 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
2019/10/25 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
Python实现字典的key和values的交换
2015/08/04 Python
python 字典(dict)按键和值排序
2016/06/28 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
python 经典数字滤波实例
2019/12/16 Python
python路径的写法及目录的获取方式
2019/12/26 Python
python numpy数组复制使用实例解析
2020/01/10 Python
python如何操作mysql
2020/08/17 Python
乌克兰鞋类购物网站:Eobuv.com.ua
2020/11/28 全球购物
精伦电子Java笔试题
2013/01/16 面试题
七一建党日演讲稿
2014/09/05 职场文书
财务会计实训报告
2014/11/05 职场文书
2015欢度元旦标语口号
2014/12/09 职场文书
初中毕业生自我评价
2015/03/02 职场文书
个人年度总结报告
2015/03/09 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang