Fix hidden add/remove template buttons, add per-template login filter
The add/remove template buttons sat directly below the fixed-height list with only 6px of margin to the tab's bottom edge - enough on this dev machine but not on the operator's real one (different DPI/font scale), so the buttons rendered off the visible area. Moved them above the list instead (visibility no longer depends on how much space is left at the bottom) and gave the whole "Шаблоны" tab substantially more vertical room throughout. Also added an optional per-template login regex filter (MailTemplateDefinition.LoginPattern): once a file's suffix matches a template, its login must also match that template's pattern (if any) or the row surfaces as a clear Error in the preview instead of silently going through - addresses "непонятно что будет работать". Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
804b9610ca
commit
6e823954a3
8 files changed
+385
-50
No files matched your search
@@ -51,7 +51,7 @@ BulkArchiveMailer.Core/ net48, class library, БЕЗ ссылок н
|
||||
FilenameParser.cs парсинг "{login}_{суффикс}.7z" (суффикс - любой, сверяется с шаблонами в ArchiveScanner)
|
||||
EmailAddressBuilder.cs login -> "login.with.dots@domain"
|
||||
SendJob.cs модель строки предпросмотра (Login/Email/Kind/ArchivePath/…/Status)
|
||||
ArchiveScanner.cs сканирование папки, сопоставление суффикса с шаблоном, конфликт "оба архива сразу"
|
||||
ArchiveScanner.cs сканирование папки, сопоставление суффикса (и необязательного regex-фильтра логина) с шаблоном, конфликт "оба архива сразу"
|
||||
TemplateEngine.cs подстановка {Login}/{Email}/{Date} в шаблон
|
||||
MailTemplateDefinition.cs один шаблон (название, суффикс файла, тема, HTML-тело) - список произвольной длины
|
||||
SendLogStore.cs CSV-журнал отправок + дедуп по (Email, Kind, SHA-256 архива)
|
||||
@@ -96,13 +96,25 @@ Outlook в принципе не запустить.
|
||||
- **Шаблоны писем** — вкладка "Шаблоны" со списком произвольного числа
|
||||
шаблонов (кнопки "+ Добавить"/"Удалить"). Каждый шаблон — это название,
|
||||
суффикс имени файла (`{login}_<суффикс>.7z`, по которому шаблон подбирается
|
||||
для конкретного архива), тема и HTML-тело с плейсхолдерами `{Login}`,
|
||||
`{Email}`, `{Date}`. Суффикс обязателен и должен быть уникальным среди всех
|
||||
шаблонов — по нему, а не по фиксированному перечислению видов архива,
|
||||
`ArchiveScanner` теперь сопоставляет файл с шаблоном. Два исходных шаблона
|
||||
(`ssh_access`/`config_update`) — обычные равноправные записи в этом
|
||||
списке, без особой защиты от переименования/удаления; кнопка "Сбросить
|
||||
шаблоны по умолчанию" восстанавливает их, если они были случайно удалены.
|
||||
для конкретного архива), необязательный фильтр логина (regex) и тема с
|
||||
HTML-телом с плейсхолдерами `{Login}`, `{Email}`, `{Date}`. Суффикс
|
||||
обязателен и должен быть уникальным среди всех шаблонов — по нему, а не по
|
||||
фиксированному перечислению видов архива, `ArchiveScanner` сопоставляет
|
||||
файл с шаблоном. Два исходных шаблона (`ssh_access`/`config_update`) —
|
||||
обычные равноправные записи в этом списке, без особой защиты от
|
||||
переименования/удаления; кнопка "Сбросить шаблоны по умолчанию"
|
||||
восстанавливает их, если они были случайно удалены.
|
||||
- **Фильтр логина** — необязательное регулярное выражение (.NET regex,
|
||||
без учёта регистра). Пустое значение (по умолчанию, в том числе у
|
||||
шаблонов, мигрированных из конфига старого формата) означает "любой
|
||||
логин" — прежнее поведение, когда только суффикс решает, подходит ли
|
||||
файл под шаблон. Если поле заполнено, а логин из имени файла ему не
|
||||
соответствует, файл не считается подходящим под этот шаблон: строка в
|
||||
предпросмотре получает статус "Ошибка" с пояснением, какому шаблону и
|
||||
какому паттерну логин не соответствует, — автоматический подбор другого
|
||||
шаблона не выполняется. Некорректный regex (не компилируется) не даёт
|
||||
сохранить настройки — окно "Настройки" укажет, в каком именно шаблоне
|
||||
ошибка.
|
||||
- **Тестовый режим по умолчанию** — включён по умолчанию (письма сохраняются
|
||||
в Черновики, а не отправляются) до первого осознанного отключения
|
||||
оператором в окне предпросмотра.
|
||||
|
||||
Reference in new issue
Block a user