django邮件通知功能-

需求:
1:下单人员下订单时需要向组长和投流手发送邮件通知
2:为何使用邮件通知功能?因为没钱去开通短信通知功能

设计
1:给用户信息表添加2个字段
第一个字段为:是否开通邮件通知的布尔值
第二个字段为: 用户接收通知的邮箱账号
2:发送通知时携带服务器中的时间,因为考虑到139服务器的接收时间可能会不一致
3:django自带邮件插件

高并发:不考虑

在这里插入图片描述

这个案例是使用139邮箱
获取邮箱的smtp功能,
启动程序后
1:程序发送邮件命令给139邮箱服务器
2:139邮箱服务器再发送给对应的被通知者
settings.py中设定

# -------------------------------------------------------
# 添加邮件通知
# 1使用的django内置邮件插件
EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'
# 2邮箱的服务地址
EMAIL_HOST='smtp.139.com'
# 3 端 口--找到139邮件中的smtp 给出的端口 默认25 非ssl的是25
# EMAIL_PORT=25
# 3 端 口--SSL时为465
EMAIL_USE_SSL=True
EMAIL_PORT=465
# 4 我的邮箱账号
EMAIL_HOST_USER='luichxxx@139.com'
# 5 我的授权码就是邮箱密码
EMAIL_HOST_PASSWORD='xxxxxxxxxx3fa2900'
# -------------------------------------------------------

admin.py中设定

from django.core.mail import send_mail


# 在订单管理函数中
# 1 判断当前添加的订单是否是有id这个值的,当没有id这个值,那么就是新添加的订单(Django models.py中设定了id值是自动累加添加的数值)
#   所以添加数据是没有id值的
class Order_salesmanAdmin(admin.ModelAdmin):
    ...

    def save_model(self, request, obj, form, change):

    # 判断没有id值时,那么表示为添加新订单
    # 当当前添加订单的身份级别为7时,那么执行逻辑

    if not obj.pk:
        if UserProfile.objects.get(user=request.user).userrank == 7:
            # 获取到订单中指定的人员中是否开通邮件通知的布尔值
            # 小组组长的身份中,是否开通邮件通知的布尔值
            # 投流手的身份中,是否开通邮件通知的布尔值
            is_team_notice = obj.team_leader_userid.is_email_notice
            is_trader_notice = obj.trader_userid.is_email_notice

            # 进行判断
            # 当小组长开通了通知,投流手也开通了通知
            if is_team_notice and is_trader_notice:
                # 获取小组长的身份中的邮箱
                # 获取投流手身份中的邮箱
                team_leader_email = obj.team_leader_userid.user_email
                trader_email = obj.trader_userid.user_email
                # 当小组长和投流手的邮箱值为"无"时,表示为默认值
                # 所以当投流手和小组长的邮件都有邮箱时
                if trader_email != "无" and team_leader_email != "无":
                    # 发送邮件
                    send_mail(
                        # 使用当前用户的用户名作为邮件的标题
                        UserProfile.objects.get(user=request.user).user.username,
                        # 邮件的内容
                        f'{datetime.datetime.now():%d日%H时:%M分},添加了一张新订单',
                        # 邮件的发送人
                        'luichuns@139.com',
                        # 邮件的接收人
                        # 1小组长
                        [team_leader_email,
                         # 2投流人
                         trader_email,
                         ], fail_silently=False)
            # 当小组长开通了 邮件通知功能
            # 向小组长发送邮件
            elif is_team_notice:
                team_leader_email = obj.team_leader_userid.user_email
                if team_leader_email != "无":
                    send_mail(
                        # 使用当前用户的用户名作为邮件的标题
                        UserProfile.objects.get(user=request.user).user.username,
                        # 邮件的内容
                        f'{datetime.datetime.now():%d日%H时:%M分},添加了一张新订单',
                        # 邮件的发送人
                        'luichuns@139.com',
                        # 邮件的接收人
                        # 1小组长
                        [team_leader_email,
                         # 2投流人
                         ], fail_silently=False)
            # 当投流手开通了 邮件通知功能
            # 向投流手发送邮件
            elif is_trader_notice:
                # 向投流人发送邮件
                trader_email = obj.trader_userid.user_email
                if trader_email != "无":
                    send_mail(
                        # 使用当前用户的用户名作为邮件的标题
                        UserProfile.objects.get(user=request.user).user.username,
                        # 邮件的内容
                        f'{datetime.datetime.now():%d日%H时:%M分},添加了一张新订单',
                        # 邮件的发送人
                        'luichuns@139.com',
                        # 邮件的接收人
                        # 1小组长# 2投流人
                        [trader_email, ], fail_silently=False)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/337005.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一键完成,批量转换HTML为PDF格式的方法,提升办公效率

在当今数字化的时代,HTML和PDF已经成为两种最常用的文件格式。HTML用于网页内容的展示,而PDF则以其高度的可读性和不依赖于平台的特性,成为文档分享和传播的首选格式。然而,在办公环境中,我们经常需要在这两种格式之间…

外包干了5个月,技术退步明显...

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

VS Code + Python + Selenium 自动化测试基础-01

VS Code Python Selenium 自动化测试基础-01 让我们来讲一个故事为什么要写自动化开发前的准备工作牛刀小试开常用的web DriverAPI-定位元素id定位:find_element_by_id()name 定位:find_element_by_name()class 定位:find_element_by_class…

logstack 日志技术栈-04-opensource 开源工具 OpenObserve+Grafana Loki

日志技术栈 日志管理包含日志数据存储、处理、分析和可视化,通过利用日志管理工具,可以监控性能趋势、解决问题、检测异常并优化整体系统性能。 近年来,开源日志管理解决方案在大家寻求灵活且经济有效的方式来管理现代系统典型的大量日志数…

04 思维导图的方式回顾ospf

思维导图的方式回顾OSPF 1 ospf 领行学习思维导图 1.1 ospf 的工作过程 建立领据表同步数据库计算路由表1.2 ospf 的状态 1.3 ospf的报文 1.4 ospf的L

Unity中URP下的SimpleLit的 Lambert漫反射计算

文章目录 前言一、Lambert漫反射计算11、MixRealtimeAndBakedGI 函数有三个重载2、3号 调用了 2号3、1号调用了 SubtractDirectMainLightFromLightmap函数4、我们重点来看 Lambert漫反射的实现部分5、其余部分 二、Lambert漫反射计算21、LightingLambert 前言 在之前的文章中&…

hot100:06三数之和

题目链接: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 算法思想: 使用双指针的思想,首先需要先对数组进行排序,让数组满足单调性,这样在相加的时候更加方便更新条件;再遍历…

【代码整理】基于COCO格式的pytorch Dataset类实现

import模块 import numpy as np import torch from functools import partial from PIL import Image from torch.utils.data.dataset import Dataset from torch.utils.data import DataLoader import random import albumentations as A from pycocotools.coco import COCO …

【机器学习300问】14、什么是特征工程?

当我学习到这个知识点的时候十分困惑,因为从名字中我完全无法理解这个什么东西。于是呢我就去问了一下维基百科,下面是他的回答: 特征工程(英语:feature engineering)又称特征提取(英语&#xf…

Jetbrains Writerside 使用教程

系列文章目录 前言 一、入门 Writerside 是基于 IntelliJ 平台的 JetBrains 集成开发环境。使用它可以编写、构建、测试和发布技术文档。 如果你想将 Writerside 作为另一个 JetBrains IDE 的插件,请参阅 Writerside 作为插件。 1.1 安装 Writerside…

cetos7搭建部署k8s 版本1.28

主机分配 内存最少是4G cpu个数最少两个 IP内存CPU主机名192.168.231.12044K1 192.168.231.12144K2192.168.231.12244K3 关闭防火墙 systemctl stop firewalled 关闭swap vim /etc/fstab 设置主机名称 hostnameset 安装docker 三个主机 初始化集群 在mas…

相关系数(皮尔逊相关系数和斯皮尔曼相关系数)

本文借鉴了数学建模清风老师的课件与思路,可以点击查看链接查看清风老师视频讲解:5.1 对数据进行描述性统计以及皮尔逊相关系数的计算方法_哔哩哔哩_bilibili 注:直接先看 ( 三、两个相关系数系数的比较 ) 部分&#x…

VC++中使用OpenCV进行颜色检测

VC中使用OpenCV进行颜色检测 在VC中使用OpenCV进行颜色检测非常简单,首选读取一张彩色图像,并调用函数cvtColor(img, imgHSV, COLOR_BGR2HSV);函数将原图img转换成HSV图像imgHSV,再设置好HSV三个分量的上限和下限值,调用inRange函…

自动化测试:5分钟了解Selenium以及如何提升自动化测试的效果

在快节奏的技术世界里,自动化测试已经成为确保 Web 应用程序质量和性能的重要手段。自动化测试不仅加快了测试过程,还提高了测试的重复性和准确性。Selenium,作为领先的自动化测试工具之一,为测试人员提供了强大的功能来模拟用户在…

C++-类和对象(3)

1. 再谈构造函数 1.1 构造函数体赋值 我们在创建一个对象时,编译器会调用该对象的构造函数对该对象的成员进行初始化。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _month;int _day…

Linux系统安装Samba服务器

在实际开发中,我们经常会有跨系统之间文件传递的需求,Samba 便是能够在 Windows 和 Linux 之间传递文件的服务,功能也是非常强大和好用,本篇文章将介绍如何在 Linux 系统上安装 Samba 服务,以 CentOS7 系统为例。 一、…

SpringBoot:详解Bean生命周期和作用域

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 🛸学无止境,不骄不躁,知行合一 文章目录 前言一、生命周期二…

大数据平台的硬件规划、网络调优、架构设计、节点规划

1.大数据平台硬件选型 要对Hadoop大数据平台进行硬件选型,首先需要了解Hadoop的运行架构以及每个角色的功能。在一个典型的Hadoop架构中,通常有5个角色,分别是NameNode、Standby NameNode、ResourceManager、NodeManager、DataNode以及外围机。 其中 NameNode 负责协调集群…

手把手教你购买阿里云服务器以及Ubuntu环境下宝塔搭建网站

阿里云服务器Ubuntu通过宝塔搭建网站详细教程 前言一、阿里云服务器的购买二、进入控制面板2.1 修改密码2.2 开放端口号 三、 测试服务器是否可以连接四、 安装nginx搭建网站(选做)五、安装宝塔5.1 登录宝塔官网5.2 卸载预装的mysql和nginx5.3 安装宝塔5.4 访问宝塔控制台5.5 修…

CSS:backdrop-filter实现毛玻璃的效果

实现效果 实现代码 /* 关键属性 */ background-color: rgba(255, 255, 255, 0.4); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);完整代码 <style>/* 遮罩层 */.mo-mask {position: fixed;top: 0;bottom: 0;left: 0;right: 0;width: 100%;height…