安装

pip install celery==4.2.0   # celery4.x支持django1.11以上版本 试了好几个版本 就4.2.0能发送成功

1.项目目录里新建一个celery的包celery_tasks

tasks.py中

from django.conf import settings
from django.core.mail import send_mail from celery import Celery # 导入celery包# 创建一个Celery类的实例对象
# Celery(名称(一般写包名), 中间人broke)
app = Celery('celery_tasks.tasks', broker='redis://192.168.199.130:6379/2') # 2 使用第二个数据库 # 定义任务函数
@app.task # 装饰 必不可少
def send_register_active_email(to_email, username, token):
# '''发送激活邮件'''
# 组织邮件信息
# 发送邮件
subject = '天天生鲜欢迎信息' # 邮件主题
# 邮件正文
# 注:此处html标签是不会被解析出来 会当作字符串输出
# message = '<h1>%s, 欢迎您成为天天生鲜注册会员</h1>请点击下面链接激活您的账户:<br/><a href="http://192.168.199.130:8000/user/active/%s">http://192.168.199.130:8000/user/active/%s</a>' % (username, token, token)
message = ''
sender = settings.EMAIL_FROM # 发件人
receiver = [to_email] # 收件人列表
html_message = '<h1>%s, 欢迎您成为天天生鲜注册会员</h1>请点击下面链接激活您的账户<br/><a href="http://192.168.199.130:8000/user/active/%s">http://192.168.199.130:8000/user/active/%s</a>' % (
username, token, token)
print(html_message)
# send_mail(邮件主题, 邮件正文, 发件人, 收件人列表, html_message=HTML格式的内容)
# send_mail(subject, message, sender, receiver)
send_mail(subject, message, sender, receiver, html_message=html_message)

2.在视图函数中导入tasks包就行

from celery_tasks.tasks import send_register_active_email  # 导入celery发邮件的方法

# 发送邮件
# delay(收件人, 用户名, token)
send_register_active_email.delay(email, username, token) # 把任务放入队列

3.启动redis

执行celery命令

celery -A celery_tasks.tasks worker -l info

报错

python@ubuntu:~/bj19/ttsx/dailyfresh$ celery -A celery_tasks.tasks worker -l info
Traceback (most recent call last):
File "/usr/local/bin/celery", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python3.5/dist-packages/celery/__main__.py", line 16, in main
_main()
File "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py", line 322, in main
cmd.execute_from_commandline(argv)
File "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py", line 496, in execute_from_commandline
super(CeleryCommand, self).execute_from_commandline(argv)))
File "/usr/local/lib/python3.5/dist-packages/celery/bin/base.py", line 298, in execute_from_commandline
return self.handle_argv(self.prog_name, argv[1:])
File "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py", line 488, in handle_argv
return self.execute(command, argv)
File "/usr/local/lib/python3.5/dist-packages/celery/bin/celery.py", line 420, in execute
).run_from_argv(self.prog_name, argv[1:], command=argv[0])
File "/usr/local/lib/python3.5/dist-packages/celery/bin/worker.py", line 223, in run_from_argv
return self(*args, **options)
File "/usr/local/lib/python3.5/dist-packages/celery/bin/base.py", line 252, in __call__
ret = self.run(*args, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/celery/bin/worker.py", line 257, in run
**kwargs)
File "/usr/local/lib/python3.5/dist-packages/celery/worker/worker.py", line 101, in __init__
self.setup_instance(**self.prepare_args(**kwargs))
File "/usr/local/lib/python3.5/dist-packages/celery/worker/worker.py", line 124, in setup_instance
self.should_use_eventloop() if use_eventloop is None
File "/usr/local/lib/python3.5/dist-packages/celery/worker/worker.py", line 243, in should_use_eventloop
self._conninfo.transport.implements.asynchronous and
File "/usr/local/lib/python3.5/dist-packages/kombu/connection.py", line 871, in transport
self._transport = self.create_transport()
File "/usr/local/lib/python3.5/dist-packages/kombu/connection.py", line 598, in create_transport
return self.get_transport_cls()(client=self)
File "/usr/local/lib/python3.5/dist-packages/kombu/transport/redis.py", line 1039, in __init__
raise ImportError('Missing redis library (pip install redis)')
ImportError: Missing redis library (pip install redis)

这是因为pip没装redis

安装redis组件

pip install -U "celery[redis]"

再次敲命令就可以了

发送邮件时继续报错

[2019-09-25 17:41:28,074: INFO/MainProcess] Received task: celery_tasks.tasks.send_register_active_email[58be8ac2-4deb-4ca1-809b-6a88e9a2fc9f]
[2019-09-25 17:41:28,085: ERROR/ForkPoolWorker-2] Task celery_tasks.tasks.send_register_active_email[58be8ac2-4deb-4ca1-809b-6a88e9a2fc9f] raised unexpected: ImproperlyConfigured('Requested setting EMAIL_FROM, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.',)
Traceback (most recent call last):
File "/home/python/.virtualenvs/bj19/lib/python3.5/site-packages/celery/app/trace.py", line 382, in trace_task
R = retval = fun(*args, **kwargs)
File "/home/python/.virtualenvs/bj19/lib/python3.5/site-packages/celery/app/trace.py", line 641, in __protected_call__
return self.run(*args, **kwargs)
File "/home/python/bj19/ttsx/dailyfresh/celery_tasks/tasks.py", line 24, in send_register_active_email
sender = settings.EMAIL_FROM # 发件人
File "/home/python/.virtualenvs/bj19/lib/python3.5/site-packages/django/conf/__init__.py", line 48, in __getattr__
self._setup(name)
File "/home/python/.virtualenvs/bj19/lib/python3.5/site-packages/django/conf/__init__.py", line 42, in _setup
% (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting EMAIL_FROM, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

django没有初始化导致的

在tasks.py文件中初始化

import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dailyfresh.settings") # 从wsgi.py中复制过来
django.setup()

再次测试,发送成功

最新文章

  1. IOS零碎技术整理(1)-后台运行
  2. C# 如何在Excel 动态生成PivotTable
  3. eclipse中xml文件不能自动提示的解决办法
  4. OSG动画学习
  5. [转]Try Cloud Messaging for Android
  6. noip2008普及组3题题解-rLq
  7. 用bower命令创建项目
  8. Navicat导入数据时发生了报错 --- 1153 - Got a packet bigger than &#39;max_allowed的处理办法
  9. HDU Destroy Transportation system(有上下界的可行流)
  10. hdu 3271 SNIBB 数位DP+二分
  11. 1218.3——init自定义
  12. 忘记linux用户名和密码怎么解决?
  13. jfinal框架新手使用之路及开发心得
  14. SRS-开源流媒体服务器
  15. HTML有哪些标签?html常用标签大全
  16. Linux注销&amp;登陆
  17. 大数据系列之分布式计算批处理引擎MapReduce实践-排序
  18. [label][JavaScript] 自动填充内容的JavaScript 库
  19. 跟我学算法-pca(降维)
  20. 重要的几个按键Tab Ctrl+c Ctrl+d

热门文章

  1. 嵌入式02 STM32 实验09 独立/窗口看门狗
  2. EasyExcel写文件
  3. Docker Swarm部署集群
  4. pytest_assert断言
  5. 基于vue的分页插件
  6. Quartz基础调度框架-第一篇控制台
  7. Hyper-V虚拟机配置内部网络固定IP 并且连接外网
  8. MVC学习笔记(二)—用EF创建数据库
  9. linux 流量监控利器:iftop
  10. 2019 盛趣游戏java面试笔试题 (含面试题解析)