# Story 5.4: Email Notification System ## Metadata - **Story ID**: 5.4 - **Title**: Email Notification System - **Epic**: 5 - Infrastructure Adapters - **Status**: Pending - **Priority**: High - **Estimated Time**: 5-6 hours - **Dependencies**: 1.1, 2.2 ## Goal Implement a complete email notification system with SMTP support, HTML email templates, and integration with identity management. ## Description This story implements email notifications using SMTP with support for HTML emails and templates. It integrates with the identity service to send verification and password reset emails. ## Deliverables ### 1. Notification Interface (`pkg/notification/notification.go`) - `Notifier` interface with: - `SendEmail(ctx context.Context, to, subject, body string) error` - `SendHTMLEmail(ctx context.Context, to, subject, htmlBody, textBody string) error` - `SendSMS(ctx context.Context, to, message string) error` (placeholder) ### 2. SMTP Implementation (`internal/infra/email/smtp_notifier.go`) - SMTP client setup - HTML email support - Email templates for: - Email verification - Password reset - Welcome email ### 3. Integration with Identity Service - Send verification email on registration - Send password reset email - Send welcome email ### 4. Configuration - Email config in `config/default.yaml`: - SMTP server - Port - Username/password - From address ### 5. DI Integration - Provider function for Notifier - Register in DI container ## Acceptance Criteria - [ ] Notification interface is defined - [ ] SMTP implementation works correctly - [ ] HTML emails are sent successfully - [ ] Email templates work - [ ] Verification emails are sent on registration - [ ] Password reset emails are sent - [ ] Configuration is loaded from config - [ ] Notifier is injectable via DI ## Files to Create/Modify - `pkg/notification/notification.go` - Notification interface - `internal/infra/email/smtp_notifier.go` - SMTP implementation - `internal/infra/email/templates.go` - Email templates - `internal/identity/user_service.go` - Integrate email sending - `internal/di/providers.go` - Add notifier provider - `config/default.yaml` - Add email config