From 7393961810347e3e760dd488ac3d82b002319513 Mon Sep 17 00:00:00 2001 From: zty Date: Fri, 26 Apr 2024 17:23:26 +0800 Subject: [PATCH] =?UTF-8?q?fix=20:=E4=BF=AE=E6=94=B9=E5=8F=91=E9=80=81?= =?UTF-8?q?=E9=82=AE=E4=BB=B6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/api/msg.js | 2 +- server/apps/information/urls.py | 5 +-- server/apps/information/views.py | 23 +++++++++++++ server/apps/system/views.py | 55 +++++++++++++------------------- server/utils/sedmeg.py | 41 ++++++++++++++++++++++++ 5 files changed, 91 insertions(+), 35 deletions(-) create mode 100644 server/utils/sedmeg.py diff --git a/client/src/api/msg.js b/client/src/api/msg.js index bc20ece..d805d18 100644 --- a/client/src/api/msg.js +++ b/client/src/api/msg.js @@ -2,7 +2,7 @@ import request from '@/utils/request' export function sendMsg(data) { return request({ - url: '/system/sendmsg/', + url: '/info/sendmsg/', method: 'post', data }) diff --git a/server/apps/information/urls.py b/server/apps/information/urls.py index 22ce090..d76cd9f 100644 --- a/server/apps/information/urls.py +++ b/server/apps/information/urls.py @@ -1,6 +1,6 @@ from django.urls import path, include from rest_framework import routers -from .views import AbilityReviewViewSet, AuditLogViewSet, QualityCommendationViewSet, QualityActivitiesViewSet, ParsePdfViewSet, QualiChangeViewSet, ContactViewSet, ExternalAuditorsViewSet, QualificationViewSet +from .views import AbilityReviewViewSet,sendMsg, AuditLogViewSet, QualityCommendationViewSet, QualityActivitiesViewSet, ParsePdfViewSet, QualiChangeViewSet, ContactViewSet, ExternalAuditorsViewSet, QualificationViewSet router = routers.DefaultRouter() router.register('ar', AbilityReviewViewSet, basename='abilityreviews') @@ -14,5 +14,6 @@ router.register('ad', AuditLogViewSet, basename='ad') router.register('pdf', ParsePdfViewSet, basename='pdf') urlpatterns = [ - path('', include(router.urls)) + path('', include(router.urls)), + path('sendmsg/', sendMsg.as_view()) ] \ No newline at end of file diff --git a/server/apps/information/views.py b/server/apps/information/views.py index 97561ed..445f048 100644 --- a/server/apps/information/views.py +++ b/server/apps/information/views.py @@ -13,7 +13,11 @@ from apps.system.models import Organization from .models import * from .serializers import * from utils.pdf2txt import run +from utils.sedmeg import sendmessage from datetime import datetime +from rest_framework.views import APIView +from apps.system.models import Role + import os import traceback import shutil @@ -494,3 +498,22 @@ class QualiChangeViewSet(RbacFilterSet, CreateUpdateCustomMixin, ModelViewSet): ) return Response(serializers.data, status = status.HTTP_204_NO_CONTENT) + +class sendMsg(APIView): + + def post(self, request): + # 获取角色名称 + names = request.data['names'] + # 根据角色查询绑定的user + role_ids = [role.id for role in Role.objects.filter(name__in=names)] + reci_users = [] + for i in role_ids: + role = Role.objects.get(id=i) + users = role.user_set.all() + username = users.values_list('username', flat=True) + reci_users.extend(username) + subject = "检测检验月度邮件通知" + message = "各个单位提交报表" + for user in reci_users: + sendmessage(subject,message, user) + return Response({"message":"发送成功"}, status = status.HTTP_200_OK) diff --git a/server/apps/system/views.py b/server/apps/system/views.py index 1921ecd..8057ae8 100644 --- a/server/apps/system/views.py +++ b/server/apps/system/views.py @@ -105,41 +105,32 @@ class sendMsg(APIView): def post(self, request): code = random.randint(10000,99999) my_sender = 'gxpt@ctc.ac.cn' - # 材料报送二级单位和三级单位 - names = request.data['names'] - role_ids = [role.id for role in Role.objects.filter(name__in=names)] - reci_users = [] - for i in role_ids: - role = Role.objects.get(id=i) - users = role.user_set.all() - username = users.values_list('username', flat=True) - reci_users.extend(username) + my_user = request.data['mail'] my_pass = 'Pintai123' - # if not User.objects.filter(username=my_user).exists(): - # return Response('该账户不存在', status=status.HTTP_400_BAD_REQUEST) + if not User.objects.filter(username=my_user).exists(): + return Response('该账户不存在', status=status.HTTP_400_BAD_REQUEST) try: - for u in reci_users: - # 邮件内容 - msg=MIMEText('您好,共享平台本次登陆验证码为' + str(code),'plain','utf-8') - # 括号里的对应发件人邮箱昵称、发件人邮箱账号 - msg['From']=formataddr(["国检集团检验检测能力共享平台",my_sender]) - # 括号里的对应收件人邮箱昵称、收件人邮箱账号 - msg['To']=formataddr(["",u]) - # 邮件的主题 - msg['Subject'] = Header(str(code), 'utf-8').encode() - - # SMTP服务器,腾讯企业邮箱端口是465,腾讯邮箱支持SSL(不强制), 不支持TLS - # qq邮箱smtp服务器地址:smtp.qq.com,端口号:456 - # 163邮箱smtp服务器地址:smtp.163.com,端口号:25 - server=smtplib.SMTP_SSL("smtp.exmail.qq.com", 465) - # 登录服务器,括号中对应的是发件人邮箱账号、邮箱密码 - server.login(my_sender, my_pass) - # 发送邮件,括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件 - server.sendmail(my_sender,[u,],msg.as_string()) - Message.objects.filter(mail=u).delete() - Message.objects.create(mail=u, msg=code) + # 邮件内容 + msg=MIMEText('您好,共享平台本次登陆验证码为' + str(code),'plain','utf-8') + # 括号里的对应发件人邮箱昵称、发件人邮箱账号 + msg['From']=formataddr(["国检集团检验检测能力共享平台",my_sender]) + # 括号里的对应收件人邮箱昵称、收件人邮箱账号 + msg['To']=formataddr(["",my_user]) + # 邮件的主题 + msg['Subject'] = Header(str(code), 'utf-8').encode() + + # SMTP服务器,腾讯企业邮箱端口是465,腾讯邮箱支持SSL(不强制), 不支持TLS + # qq邮箱smtp服务器地址:smtp.qq.com,端口号:456 + # 163邮箱smtp服务器地址:smtp.163.com,端口号:25 + server=smtplib.SMTP_SSL("smtp.exmail.qq.com", 465) + # 登录服务器,括号中对应的是发件人邮箱账号、邮箱密码 + server.login(my_sender, my_pass) + # 发送邮件,括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件 + server.sendmail(my_sender,[my_user,],msg.as_string()) # 关闭连接 - server.quit() + server.quit() + Message.objects.filter(mail=my_user).delete() + Message.objects.create(mail=my_user, msg=code) except: return Response('验证码发送失败', status=status.HTTP_400_BAD_REQUEST) return Response(status=status.HTTP_200_OK) diff --git a/server/utils/sedmeg.py b/server/utils/sedmeg.py new file mode 100644 index 0000000..3a496e5 --- /dev/null +++ b/server/utils/sedmeg.py @@ -0,0 +1,41 @@ +""" +Author: tianyang.zhang +Date: 2020-03-24 15:36:15 +function: 发送邮件 +version: 1.0 +prameter: email +""" +import smtplib +import traceback +from email.utils import formataddr +from email.mime.text import MIMEText +from email.header import Header + +def sendmessage(subject:str, message:str, u): + my_pass = 'Pintai123' + my_sender = 'gxpt@ctc.ac.cn' + try: + msg=MIMEText(message, 'plain', 'utf-8') + # 括号里的对应发件人邮箱昵称、发件人邮箱账号 + msg['From']=formataddr(["国检集团检验检测能力共享平台",my_sender]) + # 括号里的对应收件人邮箱昵称、收件人邮箱账号 + msg['To']=formataddr(["",u]) + # 邮件的主题 + msg['Subject'] = Header(str(subject), 'utf-8').encode() + + # SMTP服务器,腾讯企业邮箱端口是465,腾讯邮箱支持SSL(不强制), 不支持TLS + # qq邮箱smtp服务器地址:smtp.qq.com,端口号:456 + # 163邮箱smtp服务器地址:smtp.163.com,端口号:25 + server=smtplib.SMTP_SSL("smtp.exmail.qq.com", 465) + # 登录服务器,括号中对应的是发件人邮箱账号、邮箱密码 + server.login(my_sender, my_pass) + # 发送邮件,括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件 + server.sendmail(my_sender,[u,],msg.as_string()) + # Message.objects.filter(mail=u).delete() + # Message.objects.create(mail=u, msg=msg) + except Exception: + traceback.print_exc() + finally: + #关闭连接 + server.quit() + return 'OK' \ No newline at end of file