Update: admin panel, SMTP/EWS/Outlook mail modes, QR fix, event folders, security improvements
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Настройки почты — InviteMe{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-8">
|
||||
<div class="card mb-4">
|
||||
<div class="card-body">
|
||||
<h4 class="card-title mb-4">Настройки почты для рассылки приглашений</h4>
|
||||
<form method="POST" action="{{ url_for('main.admin_email_settings') }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
|
||||
|
||||
<div class="mb-4">
|
||||
<label class="form-label d-block">Способ отправки</label>
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="mail_mode" id="mode_smtp" value="smtp" {% if settings.mail_mode == 'smtp' %}checked{% endif %}>
|
||||
<label class="form-check-label" for="mode_smtp">SMTP</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="mail_mode" id="mode_ews" value="ews" {% if settings.mail_mode == 'ews' %}checked{% endif %}>
|
||||
<label class="form-check-label" for="mode_ews">EWS (Exchange)</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="mail_mode" id="mode_outlook" value="outlook" {% if settings.mail_mode == 'outlook' %}checked{% endif %}>
|
||||
<label class="form-check-label" for="mode_outlook">Локальный Outlook</label>
|
||||
</div>
|
||||
<div class="form-text text-muted">
|
||||
SMTP/EWS — для серверной установки. Outlook — только если InviteMe запущен на ПК с Outlook.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="common-fields">
|
||||
<div class="mb-3">
|
||||
<label for="mail_username" class="form-label">Логин / Email</label>
|
||||
<input type="text" class="form-control" id="mail_username" name="mail_username" value="{{ settings.mail_username }}">
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="mail_password" class="form-label">Пароль</label>
|
||||
<input type="password" class="form-control" id="mail_password" name="mail_password" placeholder="Оставьте пустым, чтобы не менять">
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<label for="mail_default_sender" class="form-label">Имя отправителя (необязательно)</label>
|
||||
<input type="text" class="form-control" id="mail_default_sender" name="mail_default_sender" value="{{ settings.mail_default_sender or '' }}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="smtp-fields" {% if settings.mail_mode != 'smtp' %}style="display:none;"{% endif %}>
|
||||
<div class="row">
|
||||
<div class="col-md-8 mb-3">
|
||||
<label for="mail_server" class="form-label">SMTP-сервер</label>
|
||||
<input type="text" class="form-control" id="mail_server" name="mail_server" value="{{ settings.mail_server }}">
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label for="mail_port" class="form-label">Порт</label>
|
||||
<input type="number" class="form-control" id="mail_port" name="mail_port" value="{{ settings.mail_port }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-4 form-check">
|
||||
<input type="checkbox" class="form-check-input" id="mail_use_ssl" name="mail_use_ssl" value="1" {% if settings.mail_use_ssl %}checked{% endif %}>
|
||||
<label class="form-check-label" for="mail_use_ssl">Использовать SSL</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="ews-fields" {% if settings.mail_mode != 'ews' %}style="display:none;"{% endif %}>
|
||||
<div class="mb-4">
|
||||
<label for="ews_url" class="form-label">EWS URL</label>
|
||||
<input type="text" class="form-control" id="ews_url" name="ews_url" value="{{ settings.ews_url or '' }}" placeholder="https://mail.company.com/EWS/Exchange.asmx">
|
||||
<div class="form-text text-muted">URL вида <code>https://mail.integrita.ru/EWS/Exchange.asmx</code></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="outlook-info" {% if settings.mail_mode != 'outlook' %}style="display:none;"{% endif %} class="alert alert-info">
|
||||
Outlook должен быть установлен и запущен на сервере, где работает приложение. Браузер не может запустить Outlook на твоём компьютере.
|
||||
</div>
|
||||
|
||||
<div class="d-flex gap-2">
|
||||
<button type="submit" class="btn btn-primary">Сохранить настройки</button>
|
||||
<a href="{{ url_for('main.admin_email_send') }}" class="btn btn-outline-primary">Перейти к рассылке</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title mb-3">Отправить тестовое письмо</h5>
|
||||
<form method="POST" action="{{ url_for('main.admin_email_test') }}">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
|
||||
<div class="input-group">
|
||||
<input type="email" class="form-control" name="test_address" placeholder="address@example.com" required>
|
||||
<button class="btn btn-success" type="submit">Отправить тест</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
<script>
|
||||
const radios = document.querySelectorAll('input[name="mail_mode"]');
|
||||
const smtpFields = document.getElementById('smtp-fields');
|
||||
const ewsFields = document.getElementById('ews-fields');
|
||||
const outlookInfo = document.getElementById('outlook-info');
|
||||
const commonInputs = document.querySelectorAll('#common-fields input, #smtp-fields input, #ews-fields input');
|
||||
|
||||
function toggleFields() {
|
||||
const mode = document.querySelector('input[name="mail_mode"]:checked').value;
|
||||
smtpFields.style.display = mode === 'smtp' ? 'block' : 'none';
|
||||
ewsFields.style.display = mode === 'ews' ? 'block' : 'none';
|
||||
outlookInfo.style.display = mode === 'outlook' ? 'block' : 'none';
|
||||
|
||||
// disable hidden inputs to avoid sending stale data
|
||||
document.querySelectorAll('#smtp-fields input, #ews-fields input').forEach(i => {
|
||||
i.disabled = (mode === 'outlook') || (i.closest('#smtp-fields') && mode !== 'smtp') || (i.closest('#ews-fields') && mode !== 'ews');
|
||||
});
|
||||
document.querySelectorAll('#common-fields input').forEach(i => i.disabled = mode === 'outlook');
|
||||
}
|
||||
|
||||
radios.forEach(r => r.addEventListener('change', toggleFields));
|
||||
toggleFields();
|
||||
</script>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user