yiwi515

导航

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邮箱(sendmail@163.com)

  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 = 'sendmail@163.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'django123'
# 收件人看到的发件人
EMAIL_FROM = 'test_app<sendmail@163.com>'

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

 接下来就可以启动服务器,正常执行发送邮件视图函数了。

 

 

 

 

 

 

 

  

  

 

  

posted on 2017-09-23 11:03  yiwi515  阅读(311)  评论(0编辑  收藏  举报