mirror of
https://gitverse.ru/kpa39l/gotosocial.git
synced 2026-09-29 09:55:10 +00:00
fix(smtp): GTS_SMTP_FROM_ADDRESS -> GTS_SMTP_FROM (empty From header fixed); openspec: smtp-email spec
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
# gotosocial/smtp-email Specification
|
||||
|
||||
## Purpose
|
||||
Обеспечить доставляемость исходящих писем GoToSocial (подтверждение email,
|
||||
системные уведомления) через SMTP Jino, гарантируя корректный, непустой
|
||||
заголовок `From` и валидную аутентификацию. Исправление применено 2026-09-13
|
||||
(пустой From из-за неверной env-переменной `GTS_SMTP_FROM_ADDRESS`).
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: SMTP-конфигурация через корректные env-ключи GtS
|
||||
|
||||
- **MUST**: Исходящая почта настраивается через env-переменные, которые
|
||||
GtS 0.22.x реально читает (префикс `GTS_`, ключи конфига `smtp-*`):
|
||||
`GTS_SMTP_HOST`, `GTS_SMTP_PORT`, `GTS_SMTP_USERNAME`,
|
||||
`GTS_SMTP_PASSWORD`, `GTS_SMTP_FROM`.
|
||||
- **MUST NOT**: НЕ используется `GTS_SMTP_FROM_ADDRESS` — такого ключа GtS
|
||||
не знает, он молча игнорируется, и заголовок `From` в письмах становится
|
||||
пустым.
|
||||
- **MUST**: `GTS_SMTP_FROM` и `GTS_SMTP_USERNAME` совпадают
|
||||
(`social@dedinit.ru`) — envelope-отправитель и заголовок From согласованы.
|
||||
|
||||
#### Scenario: From заполнен после фикса
|
||||
|
||||
- **GIVEN** docker-compose.yml содержит `GTS_SMTP_FROM: "social@dedinit.ru"`
|
||||
и контейнер пересоздан
|
||||
- **WHEN** выполнить
|
||||
`docker inspect -f '{{.Config.Env}}' gotosocial | tr ' ' '\n' | grep GTS_SMTP_FROM`
|
||||
- **THEN** вывод содержит `GTS_SMTP_FROM=social@dedinit.ru`
|
||||
|
||||
#### Scenario: Неверный ключ отсутствует
|
||||
|
||||
- **GIVEN** конфигурация в docker-compose.yml
|
||||
- **WHEN** выполнить `grep -c GTS_SMTP_FROM_ADDRESS docker-compose.yml`
|
||||
- **THEN** результат равен `0` (несуществующий ключ больше не используется)
|
||||
|
||||
### Requirement: Регистрационные письма приходят с заполненным From
|
||||
|
||||
- **MUST**: Письмо подтверждения email (шаблон `email_confirm`) отправляется
|
||||
с непустым заголовком `From`, равным `social@dedinit.ru` (значение
|
||||
`GTS_SMTP_FROM` → `GetSMTPFrom()` не пуст).
|
||||
- **SHOULD**: Периодически проверять доставляемость вручную (тестовое письмо
|
||||
через SMTP Jino).
|
||||
|
||||
#### Scenario: Письмо подтверждения после регистрации
|
||||
|
||||
- **GIVEN** настроен SMTP (host/port/username/password/from)
|
||||
- **WHEN** пользователь регистрируется на инстансе
|
||||
(`https://social.dedinit.ru/signup`)
|
||||
- **THEN** в письме подтверждения поле `From` непустое и равно
|
||||
`social@dedinit.ru`, а `confirmation_sent_at`/`last_emailed_at` у
|
||||
пользователя в БД проставлены
|
||||
|
||||
#### Scenario: SMTP-доступность Jino
|
||||
|
||||
- **GIVEN** SMTP smtp.jino.ru:587
|
||||
- **WHEN** проверить ESMTP-баннер и аутентификацию `social@dedinit.ru`
|
||||
- **THEN** баннер `220 smtp-out*.jino.ru ESMTP Postfix`, логин проходит,
|
||||
RCPT TO принимается, DATA → `250 Ok: queued`
|
||||
|
||||
### Requirement: Осведомлённость о репутации домена (SPF/DMARC)
|
||||
|
||||
- **SHOULD**: Для полной доставляемости на внешние ящики (Яндекс и др.) у
|
||||
домена dedinit.ru настроены SPF (`include:jino.ru`) и DMARC; без них
|
||||
письма могут попадать в спам даже при корректном From.
|
||||
- **SHOULD**: Задача настройки SPF/DMARC отслеживается отдельным трекером
|
||||
и не блокирует данный фикс.
|
||||
|
||||
#### Scenario: Проверка наличия SPF
|
||||
|
||||
- **GIVEN** домен dedinit.ru
|
||||
- **WHEN** выполнить `dig +short TXT dedinit.ru`
|
||||
- **THEN** среди записей есть строка, начинающаяся с `v=spf1` (включает
|
||||
jino.ru), либо задача открыта в STATUS.md
|
||||
Reference in New Issue
Block a user