# Multi-Provider Email Configuration This document explains how to configure multiple email providers (Mailtrap and AWS SES) in the notification system. ## Overview The system now supports storing **multiple email provider configurations** simultaneously. Each provider's configuration is saved independently, allowing you to: - Switch between providers without losing configurations - Keep backup provider credentials ready - Test different providers easily ## Database Changes ### Migration Required Run this migration to enable multi-provider support: ```bash mysql -h -u -p < database/migrations/005_support_multiple_email_providers.sql ``` ### What Changed 1. **Removed** unique constraint on `channel_type` 2. **Added** unique constraint on `(channel_type, provider)` combination 3. **Added** `is_active` column to track active provider 4. Now supports multiple rows per channel_type with different providers **Before:** ``` id | channel_type | provider | is_enabled 1 | email | Mailtrap | true ``` **After:** ``` id | channel_type | provider | is_enabled | is_active 1 | email | Mailtrap | true | true 2 | email | AWS SES | false | false ``` ## How It Works ### 1. **API Behavior** **GET `/api/notifications/delivery/email-config`** - Returns ALL provider configurations - Indicates which provider is active - Response format: ```json { "success": true, "data": { "providers": { "mailtrap": { "enabled": true, "provider": "Mailtrap", "config": { "host": "...", ... }, "status": "Connected", "successRate": 99.5 }, "aws-ses": { "enabled": false, "provider": "AWS SES", "config": { "host": "...", ... }, "status": "Not Configured", "successRate": 0 } }, "activeProvider": "mailtrap" } } ``` **PUT `/api/notifications/delivery/email-config`** - Saves configuration for specific provider - If enabling a provider, **automatically disables others** - Only ONE provider can be `is_enabled: true` at a time ### 2. **UI Behavior** **Provider Dropdown:** - Shows: Mailtrap, AWS SES - Switching providers loads that provider's saved configuration - If no config exists, loads default template **Saving Configuration:** - Saves to database for the selected provider - Does NOT overwrite other providers' configs - Enabling saves current provider and disables others **Configuration Persistence:** - Each provider's config is stored separately - Switching between providers preserves both configurations - Form fields update automatically when switching ### 3. **Email Sending** The `emailService.js` looks for: 1. Any `is_enabled: true` config in database 2. Falls back to `.env` variables if no enabled config Both Mailtrap and AWS SES use **nodemailer SMTP**, so no backend code changes needed. ## Setup Instructions ### Step 1: Run Migration ```bash mysql -h -u -p < database/migrations/005_support_multiple_email_providers.sql ``` This will: - ✅ Update schema to support multiple providers - ✅ Create placeholder rows for Mailtrap and AWS SES - ✅ Preserve existing configuration ### Step 2: Update Prisma Schema ```bash npx prisma generate ``` This regenerates the Prisma client with the updated schema. ### Step 3: Configure Providers via UI 1. Go to `/notification/delivery` 2. Select **Mailtrap** from dropdown 3. Fill in Mailtrap credentials 4. Click **Save** 5. Switch to **AWS SES** from dropdown 6. Fill in AWS SES credentials 7. Click **Save** Both configurations are now saved! ### Step 4: Switch Between Providers To change active provider: 1. Select desired provider from dropdown 2. Toggle **Enable Email Delivery** to ON 3. Click **Save** This automatically: - ✅ Enables selected provider - ✅ Disables other provider - ✅ Updates email service to use new provider ## Provider-Specific Configuration ### Mailtrap **Required Fields:** - SMTP Host: `live.smtp.mailtrap.io` - SMTP Port: `587` - SMTP Username: `apismtp@mailtrap.io` - SMTP Password: Your Mailtrap API token - Sender Email: Your verified sender email - Sender Name: (Optional) ### AWS SES **Required Fields:** - SMTP Host: `email-smtp..amazonaws.com` (e.g., `email-smtp.us-east-1.amazonaws.com`) - SMTP Port: `587` (STARTTLS) or `465` (TLS) - SMTP Username: AWS SES SMTP username (NOT IAM user) - SMTP Password: AWS SES SMTP password (NOT secret key) - Sender Email: Must be verified in AWS SES - Sender Name: (Optional) - AWS Region: e.g., `us-east-1` - Configuration Set: (Optional) For tracking **Note:** AWS SES requires: 1. Verified sender email/domain in SES console 2. SMTP credentials generated from SES (not IAM credentials) 3. Account moved out of sandbox for production sending ## Troubleshooting ### Configuration Not Saving - Check database migration ran successfully - Verify unique constraint exists: `SHOW INDEX FROM notification_delivery_config;` - Should see `channel_type_provider` unique index ### Wrong Provider Being Used - Check `is_enabled` column in database - Only ONE provider should have `is_enabled = true` - Run: `SELECT * FROM notification_delivery_config WHERE channel_type = 'email';` ### Form Fields Don't Update When Switching - Clear browser cache - Check browser console for errors - Verify API returns all provider configs ## Files Modified ### Backend - `server/api/notifications/delivery/email-config.get.js` - Returns all providers - `server/api/notifications/delivery/email-config.put.js` - Saves per provider - `prisma/schema.prisma` - Updated unique constraint ### Frontend - `pages/notification/delivery/index.vue` - Multi-provider UI - `pages/notification/delivery/providers.vue` - Provider list ### Database - `database/migrations/005_support_multiple_email_providers.sql` - Schema migration ### Documentation - `docs/multi-provider-email-setup.md` - This file