一、业务场景

  • 业务警告
  • 邮件验证
  • 密码找回

二、邮件相关协议

2.1. SMTP

  • SMTP的全程是"Simple Mail Transfer Protocol",即简单邮件传输协议(25号端口)
  • 它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转
  • 属于"推送"协议

2.2. IMAP

  • IMAP的全称是"Internet Message Access Protocol",即交互式邮件访问协议,是一个应用层协议(143号端口)
  • 用来从本地邮件客户端(Outlook Express、Foxmail、Mozilla Thunderbird等)访问远程服务器上的邮件
  • 属于"拉取"协议

2.3. POP3

  • POP3的全称是"Post Office Protocol 3",即邮局协议的第三个版本,是TCP/IP协议族中的一员(110号端口)
  • 本协议主要用于支持使用客户端远程管理在服务器上的电子邮件
  • 属于"拉取"协议

2.4. IMAP VS POP3

两者均为"拉取"型协议,负责从邮件服务器中下载邮件

  • IMAP具备摘要浏览功能,可预览部分摘要,再下载整个邮件

  • IMAP为双向协议,客户端操作可反馈给服务器

  • POP3必须下载全部邮件,无摘要功能

  • POP3为单向协议,客户端操作无法同步服务器

三、邮件发送过程

四、Django发邮件

  • Django中配置邮件功能,主要为SMTP协议,负责发邮件
  • 原理:
    • 给Django授权一个邮箱
    • Django用该邮箱给对应收件人发送邮件
    • django.core.mail封装了电子邮件的自动发送SMTP协议

五、授权步骤 - 以QQ邮箱为例

  1. 申请QQ号

  2. 用QQ号登录到QQ邮箱并修改设置

    • 用申请到的QQ号和密码登录到https://mail.qq.com/

    • 修改QQ邮箱 → 设置 → 账户 → "POP3/IMAP...服务"

    • 开启服务,获取授权码

六、Django配置

七、函数调用

from django.core import mailmail.send_mail(subject='xx',  # 题目message='xx',  # 消息内容from_email='xxx@qq.com',  # 发送者[当前配置邮箱]recipient_list=['xxx@qq.com'],  # 接收者邮件列表
)

测试:进入shell

$ python3 manage.py shell

八、练习 - 邮件警告

用中间件实现抓取视图函数的异常,并以发邮件的形式将异常信息发送给指定联系人

  • 邮件主题:‘mysite7异常告警’
  • 内容:自定义即可,要求带有异常信息
  • 收件人要求可灵活配置

8.1. 定义中间件

class ExceptionMW(MiddlewareMixin):def process_response(self, request, exception):mail.send_mail(subject='mysite7异常告警',message=traceback.format_exc(),from_email='xxx@qq.com',recipient_list=settings.EX_EMAIL)return HttpResponse('网站繁忙')

其中,收件人邮箱在setting中配置

EX_EMAIL = ['huankai7@163.com']

8.2. 注册中间件

8.3. 模拟报错

8.4. 测试

访问http://127.0.0.1:8000/test_upload会发送报错邮件

23. Django进阶:Django发送邮件相关推荐

  1. Django进阶 Django REST framework+Vue 打造生鲜超市第一天 搭建环境

    新人学习django 是按照这个大佬的教程学习的 链接: https://www.cnblogs.com/derek1184405959/p/8733194.html. 很多步骤都是按照上面的教程学习 ...

  2. django进阶04部署上线(nginx,uwsgi,supervisor)

    原创博文地址:django进阶04部署上线(nginx,uwsgi,supervisor) django自身服务ok python manage.py runserver,验证可正常访问 uwsgi安 ...

  3. Django进阶教程

    Django进阶教程 Queryset特性及高级查询技巧 什么是QuerySet QuerySet是Django提供的强大的数据库接口(API).正是因为通过它,我们可以使用filter, exclu ...

  4. Django进阶: 如何自定义manage.py管理命令

    每次在启动Django服务之前,我们都会在终端运行python manage.py xxx的管理命令.其实我们还可以自定义管理命令,这对于执行独立的脚本或任务非常有用,比如清除缓存.导出用户邮件清单或 ...

  5. django进阶07用户模块与权限系统

    原创:django进阶07用户模块与权限系统 Django默认提供了用户权限管理模块auth, 1 2 3 user表,User是auth模块中维护用户信息的表,在数据库中该表被命名为auth_use ...

  6. django进阶06数据库事务

    原创:django进阶06数据库事务 锁 1.1:乐观锁: 概念:同一条数据很少会因为并发修改而产生冲突,适用于读多写少的场景. 实现方式:读取一个字段,执行处理逻辑,当需要更新数据时,再次检查该字段 ...

  7. django进阶05中间件

    原创:django进阶05中间件 django进阶05中间件 什么是中间件 django的中间件(middleware)是一个轻量级的插件系统,在django中的请求和响应中,可以利用中间件干预视图的 ...

  8. django进阶03静态文件和模板

    原创博文地址:django进阶03静态文件和模板 静态文件和模板 静态文件:css,js,image,如果作为纯粹的web应用来看,静态文件的响应并不属于web应用范畴,因为静态文件不涉及业务逻辑,也 ...

  9. django进阶02websocket

    原创博文地址:django进阶02websocket 本文适合有一定websocket基础的,至少完整看过前后端demo的读者,一窍不通的小白建议先阅读"参考"部分的博文扫扫盲. ...

  10. 进阶Django(一):Django与Ajax

    目录 Ajax JQuery Ajax前端实现:JQuery向后端发送ajax请求 JQuery的ajax函数 $.ajax({settings}) Ajax后端实现:Django读取并相应ajax请 ...

最新文章

  1. Windows10下OpenCV_contrib安装配置
  2. web网页获取,cookie 的管理,post和get方式的模拟。
  3. 多媒体容器格式概述①
  4. 2015-05-26
  5. Spring文档学习
  6. [原]JS ajax类的三种封装形式及简单对比
  7. 一本书学会可视化设计 pdf_「读书」数据之美-一本书学会可视化设计
  8. 小结两种在Python中导入C语言扩展库的方法
  9. 【题解】Luogu P3674 小清新人渣的本愿
  10. (精)tomcat 源码学习
  11. Centos7KVM的安装与配置及创建虚拟机
  12. 静态 非静态代码块和构造器的执行顺序测试方法
  13. k8s安装sqlite3_kubernetes环境部署单节点redis数据库的方法
  14. element-ui的input加单位符号
  15. 基于Ruby的Watir-WebDriver自动化测试框架
  16. 如何让 Mac 加入网络帐户服务器?
  17. centos7完全卸载mysql_Centos7 完全卸载mysql
  18. 用人话说说希尔伯特空间??
  19. 小学数学计算机按键名称,数学计算器
  20. 事件委托(事件代理)是什么?有什么用?

热门文章

  1. 7.从Paxos到Zookeeper分布式一致性原理与实践---Zookeeper 技术内幕
  2. 100. SimpleXML
  3. 11. jQuery - Chaining
  4. Struts中 s checkboxlist 的用法
  5. C#4.0的十种语法糖
  6. 使用js实现复选框的全选、取消功能
  7. openstack trove实例状态转换条件--Mitaka版本
  8. WAMPServer安装和配置
  9. KVM之五:KVM日常管理常用命令
  10. EF入门 IQueryable和IEnumberable的区别