您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關Django中怎么利用celery發送異步郵件,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
安裝依賴
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
當點擊發送郵件時,celery會把任務添加到redis 1庫中,郵箱發送完畢后,會在redis 2庫中顯示結果。
以上就是Django中怎么利用celery發送異步郵件,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。