1. 定义和调用发送邮件异步任务
其实使用线程也可以作为一种方案,但刚好项目中使用到了celery所以可以一起配合使用
目录结构
2.注册发邮件的任务:main.py
在发送邮件的异步任务中,我们用到了Django的配置文件。
所以我们需要修改celery的启动文件main.py
。
在其中指明celery可以读取的Django配置文件。
最后记得注册新添加的email的任务
# celery启动文件
from celery import Celery
# 为celery使用django配置文件进行设置
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "you_project.settings")
# 创建celery实例
celery_app = Celery('celery_tasks')
# 加载celery配置
celery_app.config_from_object('celery_tasks.config')
# 自动注册celery任务
celery_app.autodiscover_tasks(['celery_tasks.sms', 'celery_tasks.email'])
3.启动Celery
$ celery -A celery_tasks.main worker -l info
4.调用发送邮件异步任务
# 生产者 -- 任务,函数
# 1. 这个函数 必须要让celery的实例的 task装饰器 装饰
# 2. 需要celery 自动检测指定包的任务
from django.core.mail import send_mail
from celery_tasks.main import app
@app.task
def celery_send_email(subject,message,from_email,recipient_list,html_message):
send_mail(subject=subject,
message=message,
from_email=from_email,
recipient_list=recipient_list,
html_message=html_message)
print('ok!!!')
if __name__ == '__main__':
email = '17688934166@163.com'
# subject, 主题
subject = '激活邮件'
# message, 邮件内容
message = ""
# from_email, 发件人
from_email = '<xxxx@163.com>'
# recipient_list, 收件人列表
recipient_list = ['17688934166@163.com']
verify_url = "http://www.xxxxxxx:8080/success_verify_email.html?token=%s"
# 4.2 组织我们的激活邮件
html_message = '<p>尊敬的用户您好!</p>' \
'<p>感谢您使用。</p>' \
'<p>您的邮箱为:%s 。请点击此链接激活您的邮箱:</p>' \
'<p><a href="%s">%s<a></p>' % (email, verify_url, verify_url)
celery_send_email.delay(subject,message,from_email,recipient_list,html_message)