【Django 笔记】发送邮件、celery异步任务

【Django 笔记】发送邮件

 

1.发送邮件

Python 借助 smtplib 模块简化了发送邮件的流程,但是 Django 在其基础上提供了更简化的支持。这些封装意在加快邮件发送,方便在开发时测试发送邮件,在不支持 SMTP 的平台上支持发送邮件。其定义在django.core.mail模块中

 

官方文档:发送邮件

 

使用之前,要先把你的邮箱POP3/SMTP/IMAP服务开启,并获取授权码

 

(1)在setting.py中,编辑发送邮件配置

邮件是通过 SMTP 主机和端口发送的,由配置项 EMAIL_HOST 和 EMAIL_PORT 指定。如果配置了 EMAIL_HOST_USER 和 EMAIL_HOST_PASSWORD ,那么它们将被用来验证 SMTP 服务器。配置项 EMAIL_USE_TLS 和 EMAIL_USE_SSL 控制是否使用安全连接。

# 发送邮件配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'  # 用smtp发送邮件
EMAIL_HOST = 'smtp.163.com'  # SMTP服务器地址
EMAIL_PORT = 25
# 发送邮件的邮箱
EMAIL_HOST_USER = 'jason@163.com'
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'python808'
# 收件人看到的发件人
EMAIL_FROM = '邮件test<jason@163.com>'

(2)在视图views.py中,发送邮件

发送邮件最简单的方式就是使用 django.core.mail.send_mail()函数详见send_mail() 

send_mail(subjectmessagefrom_emailrecipient_listfail_silently=Falseauth_user=None

auth_password=Noneconnection=Nonehtml_message=None)

参数 subjectmessagefrom_email 和 recipient_list 是必须的。

  • subject: 一个字符串。
  • message: 一个字符串。
  • from_email: 一个字符串。
  • recipient_list: 一个字符串列表,每项都是一个邮箱地址。recipient_list 中的每个成员都可以在邮件的 "收件人:" 中看到其他的收件人。
  • html_message: 若提供了 html_message,会使邮件成为 multipart/alternative 的实例, message 的内容类型则是 text/plain ,并且 html_message 的内容类型是 text/html 。
  • ...

 

from django.conf import settings
from django.core.mail import send_mail
from django.http import HttpResponse
...

def send(request):
    email = "12345@163.com"
    # 发邮件
    subject = '天天生鲜欢迎信息'
    message = '邮箱正文'
    sender = settings.EMAIL_FROM
    receiver = [email]       
    send_mail(subject, message, sender, receiver)
    return HttpResponse('ok')

配置好url,启动服务器,在浏览器中输入如下网址:

http://127.0.0.1:8000/send/

简单的邮件发送就是这样,更多详见发送邮件

 

2.celery

 

2.1.简介

使用 django.core.mail.send_mail()来发送邮件,是Django网站的 send_mail() 发送至smtp服务器,然后再发给目的邮箱。这期间可能耗时会很长。类似发送邮件、手机验证码等功能,在views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验。

解决的办法就是:将耗时的程序放到celery中执行,在后台异步的执行一些耗时任务

Celery是一个功能完备即插即用的任务队列。

 

相关概念:

  • 任务task:就是一个Python函数。
  • 队列queue:将需要执行的任务加入到队列中。
  • 工人worker:在一个新进程中,负责执行队列中的任务。
  • 中间人broker:负责调度,在布置环境中使用redis。

 

celery的特点是:

  • 简单,易于使用和维护,有丰富的文档。
  • 高效,单个celery进程每分钟可以处理数百万个任务。
  • 灵活,celery中几乎每个部分都可以自定义扩展。
  • celery非常易于集成到一些web开发框架中.

 

2.2.安装

安装也可指定版本:

pip install celery==4.1.0

 

2.3.中间人Broker

Celery需要一种解决消息的发送和接受的方式,我们把这种用来存储消息的的中间装置叫做message broker, 也可叫做消息中间人。 作为中间人,我们有几种方案可选择:

(注:任务的发出者、中间人、处理者,可以在同一台电脑中启动,也可以不在同一台电脑中启动)

 

注意:如果celery无法启动,可能是版本的问题,celery无法启动的问题 SyntaxError: invalid syntax

 

2.4.示例

1.使用 redis 作为中间人的简单示例,可以参考:使用selery异步发送邮件

2. 如果使用 RabbitMQ可以参考这个:https://www.cnblogs.com/bufufan/p/11069058.html

 

 

-----end-----

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值