Ящик с флагом TRAP ничего не отправляет наружу: всё, что он шлёт (SMTP 587 или веб), ложится одной копией в его же INBOX.
Зачем: staging Jambotron шлёт через staging@jambocheck.com на настоящий mail.jambocheck.com — с ловушкой тестовые письма (забыл пароль, уведомления) не дойдут до живых людей. Отдельная ВМ-ловушка не нужна.
V5: users.is_trap (по умолчанию false — ничего не меняется для существующих ящиков)
MailRouter: залогиненный отправитель-ловушка → все получатели LOCAL → одна копия в INBOX отправителя; DKIM/очередь не трогаются
PUT /api/admin/mailboxes/{id}/trap {trap} — только MAIL_ADMINS; MailboxView.trap
Ящик с флагом **TRAP** ничего не отправляет наружу: всё, что он шлёт (SMTP 587 или веб), ложится **одной копией в его же INBOX**.
Зачем: staging Jambotron шлёт через `staging@jambocheck.com` на настоящий mail.jambocheck.com — с ловушкой тестовые письма (забыл пароль, уведомления) не дойдут до живых людей. Отдельная ВМ-ловушка не нужна.
- V5: `users.is_trap` (по умолчанию false — ничего не меняется для существующих ящиков)
- `MailRouter`: залогиненный отправитель-ловушка → все получатели LOCAL → одна копия в INBOX отправителя; DKIM/очередь не трогаются
- `PUT /api/admin/mailboxes/{id}/trap {trap}` — только MAIL_ADMINS; `MailboxView.trap`
- Настройки → MAILBOXES: кнопка `outbox` (вкл) / `move_to_inbox` (выкл, с подтверждением), метка TRAP
- README: абзац про ловушку
- тесты: 77 зелёные (новые: router trap, admin trap); `ng build` OK
После мержа: образ → redeploy почты на prod → MAILBOXES → TRAP у staging@ → «забыл пароль» на staging → письмо в INBOX staging@, а не у адресата.
α
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Для staging@: staging-стенд шлёт через настоящий mail.jambocheck.com,
но тестовые письма не доходят до живых людей.
- V5: users.is_trap
- MailRouter: отправитель-ловушка → все получатели LOCAL, одна копия в INBOX отправителя
- PUT /api/admin/mailboxes/{id}/trap, MailboxView.trap
- MAILBOXES: кнопка outbox/move_to_inbox, метка TRAP
- тесты: router + admin (77 тестов)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ящик с флагом TRAP ничего не отправляет наружу: всё, что он шлёт (SMTP 587 или веб), ложится одной копией в его же INBOX.
Зачем: staging Jambotron шлёт через
staging@jambocheck.comна настоящий mail.jambocheck.com — с ловушкой тестовые письма (забыл пароль, уведомления) не дойдут до живых людей. Отдельная ВМ-ловушка не нужна.users.is_trap(по умолчанию false — ничего не меняется для существующих ящиков)MailRouter: залогиненный отправитель-ловушка → все получатели LOCAL → одна копия в INBOX отправителя; DKIM/очередь не трогаютсяPUT /api/admin/mailboxes/{id}/trap {trap}— только MAIL_ADMINS;MailboxView.trapoutbox(вкл) /move_to_inbox(выкл, с подтверждением), метка TRAPng buildOKПосле мержа: образ → redeploy почты на prod → MAILBOXES → TRAP у staging@ → «забыл пароль» на staging → письмо в INBOX staging@, а не у адресата.
α
🤖 Generated with Claude Code
Для staging@: staging-стенд шлёт через настоящий mail.jambocheck.com, но тестовые письма не доходят до живых людей. - V5: users.is_trap - MailRouter: отправитель-ловушка → все получатели LOCAL, одна копия в INBOX отправителя - PUT /api/admin/mailboxes/{id}/trap, MailboxView.trap - MAILBOXES: кнопка outbox/move_to_inbox, метка TRAP - тесты: router + admin (77 тестов) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>