From 83eb8f77d18b3136562acae52c6e3d974f878d45 Mon Sep 17 00:00:00 2001 From: Bai Date: Tue, 14 Apr 2020 19:40:56 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E9=82=AE=E4=BB=B6=E5=90=8E=EF=BC=8C=E9=85=8D=E7=BD=AE=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E4=B8=8D=E7=A8=B3=E5=AE=9A=E7=9A=84Bug=EF=BC=88?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E7=BB=99settings=E8=B5=8B=E5=80=BC=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/settings/api.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/apps/settings/api.py b/apps/settings/api.py index 7b5383755..38167a7e3 100644 --- a/apps/settings/api.py +++ b/apps/settings/api.py @@ -7,7 +7,7 @@ from smtplib import SMTPSenderRefused from rest_framework import generics from rest_framework.views import Response, APIView from django.conf import settings -from django.core.mail import send_mail +from django.core.mail import send_mail, get_connection from django.utils.translation import ugettext_lazy as _ from .utils import ( @@ -35,18 +35,33 @@ class MailTestingAPI(APIView): def post(self, request): serializer = self.serializer_class(data=request.data) if serializer.is_valid(): + email_host = serializer.validated_data['EMAIL_HOST'] + email_port = serializer.validated_data['EMAIL_PORT'] + email_host_user = serializer.validated_data["EMAIL_HOST_USER"] + email_host_password = serializer.validated_data['EMAIL_HOST_PASSWORD'] email_from = serializer.validated_data["EMAIL_FROM"] email_recipient = serializer.validated_data["EMAIL_RECIPIENT"] - email_host_user = serializer.validated_data["EMAIL_HOST_USER"] - for k, v in serializer.validated_data.items(): - if k.startswith('EMAIL'): - setattr(settings, k, v) + email_use_ssl = serializer.validated_data['EMAIL_USE_SSL'] + email_use_tls = serializer.validated_data['EMAIL_USE_TLS'] + + # 设置 settings 的值,会导致动态配置在当前进程失效 + # for k, v in serializer.validated_data.items(): + # if k.startswith('EMAIL'): + # setattr(settings, k, v) try: subject = "Test" message = "Test smtp setting" email_from = email_from or email_host_user email_recipient = email_recipient or email_from - send_mail(subject, message, email_from, [email_recipient]) + connection = get_connection( + host=email_host, port=email_port, + uesrname=email_host_user, password=email_host_password, + use_tls=email_use_tls, use_ssl=email_use_ssl, + ) + send_mail( + subject, message, email_from, [email_recipient], + connection=connection + ) except SMTPSenderRefused as e: resp = e.smtp_error if isinstance(resp, bytes):