Django集成celery發(fā)送異步郵件實(shí)例
安裝依賴(lài)
pip install django-celery-beat pip install django-celery-email pip install celery pip install msgpack-python pip install msgpack
在settings文件中配置
添加app應(yīng)用到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 # 您的郵箱號(hào) DJANGO_EMAIL_HOST_PASSWORD=你的郵箱密碼 DJANGO_DEFAULT_FROM_EMAIL=默認(rèn)發(fā)送的郵箱號(hào) #CELERY CELERY_BROKER_URL=redis://127.0.0.1:6379/1 #使用redis 1作為消息代理 CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/2 #把任務(wù)結(jié)果放在redis2庫(kù)中
添加配置項(xiàng):
# 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"
)
添加郵箱配置項(xiàng):
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')
編寫(xiě)celery文件
在項(xiàng)目配置的目錄下新增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("你的項(xiàng)目名")
# 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就會(huì)自動(dòng)搜索到添加到任務(wù)中
@celery_app.task()
def send_activity_verify_email():
"""異步發(fā)送新訂單郵件"""
title = '[學(xué)時(shí)通] 您有一個(gè)新活動(dòng)等待審核'
message = '您有一個(gè)新活動(dòng)等待審核,請(qǐng)進(jìn)入學(xué)時(shí)通管理系統(tǒng)查看'
send_mail(title, message=message, from_email=settings.DEFAULT_FROM_EMAIL,
recipient_list=settings.EMAIL_RECIPIENT_LIST)
啟動(dòng)celery
來(lái)到項(xiàng)目目錄下:
執(zhí)行以下命令
其中config為我的項(xiàng)目配置目錄,config.celery_app指我項(xiàng)目配置目錄下的celery_app文件
$ /usr/local/python3/bin/celery -A config.celery_app worker -l info

當(dāng)點(diǎn)擊發(fā)送郵件時(shí),celery會(huì)把任務(wù)添加到redis 1庫(kù)中,郵箱發(fā)送完畢后,會(huì)在redis 2庫(kù)中顯示結(jié)果。
以上這篇Django集成celery發(fā)送異步郵件實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
教你如何編寫(xiě)、保存與運(yùn)行Python程序的方法
這篇文章主要介紹了教你如何編寫(xiě)、保存與運(yùn)行Python程序的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
python+logging+yaml實(shí)現(xiàn)日志分割
這篇文章主要為大家詳細(xì)介紹了python+logging+yaml實(shí)現(xiàn)日志分割,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
python函數(shù)聲明和調(diào)用定義及原理詳解
這篇文章主要介紹了python函數(shù)聲明和調(diào)用定義及原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
Python的Asyncore異步Socket模塊及實(shí)現(xiàn)端口轉(zhuǎn)發(fā)的例子
asyncore模塊是封裝過(guò)的處理socket事件的模塊,采用異步的處理方式,這里我們講來(lái)講解Python的Asyncore異步Socket模塊及實(shí)現(xiàn)端口轉(zhuǎn)發(fā)的例子,需要的朋友可以參考下2016-06-06
Python中parsel兩種獲取數(shù)據(jù)方式小結(jié)
本文主要介紹了Python中parsel兩種獲取數(shù)據(jù)方式小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
使用FFmpeg來(lái)無(wú)損壓縮視頻文件的操作方法
FFmpeg是業(yè)內(nèi)有名的開(kāi)源圖像視頻處理程序,在許多視頻剪輯軟件、圖像處理軟件中,都使用的FFmpeg,還有比如OBS這樣的導(dǎo)播軟件里面也使用了FFmpeg,FFmpeg的功能十分強(qiáng)大,遠(yuǎn)不止視頻壓縮的功能,本文介紹使用FFmpeg來(lái)無(wú)損壓縮視頻文件的操作方法,感興趣的朋友一起看看吧2023-12-12
Python內(nèi)建類(lèi)型int源碼學(xué)習(xí)
這篇文章主要為大家介紹了Python內(nèi)建類(lèi)型int源碼學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python自動(dòng)修改電腦靜態(tài)IP地址的實(shí)現(xiàn)示例
通過(guò)Python自動(dòng)修改電腦的靜態(tài)IP地址可以極大地提高我們的工作效率,減少手動(dòng)修改IP地址帶來(lái)的錯(cuò)誤,本文就來(lái)介紹一下Python自動(dòng)修改電腦靜態(tài)IP地址的實(shí)現(xiàn)示例,感興趣的可以了解一下2023-11-11

