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 相关文章推荐
简单介绍Python2.x版本中的cmp()方法的使用
May 20 Python
让Python代码更快运行的5种方法
Jun 21 Python
Python的Django框架中的URL配置与松耦合
Jul 15 Python
Python使用sorted排序的方法小结
Jul 28 Python
python如何通过twisted实现数据库异步插入
Mar 20 Python
python实现判断一个字符串是否是合法IP地址的示例
Jun 04 Python
python用插值法绘制平滑曲线
Feb 19 Python
Python获取航线信息并且制作成图的讲解
Jan 03 Python
简单了解python高阶函数map/reduce
Jun 28 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
基于django micro搭建网站实现加水印功能
May 22 Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 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处理json时中文问题的解决方法
2011/04/12 PHP
php常用Stream函数集介绍
2013/06/24 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
jquery focus(fn),blur(fn)方法实例代码
2011/12/16 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
浅谈JavaScript的内置对象和浏览器对象
2016/06/03 Javascript
JS实现六位字符密码输入器功能
2016/08/19 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
Python3里的super()和__class__使用介绍
2015/04/23 Python
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
微信跳一跳自动运行python脚本
2018/01/08 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
Python爬取数据并实现可视化代码解析
2020/08/12 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
专营店会计助理岗位职责
2013/11/29 职场文书
医学生就业推荐表自我鉴定
2014/03/26 职场文书
超市仓管员岗位职责
2014/04/07 职场文书
教师求职信
2014/06/17 职场文书
社区服务活动小结
2014/07/08 职场文书
单位授权委托书范文
2014/08/02 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
节水宣传标语口号
2015/12/26 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python