需求:
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)