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中实现对list做减法操作介绍
Jan 09 Python
怎样使用Python脚本日志功能
Aug 14 Python
详解Python中的动态属性和特性
Apr 07 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
Django如何使用第三方服务发送电子邮件
Aug 14 Python
用python爬取历史天气数据的方法示例
Dec 30 Python
如何通过python实现人脸识别验证
Jan 17 Python
python argparse传入布尔参数false不生效的解决
Apr 20 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 Python
python Xpath语法的使用
Nov 26 Python
Django实现drf搜索过滤和排序过滤
Jun 21 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
Jun 22 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中如何定义和使用常量
2013/02/28 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
php多个字符串替换成同一个的解决方法
2013/06/18 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
网页javascript精华代码集
2007/01/24 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
浅谈时钟的生成(js手写简洁代码)
2016/08/20 Javascript
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
使用NestJS开发Node.js应用的方法
2018/12/03 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
详解如何利用Cython为Python代码加速
2018/01/27 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
Python中的self用法详解
2019/08/06 Python
python argparser的具体使用
2019/11/10 Python
pycharm导入源码的具体步骤
2020/08/04 Python
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
大学生自我鉴定评语
2014/01/27 职场文书
工地质量标语
2014/06/12 职场文书
信息员培训方案
2014/06/12 职场文书
调研汇报材料范文
2014/08/17 职场文书
珍惜资源的建议书
2014/08/26 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
升学宴学生答谢词
2015/01/05 职场文书
装修公司管理制度
2015/08/05 职场文书
关于JavaScript轮播图的实现
2021/11/20 Javascript