3 migrations (email_mailboxes, email_templates, email_logs), full CRUD for SMTP mailboxes with encrypted passwords (IntegrationSecretCipher), native SMTP connection test via stream_socket_client, sidebar navigation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
134 lines
4.9 KiB
Markdown
134 lines
4.9 KiB
Markdown
---
|
|
phase: 13-email-mailboxes
|
|
plan: 01
|
|
subsystem: settings
|
|
tags: [email, smtp, encryption, crud]
|
|
|
|
requires:
|
|
- phase: none
|
|
provides: n/a (first phase of v0.4)
|
|
provides:
|
|
- email_mailboxes table with SMTP credential storage
|
|
- email_templates table (schema only, populated in phase 14)
|
|
- email_logs table (schema only, populated in phase 15)
|
|
- EmailMailboxController + EmailMailboxRepository CRUD
|
|
- SMTP connection test endpoint
|
|
affects: [14-email-templates, 15-email-sending]
|
|
|
|
tech-stack:
|
|
added: []
|
|
patterns: [SMTP socket test via stream_socket_client, password encryption reusing IntegrationSecretCipher]
|
|
|
|
key-files:
|
|
created:
|
|
- database/migrations/20260315_000054_create_email_mailboxes_table.sql
|
|
- database/migrations/20260315_000055_create_email_templates_table.sql
|
|
- database/migrations/20260315_000056_create_email_logs_table.sql
|
|
- src/Modules/Settings/EmailMailboxController.php
|
|
- src/Modules/Settings/EmailMailboxRepository.php
|
|
- resources/views/settings/email-mailboxes.php
|
|
modified:
|
|
- routes/web.php
|
|
- resources/views/layouts/app.php
|
|
|
|
key-decisions:
|
|
- "SMTP test via native stream_socket_client — no PHPMailer dependency yet"
|
|
- "Password encryption via existing IntegrationSecretCipher (AES-256-CBC + HMAC)"
|
|
- "is_default flag with auto-reset of previous default on save"
|
|
|
|
patterns-established:
|
|
- "Email mailbox CRUD pattern (same as ReceiptConfig)"
|
|
- "AJAX JSON test endpoint for connection validation"
|
|
|
|
duration: ~15min
|
|
started: 2026-03-15T00:00:00Z
|
|
completed: 2026-03-15T00:15:00Z
|
|
---
|
|
|
|
# Phase 13 Plan 01: DB + Skrzynki pocztowe Summary
|
|
|
|
**3 migracje email (mailboxes/templates/logs) + pełny CRUD skrzynek pocztowych SMTP z testem połączenia i szyfrowaniem haseł**
|
|
|
|
## Performance
|
|
|
|
| Metric | Value |
|
|
|--------|-------|
|
|
| Duration | ~15min |
|
|
| Tasks | 3 completed (2 auto + 1 checkpoint) |
|
|
| Files created | 6 |
|
|
| Files modified | 2 |
|
|
|
|
## Acceptance Criteria Results
|
|
|
|
| Criterion | Status | Notes |
|
|
|-----------|--------|-------|
|
|
| AC-1: Migracje tworzą 3 tabele | Pass | email_mailboxes, email_templates, email_logs z FK i indeksami |
|
|
| AC-2: CRUD skrzynek pocztowych | Pass | Dodawanie, edycja (z zachowaniem hasła), usuwanie, toggle statusu |
|
|
| AC-3: Walidacja połączenia SMTP | Pass | AJAX POST z AUTH LOGIN, JSON response |
|
|
| AC-4: Nawigacja | Pass | Link "Skrzynki pocztowe" w sidebar Settings |
|
|
|
|
## Accomplishments
|
|
|
|
- 3 tabele bazodanowe: `email_mailboxes` (SMTP credentials), `email_templates` (szablony), `email_logs` (historia wysyłki)
|
|
- Pełny CRUD skrzynek z szyfrowaniem haseł przez IntegrationSecretCipher
|
|
- Test połączenia SMTP z pełnym handshake (EHLO → STARTTLS → AUTH LOGIN)
|
|
- Widok z listą, formularzem edycji i AJAX testem połączenia
|
|
|
|
## Files Created/Modified
|
|
|
|
| File | Change | Purpose |
|
|
|------|--------|---------|
|
|
| `database/migrations/20260315_000054_create_email_mailboxes_table.sql` | Created | Tabela skrzynek SMTP |
|
|
| `database/migrations/20260315_000055_create_email_templates_table.sql` | Created | Tabela szablonów email |
|
|
| `database/migrations/20260315_000056_create_email_logs_table.sql` | Created | Tabela logów wysyłki |
|
|
| `src/Modules/Settings/EmailMailboxRepository.php` | Created | Repository: listAll, findById, save, delete, toggleStatus, listActive |
|
|
| `src/Modules/Settings/EmailMailboxController.php` | Created | Controller: index, save, delete, toggleStatus, testConnection |
|
|
| `resources/views/settings/email-mailboxes.php` | Created | Widok: lista + formularz + AJAX test |
|
|
| `routes/web.php` | Modified | 5 nowych route'ów + import EmailMailbox* + IntegrationSecretCipher |
|
|
| `resources/views/layouts/app.php` | Modified | Link "Skrzynki pocztowe" w sidebar |
|
|
|
|
## Decisions Made
|
|
|
|
| Decision | Rationale | Impact |
|
|
|----------|-----------|--------|
|
|
| Natywny stream_socket_client do testu SMTP | Brak potrzeby dodawania PHPMailer w tej fazie — wystarczy weryfikacja połączenia | PHPMailer/SwiftMailer dodany w fazie 15 |
|
|
| IntegrationSecretCipher do haseł SMTP | Reuse istniejącego mechanizmu AES-256-CBC+HMAC | Spójny wzorzec szyfrowania w projekcie |
|
|
| Auto-reset is_default przy save | Tylko jedna skrzynka domyślna | Uproszczenie logiki wyboru skrzynki |
|
|
|
|
## Deviations from Plan
|
|
|
|
### Summary
|
|
|
|
| Type | Count | Impact |
|
|
|------|-------|--------|
|
|
| Auto-fixed | 0 | - |
|
|
| Scope additions | 1 | Minimal — listActive() w repository |
|
|
| Deferred | 0 | - |
|
|
|
|
**Total impact:** Minimalna zmiana — dodano `listActive()` do repo (potrzebne w fazie 14 do selecta skrzynek).
|
|
|
|
### Deferred Items
|
|
|
|
None.
|
|
|
|
## Issues Encountered
|
|
|
|
None.
|
|
|
|
## Next Phase Readiness
|
|
|
|
**Ready:**
|
|
- Tabela `email_templates` gotowa na CRUD (faza 14)
|
|
- `EmailMailboxRepository::listActive()` gotowe do użycia w select skrzynki w szablonach
|
|
- Tabela `email_logs` gotowa na wypełnianie (faza 15)
|
|
|
|
**Concerns:**
|
|
- sonar-scanner nie uruchomiony (required skill) — do uruchomienia przed kolejnym UNIFY
|
|
|
|
**Blockers:**
|
|
- None
|
|
|
|
---
|
|
*Phase: 13-email-mailboxes, Plan: 01*
|
|
*Completed: 2026-03-15*
|