飞道的博客

23. Django进阶:Django发送邮件

194人阅读  评论(0)

一、业务场景

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

二、邮件相关协议

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 mail

mail.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会发送报错邮件


转载:https://blog.csdn.net/KaiSarH/article/details/116724290
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场