【Django 笔记】发送邮件
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'
(2)在视图views.py中,发送邮件
发送邮件最简单的方式就是使用 django.core.mail.send_mail()
。函数详见send_mail() 。
send_mail
(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None,auth_password=None, connection=None, html_message=None)
参数
subject
,message
,from_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/
简单的邮件发送就是这样,更多详见发送邮件
使用 django.core.mail.send_mail()
来发送邮件,是Django网站的 send_mail() 发送至smtp服务器,然后再发给目的邮箱。这期间可能耗时会很长。类似发送邮件、手机验证码等功能,在views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验。
解决的办法就是:将耗时的程序放到celery中执行,在后台异步的执行一些耗时任务。
- 点击查看:celery官方网站、Celery 4.3.0 documentation、Celery 3.1中文文档
Celery是一个功能完备即插即用的任务队列。
相关概念:
- 任务task:就是一个Python函数。
- 队列queue:将需要执行的任务加入到队列中。
- 工人worker:在一个新进程中,负责执行队列中的任务。
- 中间人broker:负责调度,在布置环境中使用redis。
celery的特点是:
- 简单,易于使用和维护,有丰富的文档。
- 高效,单个celery进程每分钟可以处理数百万个任务。
- 灵活,celery中几乎每个部分都可以自定义扩展。
- celery非常易于集成到一些web开发框架中.
安装也可指定版本:
pip install celery==4.1.0
Celery需要一种解决消息的发送和接受的方式,我们把这种用来存储消息的的中间装置叫做message broker, 也可叫做消息中间人。 作为中间人,我们有几种方案可选择:
(注:任务的发出者、中间人、处理者,可以在同一台电脑中启动,也可以不在同一台电脑中启动)
注意:如果celery无法启动,可能是版本的问题,celery无法启动的问题 SyntaxError: invalid syntax
1.使用 redis 作为中间人的简单示例,可以参考:使用selery异步发送邮件
2. 如果使用 RabbitMQ可以参考这个:https://www.cnblogs.com/bufufan/p/11069058.html
-----end-----