Skip to content

feat(smtp): TLS-политика на SMTP-аккаунт - #60

Merged
friench merged 1 commit into
mainfrom
feat/smtp-tls-policy
Jul 6, 2026
Merged

feat(smtp): TLS-политика на SMTP-аккаунт#60
friench merged 1 commit into
mainfrom
feat/smtp-tls-policy

Conversation

@friench

@friench friench commented Jul 6, 2026

Copy link
Copy Markdown
Owner

Что это

Каждый исходящий SMTP-аккаунт может задать собственную TLS-политику вместо опоры только на глобальный SMTP_TLS_REJECT_UNAUTHORIZED (закрывает #20). Последний пункт «Extending our edge».

  • requireTls — форсировать STARTTLS (падать, если релей не апгрейдит соединение).
  • rejectUnauthorized (nullable) — проверять сертификат релея; null = наследовать глобальный дефолт.
  • minTlsVersion — минимальная версия (TLSv1.2 / TLSv1.3).

Surfaces: REST API + dashboard + MCP.

Изменения

  • Схема: 3 колонки на smtp_accounts + миграция 0019.
  • Mailer: выделен чистый buildTransportOptions(account, globalReject) — мапит политику на nodemailer (requireTLS + tls.rejectUnauthorized + tls.minVersion); createTransporter делегирует ему.
  • Loader / repository / validators / DTO / serialize пробрасывают поля.
  • ResourceTable: добавлен переиспользуемый тип поля select.
  • UI: форма SMTP-аккаунта (чекбокс require-STARTTLS, селекты проверки сертификата и мин. версии) + колонка «TLS policy» + i18n en/ru.
  • MCP: create_/update_smtp_account получили TLS-поля.
  • Тесты: unit buildTransportOptions + интеграционный (политика сохраняется + дефолты при пропуске).

Проверки

typecheck · lint · format:check · vitest (534 ✓) · ui typecheck/build · mcp typecheck/build — всё зелёное. Паритет ключей en/ru проверен.

Заметка

Маппинг политики на nodemailer покрыт unit-тестами (чистая функция); фактическое TLS-поведение с реальным релеем — deploy-verified. Обратная совместимость: пропуск полей → безопасные дефолты.

Closes #20

🤖 Generated with Claude Code

Each SMTP account can now set its own TLS policy instead of relying only
on the global SMTP_TLS_REJECT_UNAUTHORIZED:
- requireTls    → force STARTTLS (fail if the relay won't upgrade)
- rejectUnauthorized (nullable) → verify the relay cert; null inherits
  the global default
- minTlsVersion → pin a floor (TLSv1.2 / TLSv1.3)

- schema: three columns on smtp_accounts + migration 0019
- mailer: extract pure buildTransportOptions(account, globalReject) that
  maps the policy onto nodemailer (requireTLS + tls.rejectUnauthorized +
  tls.minVersion); createTransporter delegates to it
- loader/repository/validators/DTO/serialize thread the fields through
- ResourceTable: add a reusable `select` field type
- UI: SMTP accounts form (require-STARTTLS checkbox, verification +
  min-version selects) + a TLS-policy column + en/ru i18n
- MCP: create_/update_smtp_account gain the TLS fields
- tests: buildTransportOptions unit (inherit/override/requireTLS/minVersion/
  auth) + smtp-accounts integration (policy persisted + defaults)

Closes #20

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@friench
friench merged commit eba16f7 into main Jul 6, 2026
1 check passed
@friench
friench deleted the feat/smtp-tls-policy branch July 6, 2026 17:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Per-account SMTP TLS policy

1 participant