feat: add settings page for SMTP and webhook configuration to GUI app

This commit is contained in:
Rizqi 2026-06-26 23:41:35 +07:00
parent 65962a8353
commit 5ca40f5464
2 changed files with 26 additions and 5 deletions

View File

@ -755,12 +755,18 @@ def send_email_notification(smtp, run_data, raise_on_error=False):
msg['Subject'] = subject msg['Subject'] = subject
msg.attach(MIMEText(html, 'html')) msg.attach(MIMEText(html, 'html'))
encryption = smtp.get('encryption', 'starttls')
try: try:
if port == 465: import ssl
server = smtplib.SMTP_SSL(host, port, timeout=10) # Create unverified context to bypass certificate issues or protocol restriction errors
context = ssl._create_unverified_context()
if encryption == 'ssl' or port == 465:
server = smtplib.SMTP_SSL(host, port, context=context, timeout=10)
else: else:
server = smtplib.SMTP(host, port, timeout=10) server = smtplib.SMTP(host, port, timeout=10)
server.starttls() if encryption == 'starttls':
server.starttls(context=context)
if user and password: if user and password:
server.login(user, password) server.login(user, password)
@ -857,7 +863,8 @@ def log_and_notify_run(jid, info, start_time, end_time, status, run_dest):
'user': get_setting('smtp_user'), 'user': get_setting('smtp_user'),
'password': get_setting('smtp_password'), 'password': get_setting('smtp_password'),
'sender': get_setting('smtp_sender'), 'sender': get_setting('smtp_sender'),
'recipient': get_setting('smtp_recipient') 'recipient': get_setting('smtp_recipient'),
'encryption': get_setting('smtp_encryption', 'starttls')
} }
try: try:
t = threading.Thread(target=send_email_notification, args=(smtp_settings, run_data), daemon=True) t = threading.Thread(target=send_email_notification, args=(smtp_settings, run_data), daemon=True)
@ -1396,6 +1403,7 @@ def settings_page():
set_setting('smtp_enabled', 'true' if 'smtp_enabled' in request.form else 'false') set_setting('smtp_enabled', 'true' if 'smtp_enabled' in request.form else 'false')
set_setting('smtp_host', request.form.get('smtp_host', '').strip()) set_setting('smtp_host', request.form.get('smtp_host', '').strip())
set_setting('smtp_port', request.form.get('smtp_port', '587').strip()) set_setting('smtp_port', request.form.get('smtp_port', '587').strip())
set_setting('smtp_encryption', request.form.get('smtp_encryption', 'starttls'))
set_setting('smtp_user', request.form.get('smtp_user', '').strip()) set_setting('smtp_user', request.form.get('smtp_user', '').strip())
set_setting('smtp_password', request.form.get('smtp_password', '').strip()) set_setting('smtp_password', request.form.get('smtp_password', '').strip())
set_setting('smtp_sender', request.form.get('smtp_sender', '').strip()) set_setting('smtp_sender', request.form.get('smtp_sender', '').strip())
@ -1415,6 +1423,7 @@ def settings_page():
'smtp_enabled': get_setting('smtp_enabled', 'false') == 'true', 'smtp_enabled': get_setting('smtp_enabled', 'false') == 'true',
'smtp_host': get_setting('smtp_host', ''), 'smtp_host': get_setting('smtp_host', ''),
'smtp_port': get_setting('smtp_port', '587'), 'smtp_port': get_setting('smtp_port', '587'),
'smtp_encryption': get_setting('smtp_encryption', 'starttls'),
'smtp_user': get_setting('smtp_user', ''), 'smtp_user': get_setting('smtp_user', ''),
'smtp_password': get_setting('smtp_password', ''), 'smtp_password': get_setting('smtp_password', ''),
'smtp_sender': get_setting('smtp_sender', ''), 'smtp_sender': get_setting('smtp_sender', ''),
@ -1444,7 +1453,8 @@ def settings_test_notification():
'user': request.form.get('smtp_user', '').strip(), 'user': request.form.get('smtp_user', '').strip(),
'password': request.form.get('smtp_password', '').strip(), 'password': request.form.get('smtp_password', '').strip(),
'sender': request.form.get('smtp_sender', '').strip(), 'sender': request.form.get('smtp_sender', '').strip(),
'recipient': request.form.get('smtp_recipient', '').strip() 'recipient': request.form.get('smtp_recipient', '').strip(),
'encryption': request.form.get('smtp_encryption', 'starttls')
} }
test_run_data = { test_run_data = {

View File

@ -150,6 +150,17 @@
</div> </div>
</div> </div>
<div class="form-row">
<div class="form-group" style="grid-column: span 2;">
<label class="form-label" for="smtp_encryption">Connection Security</label>
<select id="smtp_encryption" name="smtp_encryption" class="form-control">
<option value="none" {% if settings.smtp_encryption == 'none' %}selected{% endif %}>None (Plain text SMTP relay — common for internal Port 25)</option>
<option value="starttls" {% if settings.smtp_encryption == 'starttls' %}selected{% endif %}>STARTTLS (Secure TLS upgrade — common for Port 587)</option>
<option value="ssl" {% if settings.smtp_encryption == 'ssl' %}selected{% endif %}>SSL / TLS (Direct secure handshake — common for Port 465)</option>
</select>
</div>
</div>
<div class="form-row"> <div class="form-row">
<div class="form-group"> <div class="form-group">
<label class="form-label" for="smtp_user">SMTP Username (Optional)</label> <label class="form-label" for="smtp_user">SMTP Username (Optional)</label>