0


30.django发送邮件

发送邮件是网站的常见功能,比如需要邮箱验证登录状态的时候需要发送邮件,密码找回的时候需要发送邮件等等

1 协议介绍

1.1 SMTP协议

SMTP协议是推送(从服务端到客户端)协议,SMTM的全称是Simple Main Transfer Protocol(简单邮件传输协议),这个协议的服务一般在25号端口

1.2 IMAP

IMAP协议是拉取(从客户端到服务端)协议,比如你打开你的邮箱查看里面都有什么邮件,这个过程就是拉取。IMAP全称为Internet Mail Access Protocol(交互式邮件访问协议)。IMAP属于应用层协议,端口为143

  • 不了解应用层可以看一下这个 网络分层_百度百科

1.3 POP3

POP3协议属于拉取协议。全称为Post Office Protocol 3(邮局协议的第三个版本),是TCP/IP协议族中的一员,端口为110

1.4 IMAP与POP3的区别

两者均为拉取型协议,区别如下

  • IMAP具有摘要功能,可以预览部分摘要在下载整个邮件。POP3必须下载全部邮件,无摘要功能
  • IMAP为双向协议,客户端操作可反馈给服务器。POP3为单向协议,客户端操作无法同步服务器

2 在Django使用

Django主要实现发邮件的功能,实现的流程是这样的

1.给Django授权一个邮箱

2.Django用该邮箱给对应收件人发送邮件

在django.core.mail封装了电子邮件自动发送的SMTP协议

2.1 开通邮箱SMTP服务

我们以qq邮箱为例,其余邮箱的设置方法也类似

点击账户

往下滚可以看到各种服务,django主要实现服务端给客户端发邮件,所以只要选一个带SMTP服务的就可以了,我开启的是POP3/SMTP服务

验证后会得到一个16位的授权码

2.2 配置settings.py

含义依次是

  • EMAIL_BACKEND 邮件引擎,这个就是写死的,可能会根据django版本不同有所改变
  • EMAIL_HOST 这个是使用邮箱的SMTP服务器地址,常见的服务器地址可以看一下这个 常用SMTP地址_huang_hai_an的博客-CSDN博客_smtp地址
  • EMAIL_PORT SMTP 这里是qq邮箱的SMTP服务端口号,基本都会用25号端口
  • EMAIL_HOTS_USER 你刚刚使用的qq邮箱
  • EMAIL_HOST_PASSWORD 上面qq邮箱对应的授权码,如果授权码忘了,在qq邮箱中把服务关了再开一遍会得到新的授权码
  • EMAIL_USE_TLS 是否启用TLS链接(安全链接),我们用False就行,这个看一下你的邮箱支不支持TLS,如果不支持你这写True加密,对面(qq)解不了

2.3 前端

一般来讲会有给用户写自己邮箱的页面,我们简单搞一下,文件名为send_email.html

  • input的type不一定为email,用text也行,我这里用email就是简单验证一下输入的内容

2.4 视图

subject是题目。message是内容。from_email是用谁发。recipient_list是发给谁,recipent_list是一个列表,可以发给多人。一般很少在服务端进行群发,也很少让用户自己写题目和消息内容

2.5 路由

2.6 使用

访问路由后写一个邮箱(可以发给自己),然后点击发送

之后会显示发送成功

打开邮箱后可以看到刚刚发送的邮件

3 应用

3.1 将网站的错误发送给工作人员

我们使用中间进行捕获错误,然后把错误信息发到工作人员的邮箱,以便后续对这些错误进行修改

我们定义一个中间件专门来做这个事情

然后在settings.py中注册这个中间件

一般我们不使用exception来获取错误信息,因为exception的错误信息太少,一般使用python内建的traceback的format_exc()方法,下面是两种报错信息的比较

发现一个异常后会自动发到邮箱

收件人一般会有多个邮箱,如果这多个邮箱有多次复用的地方,可以在settings.py中定义一个列表变量,然后from django.conf import settings,之后settings.列表变量名。进行复用

标签: django python 后端

本文转载自: https://blog.csdn.net/potato123232/article/details/127192989
版权归原作者 Suyuoa 所有, 如有侵权,请联系我们删除。

“30.django发送邮件”的评论:

还没有评论