refactor MailProvider model and enhance email validation in admin form
This commit is contained in:
25
api/admin.py
25
api/admin.py
@@ -1,4 +1,6 @@
|
||||
import logging
|
||||
import smtplib
|
||||
import socket
|
||||
|
||||
from django.contrib import admin
|
||||
from django import forms
|
||||
@@ -6,6 +8,8 @@ from django.core.exceptions import ValidationError
|
||||
|
||||
from api.models import MailProvider
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
class MailProviderForm(forms.ModelForm):
|
||||
host_password = forms.CharField(widget=forms.PasswordInput(render_value=True))
|
||||
|
||||
@@ -21,11 +25,26 @@ class MailProviderForm(forms.ModelForm):
|
||||
password = cleaned_data.get("host_password")
|
||||
use_tls = cleaned_data.get("use_tls")
|
||||
|
||||
if host:
|
||||
try:
|
||||
socket.gethostbyname(host)
|
||||
except socket.gaierror:
|
||||
raise ValidationError(
|
||||
"Invalid mail server hostname. Could not resolve host."
|
||||
)
|
||||
|
||||
if host and port and user and password:
|
||||
try:
|
||||
connection = smtplib.SMTP(host, port, timeout=10)
|
||||
if use_tls:
|
||||
connection.starttls()
|
||||
if port == 465:
|
||||
connection = smtplib.SMTP_SSL(host, port, timeout=10)
|
||||
else:
|
||||
connection = smtplib.SMTP(host, port, timeout=10)
|
||||
if use_tls and port == 465:
|
||||
raise ValidationError(
|
||||
"Port 465 should not be used with STARTTLS. Use SMTP_SSL instead or change to port 587."
|
||||
)
|
||||
if use_tls:
|
||||
connection.starttls()
|
||||
connection.login(user, password)
|
||||
connection.quit()
|
||||
except Exception as e:
|
||||
|
Reference in New Issue
Block a user