異步發送郵件(celery)

包結構:
在這裏插入圖片描述
依賴包:
redis3.4.1
celery
4.4.1
eventlet==0.25.1

首先創建一個celery_tasks的python包,在celery_tasks的__init__.py中配置
drugstore是你項目的主目錄名稱,即有settings.py文件的包名(這個需要改爲你自己的)


from celery import Celery

import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "drugstore.settings")
django.setup()
# 實例化一個celery
app = Celery('celery_tasks.tasks', broker='redis://127.0.0.1:6379/1')#設置redis爲broker(任務隊列)

然後創建task.py(首先你郵箱發送是可以正常發送的,settings中配置好)

from drugstore.settings import EMAIL_HOST_USER
from django_redis import get_redis_connection
from django.core.mail import send_mail
from . import app

import random

@app.task
def send_email(email):
    title = '驗證碼'
    num = random.randint(1000,9999)
    redis_cli = get_redis_connection('vcode')
    redis_cli.set(f'email-{email}', num, ex=120)
    content = f'驗證碼爲: {num},有效時間爲120s,歡迎使用'
    send_mail(title, content , EMAIL_HOST_USER,[email], fail_silently=False)

啓動任務(eventlet是因爲在windows下,celery啓動需要依賴eventlet,mac的話就不需要)
celery -A celery_tasks.tasks worker -l info -P eventlet

這樣就成功了
在這裏插入圖片描述
注意:如果你報
在這裏插入圖片描述
在這裏插入圖片描述
這樣的話就是你celery跟你redis版本不兼容,更改好版本兼容就完成了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章