Django集成celery发送异步邮件实例
安装依赖
pipinstalldjango-celery-beat pipinstalldjango-celery-email pipinstallcelery pipinstallmsgpack-python pipinstallmsgpack
在settings文件中配置
添加app应用到installed_apps中
"djcelery_email", "django_celery_beat"
修改.env文件配置:
#邮箱后端,使用celeryemail 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#使用redis1作为消息代理 CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/2#把任务结果放在redis2库中
添加配置项:
#Celery #------------------------------------------------------------------------------ ifUSE_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:settowhatevervalueisadequateinyourcircumstances CELERY_TASK_TIME_LIMIT=5*60 #http://docs.celeryproject.org/en/latest/userguide/configuration.html#task-soft-time-limit #TODO:settowhatevervalueisadequateinyourcircumstances 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文件
importos fromceleryimportCelery #setthedefaultDjangosettingsmoduleforthe'celery'program. os.environ.setdefault("DJANGO_SETTINGS_MODULE","config.settings.production") app=Celery("你的项目名") #Usingastringheremeanstheworkerdoesn'thavetoserialize #theconfigurationobjecttochildprocesses. #-namespace='CELERY'meansallcelery-relatedconfigurationkeys #shouldhavea`CELERY_`prefix. app.config_from_object("django.conf:settings",namespace="CELERY") #LoadtaskmodulesfromallregisteredDjangoappconfigs. app.autodiscover_tasks()
在某app目录下新增tasks.py文件:
fromdjango.confimportsettings fromdjango.core.mailimportsend_mail fromconfigimportcelery_app #打上装饰器celery就会自动搜索到添加到任务中 @celery_app.task() defsend_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-Aconfig.celery_appworker-linfo
当点击发送邮件时,celery会把任务添加到redis1库中,邮箱发送完毕后,会在redis2库中显示结果。
以上这篇Django集成celery发送异步邮件实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。