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删除nginx缓存文件示例(python文件操作)
Mar 26 Python
python使用PythonMagick将jpg图片转换成ico图片的方法
Mar 26 Python
在Python中操作文件之seek()方法的使用教程
May 24 Python
Python的Flask开发框架简单上手笔记
Nov 16 Python
Python复数属性和方法运算操作示例
Jul 21 Python
Python socket实现简单聊天室
Apr 01 Python
Python实现针对给定字符串寻找最长非重复子串的方法
Apr 21 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
python3.6环境安装+pip环境配置教程图文详解
Jun 20 Python
学python安装的软件总结
Oct 12 Python
python实现三壶谜题的示例详解
Nov 02 Python
python如何在word中存储本地图片
Apr 07 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缓存技术介绍
2006/11/25 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
js 数组克隆方法 小结
2010/03/20 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
运算符&&的三个不同层次
2013/04/07 Javascript
微信小程序 for 循环详解
2016/10/09 Javascript
微信小程序 地图定位简单实例
2016/10/14 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
Python对象转JSON字符串的方法
2016/04/27 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
django-rest-framework 自定义swagger过程详解
2019/07/18 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
Python流程控制常用工具详解
2020/02/24 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
《我的信念》教学反思
2014/02/15 职场文书
护理专科毕业自荐信范文
2014/04/21 职场文书
产品生产计划书
2014/05/07 职场文书
小学运动会班级口号
2014/06/09 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
材料员岗位职责范本
2015/04/11 职场文书
欠条范文
2015/07/03 职场文书
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server