发送邮件是网站的常见功能,比如需要邮箱验证登录状态的时候需要发送邮件,密码找回的时候需要发送邮件等等
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.列表变量名。进行复用
版权归原作者 Suyuoa 所有, 如有侵权,请联系我们删除。