django中使用celery发送邮件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django中使用celery发送邮件相关的知识,希望对你有一定的参考价值。
1.安装两个包:celery, django-celery
pip install celery==3.1.25
pip install django-celery==3.1.17
2.配置 项目目录/项目名目录/settings.py
1.将celery添加到注册应用中
INSTALLED_APPS = (
......,
‘djcelery‘,
......
)
2.配置celery
import djcelery
djcelery.setup_loader() # 去每一个应用目录下找 tasks.py 文件,到文件中去执行 celery 任务函数
BROKER_URL = "redis://127.0.0.1:6379/2" # 使用redis, 并指定redis的第2个数据库作为celery中间队列
3.在应用目录下创建 tasks.py 文件 # project/app_1/tasks.py
from celery import task @task def django_send_email(email, msg): pass
在tasks.py文件中定义发送邮件的任务函数,并用 @task 对函数进行装饰,该函数就成为 celery 的任务函数。
django 自带了发送邮件的模块 django.core.mail,我们先进行相应的配置。
4.发送邮件需要用到SMTP服务器,我们以163提供的免费服务器为例。
1.注册并登录163邮箱([email protected])
2.点击设置,点击 POP3/SMTP/IMAP
3.点击新页面左侧的 客户端授权密码, 勾选“开启”, 在弹框中填写手机验证码
4.输入自定义的授权码 django123, 完成
5.配置 .../project/project/settings.py
‘‘‘发送邮件配置‘‘‘ EMAIL_BACKEND = ‘django.core.mail.backends.smtp.EmailBackend‘ # smtp服务器地址 EMAIL_HOST = ‘smtp.163.com‘ EMAIL_PORT = 25 # 发送邮件的邮箱地址 EMAIL_HOST_USER = ‘[email protected]‘ # 在邮箱中设置的客户端授权密码 EMAIL_HOST_PASSWORD = ‘django123‘ # 收件人看到的发件人 EMAIL_FROM = ‘test_app<[email protected]>‘
6. 回到 project/app_1/tasks.py 继续编写发送邮件任务函数
from celery import task from django.core.mail import send_mail from django.conf import settings @task def django_send_email(email, msg): message = msg send_mail("欢迎信息", "", settings.EMAIL_FROM, [email], html_message=message )
PS. 如果要发送的信息是文本格式,可以将message放在第二个参数的位置,如果想发送html格式,那么第二个位置参数为空字符串,将message传给html_message位置参数
7.到 .../project/app_1/views.py 定义发送邮件视图函数
from app_1.tasks import django_send_email from django.http import HttpResponse # 发送邮件视图 def send_email(request): # 从客户端请求中获取邮箱地址 email = request.GET.get(‘email‘) # 编辑要发送的信息内容 msg = "<p>Hello Word!</p>" django_send_email(email=email, msg=msg) return HttpResponse("发送成功!")
8. 执行迁移生成celery需要的数据表
在终端进入项目目录,执行命令
python manage.py migrate
9. 启动 redis 服务
sudo service redis start
10. 启动worker
python manage.py celery worker --loglevel=info
接下来就可以启动服务器,正常执行发送邮件视图函数了。
以上是关于django中使用celery发送邮件的主要内容,如果未能解决你的问题,请参考以下文章