brand-master/EMAIL_SETUP.md
dvirlabs d0b672ac15
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Update app
2026-05-10 03:26:03 +03:00

313 lines
7.6 KiB
Markdown

# Email Configuration Guide
## Overview
The Brand Master application supports sending transactional emails for:
- Password reset PINs
- Welcome emails for new users
- Order confirmations (future)
- Contact form notifications (future)
## Email Service Options
### Option 1: Gmail SMTP (Recommended for Testing)
1. **Create App Password** (if using Gmail with 2FA):
- Go to Google Account Settings → Security
- Enable 2-Factor Authentication
- Go to "App passwords"
- Generate app password for "Mail"
- Copy the 16-character password
2. **Configure Environment Variables**:
```bash
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password
SMTP_FROM=noreply@brand-master.com
```
### Option 2: SendGrid (Recommended for Production)
1. **Create SendGrid Account**:
- Sign up at https://sendgrid.com
- Verify your sender email
- Create API key
2. **Configure Environment Variables**:
```bash
SMTP_HOST=smtp.sendgrid.net
SMTP_PORT=587
SMTP_USERNAME=apikey
SMTP_PASSWORD=your-sendgrid-api-key
SMTP_FROM=noreply@brand-master.com
```
### Option 3: Amazon SES (Production - Most Reliable)
1. **Setup SES**:
- Sign up for AWS SES
- Verify your domain or email
- Get SMTP credentials
2. **Configure Environment Variables**:
```bash
SMTP_HOST=email-smtp.us-east-1.amazonaws.com
SMTP_PORT=587
SMTP_USERNAME=your-ses-smtp-username
SMTP_PASSWORD=your-ses-smtp-password
SMTP_FROM=noreply@brand-master.com
```
## Kubernetes Deployment Configuration
### Method 1: Update values.yaml (Recommended)
Edit `brand-master-chart/values.yaml`:
```yaml
backend:
env:
# Existing vars...
- name: SMTP_HOST
value: "smtp.gmail.com"
- name: SMTP_PORT
value: "587"
- name: SMTP_USERNAME
value: "your-email@gmail.com"
- name: SMTP_PASSWORD
value: "your-app-password" # Use secrets in production!
- name: SMTP_FROM
value: "noreply@brand-master.com"
```
### Method 2: Use Kubernetes Secret (Production)
1. **Create Secret**:
```bash
kubectl create secret generic brand-master-email \
--from-literal=smtp-username=your-email@gmail.com \
--from-literal=smtp-password=your-app-password \
-n my-apps
```
2. **Update Deployment** (`brand-master-chart/templates/backend-deployment.yaml`):
```yaml
env:
# ... existing env vars ...
- name: SMTP_HOST
value: "smtp.gmail.com"
- name: SMTP_PORT
value: "587"
- name: SMTP_USERNAME
valueFrom:
secretKeyRef:
name: brand-master-email
key: smtp-username
- name: SMTP_PASSWORD
valueFrom:
secretKeyRef:
name: brand-master-email
key: smtp-password
- name: SMTP_FROM
value: "noreply@brand-master.com"
```
## Local Development (.env file)
Create `backend/.env`:
```env
DATABASE_URL=postgresql://brand_master_user:your_password@localhost/brand_master_db
JWT_SECRET_KEY=your-secret-key
FRONTEND_URL=http://localhost:5173
BACKEND_URL=http://localhost:8000
# Email Configuration
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password
SMTP_FROM=noreply@brand-master.com
# Admin Credentials
ADMIN_EMAIL=admin@brandmaster.com
ADMIN_PASSWORD=Admin123!
```
## Testing Email Functionality
### Test Password Reset
1. **Trigger Password Reset**:
```bash
curl -X POST https://api-brand-master.dvirlabs.com/api/auth/request-reset-pin \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com"}'
```
2. **Check Email**:
- User should receive email with 6-digit PIN
- PIN expires in 15 minutes
3. **Reset Password**:
```bash
curl -X POST https://api-brand-master.dvirlabs.com/api/auth/reset-password-with-pin \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"pin": "123456",
"new_password": "NewPassword123!"
}'
```
### Test Welcome Email
1. **Register New User**:
```bash
curl -X POST https://api-brand-master.dvirlabs.com/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "newuser@example.com",
"full_name": "Test User",
"password": "password123"
}'
```
2. **Check Email**:
- User should receive welcome email
### Check Backend Logs
If emails aren't being sent:
```bash
# View backend logs
kubectl logs -n my-apps deployment/brand-master-backend -f
# Look for:
# ✅ Email sent successfully to user@example.com
# OR
# ⚠️ SMTP not configured. Email would have been sent to: user@example.com
# OR
# ❌ Failed to send email to user@example.com: <error details>
```
## Troubleshooting
### Issue: "SMTP not configured" message
**Problem**: SMTP environment variables not set
**Solution**:
```bash
# Check if variables are set in pod
kubectl exec -n my-apps deployment/brand-master-backend -- env | grep SMTP
# Should show:
# SMTP_HOST=smtp.gmail.com
# SMTP_PORT=587
# SMTP_USERNAME=your-email@gmail.com
# SMTP_PASSWORD=***
# SMTP_FROM=noreply@brand-master.com
```
### Issue: "Authentication failed" error
**Problem**: Wrong credentials or app password required
**Solution**:
- For Gmail: Use App Password, not account password
- Verify credentials are correct
- Check if 2FA is enabled (required for App Passwords)
### Issue: "Connection refused" error
**Problem**: Wrong SMTP host or port, or firewall blocking
**Solution**:
- Verify SMTP_HOST and SMTP_PORT are correct
- Check Kubernetes network policies
- Test SMTP connection from pod:
```bash
kubectl exec -n my-apps deployment/brand-master-backend -- \
nc -zv smtp.gmail.com 587
```
### Issue: Emails go to spam
**Problem**: Missing SPF/DKIM records or sender reputation
**Solution**:
- Use verified domain with proper DNS records
- Use SendGrid or SES for production
- Add SPF record: `v=spf1 include:_spf.google.com ~all`
- Setup DKIM signing
## Email Templates
Email templates are in `backend/app/services/email.py`:
- `send_password_reset_pin()` - Password reset with PIN
- `send_welcome_email()` - Welcome new users
To customize:
1. Edit template in `email.py`
2. Rebuild backend image
3. Redeploy
## Production Best Practices
1. ✅ **Use Kubernetes Secrets** for credentials
2. ✅ **Use dedicated email service** (SendGrid, SES)
3. ✅ **Setup SPF/DKIM** for deliverability
4. ✅ **Monitor email sending** (logs, metrics)
5. ✅ **Implement rate limiting** to prevent abuse
6. ✅ **Use verified sender domain**
7. ✅ **Add unsubscribe links** for marketing emails
8. ✅ **Keep templates professional** and branded
## Quick Setup for Testing (Gmail)
```bash
# 1. Update values.yaml
nano brand-master-chart/values.yaml
# Add under backend.env:
- name: SMTP_HOST
value: "smtp.gmail.com"
- name: SMTP_PORT
value: "587"
- name: SMTP_USERNAME
value: "your-email@gmail.com"
- name: SMTP_PASSWORD
value: "your-16-char-app-password"
- name: SMTP_FROM
value: "Brand Master <noreply@brand-master.com>"
# 2. Redeploy
cd brand-master-chart
helm upgrade brand-master . --namespace my-apps --wait
# 3. Test
curl -X POST https://api-brand-master.dvirlabs.com/api/auth/request-reset-pin \
-H "Content-Type: application/json" \
-d '{"email": "your-test-email@gmail.com"}'
# 4. Check email inbox
```
## Support
If emails still don't work:
1. Check backend logs for error messages
2. Verify SMTP credentials
3. Test SMTP connection manually
4. Check spam folder
5. Try different email provider
---
**Status**: Email service implemented and ready to configure
**Last Updated**: May 8, 2026