feat: Add SMTP settings and collapsible email configuration UI
- Add SMTP fields to TicketEmailSettings model (host, port, TLS/SSL, credentials, from email/name) - Update serializers with SMTP fields and is_smtp_configured flag - Add TicketEmailTestSmtpView for testing SMTP connections - Update frontend API types and hooks for SMTP settings - Add collapsible IMAP and SMTP configuration sections with "Configured" badges - Fix TypeScript errors in mockData.ts (missing required fields, type mismatches) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
133
TODO_EMAIL_AND_MESSAGING.md
Normal file
133
TODO_EMAIL_AND_MESSAGING.md
Normal file
@@ -0,0 +1,133 @@
|
||||
# Email Templates & Messaging TODO
|
||||
|
||||
## Completed Features
|
||||
|
||||
### Email Template System (Implemented)
|
||||
- [x] EmailTemplate model with BUSINESS and PLATFORM scopes
|
||||
- [x] Categories: Appointment, Reminder, Confirmation, Marketing, Notification, Report, Other
|
||||
- [x] Template variables: `{{BUSINESS_NAME}}`, `{{CUSTOMER_NAME}}`, `{{APPOINTMENT_DATE}}`, etc.
|
||||
- [x] Backend API (CRUD, preview, duplicate)
|
||||
- [x] Frontend Email Templates page with list/create/edit/delete
|
||||
- [x] EmailTemplateForm component with code editor and preview
|
||||
- [x] EmailTemplateSelector component for plugin configuration
|
||||
- [x] Plugin config support for `email_template` type variables
|
||||
- [x] Footer enforcement for FREE tier tenants
|
||||
- [x] Default templates seed command (`python manage.py seed_email_templates`)
|
||||
|
||||
### Default Email Templates Created
|
||||
- [x] Appointment Confirmation
|
||||
- [x] Appointment Reminder - 24 Hours
|
||||
- [x] Appointment Reminder - 1 Hour
|
||||
- [x] Appointment Rescheduled
|
||||
- [x] Appointment Cancelled
|
||||
- [x] Thank You - Appointment Complete
|
||||
- [x] Welcome New Customer
|
||||
|
||||
### Ticket Email Templates (Added)
|
||||
- [x] Ticket Assigned - Notification to staff when assigned
|
||||
- [x] Ticket Status Changed - Status update notification
|
||||
- [x] Ticket Reply - Staff Notification - When customer replies
|
||||
- [x] Ticket Reply - Customer Notification - When staff replies
|
||||
- [x] Ticket Resolved - Resolution confirmation
|
||||
|
||||
### Plugin Documentation Updated
|
||||
- [x] Documented `email_template` variable type in SCHEDULER_PLUGIN_SYSTEM.md
|
||||
- [x] Added template variable types table (text, textarea, email, number, url, email_template)
|
||||
- [x] Added ticket-related insertion codes to template_parser.py
|
||||
|
||||
---
|
||||
|
||||
## Pending Features
|
||||
|
||||
### Customer Onboarding Email Process
|
||||
- [ ] Welcome email when customer creates account
|
||||
- [ ] Email verification workflow
|
||||
- [ ] First booking celebration email
|
||||
- [ ] Loyalty program introduction email (if enabled)
|
||||
|
||||
### Internal Staff Messaging System
|
||||
- [ ] Message model (sender, recipient, subject, body, read status)
|
||||
- [ ] Conversation threading
|
||||
- [ ] Messaging UI in sidebar/header
|
||||
- [ ] Unread count badge
|
||||
- [ ] Push notifications for new messages
|
||||
- [ ] Email notification option for messages
|
||||
|
||||
### Ticket Email Notifications
|
||||
- [x] Email templates created (see "Ticket Email Templates" in Completed)
|
||||
- [x] Ticket email notification service (`tickets/email_notifications.py`)
|
||||
- TicketEmailService class with methods for each notification type
|
||||
- Renders email templates with ticket context variables
|
||||
- Falls back to default text templates if custom templates not found
|
||||
- Includes Reply-To header with ticket ID for email threading
|
||||
- [x] Django signals to trigger emails on ticket events (`tickets/signals.py`)
|
||||
- Pre-save handler to track state changes (assignee, status)
|
||||
- Post-save handlers for assignment, status change, and resolution
|
||||
- Comment handler for reply notifications
|
||||
- [x] Reply-To header with ticket ID for inbound processing
|
||||
- Format: `support+ticket-{id}@{domain}`
|
||||
- X-Ticket-ID header for easy parsing
|
||||
|
||||
### Email Reply Forwarding (Inbound Email Processing)
|
||||
- [ ] Setup inbound email handling (mail.talova.net integration)
|
||||
- [ ] Parse incoming emails to support@smoothschedule.com (or per-tenant)
|
||||
- [ ] Extract ticket ID from subject line or headers
|
||||
- [ ] Create ticket reply from email content
|
||||
- [ ] Notify assignee of new reply
|
||||
- [ ] Handle attachments
|
||||
|
||||
---
|
||||
|
||||
## Email Server Details
|
||||
|
||||
Current email server: `mail.talova.net`
|
||||
Test account: `poduck@mail.talova.net`
|
||||
|
||||
### Inbound Email Options
|
||||
|
||||
1. **Mailgun/SendGrid Inbound Routes**
|
||||
- Forward to webhook endpoint
|
||||
- Parse and process programmatically
|
||||
- Best for scalability
|
||||
|
||||
2. **IMAP Polling**
|
||||
- Connect to mail.talova.net via IMAP
|
||||
- Poll for new messages periodically
|
||||
- Process and delete/archive
|
||||
|
||||
3. **Email Piping**
|
||||
- Configure MTA to pipe emails to a Django management command
|
||||
- Real-time processing
|
||||
- Requires server access
|
||||
|
||||
---
|
||||
|
||||
## Platform vs Business Templates
|
||||
|
||||
### Platform Templates (Scope: PLATFORM)
|
||||
Used for system-wide emails:
|
||||
- Tenant invitation
|
||||
- Platform announcements
|
||||
- System notifications
|
||||
|
||||
### Business Templates (Scope: BUSINESS)
|
||||
Per-tenant customizable templates:
|
||||
- Appointment confirmations
|
||||
- Reminders
|
||||
- Customer communications
|
||||
- Marketing emails
|
||||
|
||||
---
|
||||
|
||||
## Running the Seed Command
|
||||
|
||||
```bash
|
||||
# Seed templates for all tenant schemas
|
||||
docker compose -f docker-compose.local.yml exec django python manage.py seed_email_templates
|
||||
|
||||
# Seed for specific schema
|
||||
docker compose -f docker-compose.local.yml exec django python manage.py seed_email_templates --schema=demo
|
||||
|
||||
# Reset to defaults (overwrites existing)
|
||||
docker compose -f docker-compose.local.yml exec django python manage.py seed_email_templates --reset
|
||||
```
|
||||
Reference in New Issue
Block a user