Plataforma completa para gerenciamento e disparo de campanhas de email usando Amazon SES, com métricas em tempo real, agendamento e gestão de falhas.
- Python 3.11+ com Django 5.0 e Django REST Framework
- PostgreSQL 15 para banco de dados
- Redis para cache e broker Celery
- Celery com Celery Beat para processamento assíncrono e agendamento
- Boto3 para integração com AWS SES
- Flower para monitoramento de tasks
- React 18 com TypeScript
- Vite como build tool
- TanStack Query (React Query) para gerenciamento de estado
- React Router v6 para roteamento
- TailwindCSS para estilização
- Recharts para gráficos
- Axios para requisições HTTP
- Unlayer Email Editor para criação visual de emails
- Docker e Docker Compose para containerização completa
- AWS SES para envio de emails
- AWS SNS para webhooks de eventos
- Docker e Docker Compose instalados
- Conta AWS com acesso ao SES
- Node.js 20+ (apenas para desenvolvimento local do frontend)
- Python 3.11+ (apenas para desenvolvimento local do backend)
cd Disparador_awsCopie o arquivo .env.example para .env:
cp .env.example .envEdite o arquivo .env com suas credenciais AWS SES. O arquivo .env.example contém todas as variáveis necessárias com explicações detalhadas.
Variáveis principais a configurar:
AWS_ACCESS_KEY_ID- Sua chave de acesso AWSAWS_SECRET_ACCESS_KEY- Sua chave secreta AWSDEFAULT_ADMIN_PASSWORD- Senha forte para o admin (mínimo 8 caracteres)SECRET_KEY- Chave secreta do Django (gere uma nova em produção)
Veja o arquivo .env.example para todas as configurações disponíveis.
- Acesse o AWS Console
- Navegue para Amazon SES
- Selecione a região (recomendado: us-east-1)
- No SES, vá em Verified identities
- Clique em Create identity
- Selecione Email address
- Digite seu email e clique em Create identity
- Verifique sua caixa de entrada e clique no link de verificação
- No SES, vá em Verified identities
- Clique em Create identity
- Selecione Domain
- Digite seu domínio
- Configure os registros DNS conforme instruído pela AWS
Por padrão, contas SES estão em "sandbox mode" e só podem enviar para emails verificados.
- No SES, vá em Account dashboard
- Clique em Request production access
- Preencha o formulário com:
- Tipo de caso de uso
- Descrição de como você vai usar o SES
- Processo de gerenciamento de bounces/complaints
- Aguarde aprovação (geralmente 24-48 horas)
- No SES, vá em Configuration sets
- Clique em Create set
- Nomeie como
email-platform-config(ou outro nome de sua escolha) - Clique em Create set
- Dentro do Configuration Set criado, vá em Event destinations
- Clique em Add destination
- Selecione os eventos: Sends, Deliveries, Bounces, Complaints, Opens, Clicks
- Escolha Amazon SNS como destino
- Crie um novo tópico SNS ou use existente
- Importante: Configure a subscrição do SNS para apontar para:
https://seu-dominio.com/api/webhooks/ses/
- Vá para IAM no AWS Console
- Crie um novo usuário para a aplicação
- Anexe a policy AmazonSESFullAccess
- Gere as credenciais (Access Key ID e Secret Access Key)
- Copie as credenciais para o arquivo
.env
docker-compose up -dIsso iniciará 7 containers:
- db: PostgreSQL
- redis: Redis
- backend: Django API (porta 8000)
- celery_worker: Worker Celery
- celery_beat: Scheduler Celery
- flower: Monitoramento Celery (porta 5555)
- frontend: Vite dev server (porta 5173)
docker-compose exec backend python manage.py makemigrations
docker-compose exec backend python manage.py migratedocker-compose exec backend python manage.py createsuperuserdocker-compose exec backend python manage.py seed_data- Frontend: http://localhost:5173
- API Backend: http://localhost:8000/api/
- Admin Django: http://localhost:8000/admin/
- Flower (Celery): http://localhost:5555
Disparador_aws/
├── backend/ # Django API
│ ├── config/ # Settings Django
│ ├── apps/
│ │ ├── campaigns/ # Gestão de campanhas
│ │ ├── emails/ # Templates e envio
│ │ ├── contacts/ # Contatos e listas
│ │ ├── analytics/ # Métricas e eventos
│ │ └── core/ # Utils e services
│ ├── tasks/ # Celery tasks
│ └── manage.py
├── frontend/ # React SPA
│ ├── src/
│ │ ├── components/ # Componentes reutilizáveis
│ │ ├── pages/ # Páginas da aplicação
│ │ ├── services/ # API calls
│ │ └── types/ # TypeScript types
│ └── package.json
├── docker-compose.yml
├── .env
└── README.md
- Criar, editar e deletar campanhas
- Envio imediato ou agendado
- Pausar campanhas em andamento
- Métricas em tempo real
- Editor Visual Drag-and-Drop (Unlayer) - Crie emails profissionais sem saber HTML
- Editor HTML avançado para desenvolvedores
- Preview em tempo real com dados de exemplo
- Variáveis dinâmicas com merge tags
- Templates reutilizáveis
- Persistência de design JSON
- Importação CSV em massa
- Organização em listas
- Custom fields por contato
- Lista de supressão automática
- Dashboard com visão geral
- Métricas por campanha
- Gráficos de performance
- Tracking de opens e clicks
- Envio via SES
- Webhooks para eventos
- Rate limiting inteligente
- Retry automático com backoff exponencial
- Celery para envios em background
- Celery Beat para agendamento
- Flower para monitoramento
GET /api/campaigns/- Listar campanhasPOST /api/campaigns/- Criar campanhaGET /api/campaigns/{id}/- DetalhesPOST /api/campaigns/{id}/send/- EnviarPOST /api/campaigns/{id}/schedule/- AgendarPOST /api/campaigns/{id}/pause/- PausarGET /api/campaigns/{id}/metrics/- Métricas
GET /api/templates/- Listar templatesPOST /api/templates/- Criar templatePOST /api/templates/{id}/preview/- Preview
GET /api/contacts/- Listar contatosPOST /api/contacts/- Criar contatoPOST /api/contacts/bulk_upload/- Upload CSV
GET /api/analytics/dashboard/- Métricas geraisGET /api/analytics/campaign/{id}/- Métricas da campanha
cd backend
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python manage.py runservercd frontend
npm install
npm run dev- Acesse o Django Admin: http://localhost:8000/admin/
- Vá em Campaigns
- Selecione uma campanha draft
- No backend, execute:
docker-compose exec backend python manage.py shell - No shell Python:
from apps.campaigns.models import Campaign from tasks.email_tasks import send_campaign_task campaign = Campaign.objects.first() campaign.status = 'sending' campaign.save() send_campaign_task.delay(campaign.id)
Acesse http://localhost:5555 para visualizar:
- Tasks em execução
- Tasks completadas/falhadas
- Gráficos de performance
- Workers ativos
Ver logs de um serviço específico:
docker-compose logs -f backend
docker-compose logs -f celery_worker
docker-compose logs -f celery_beat- Verifique se preencheu as credenciais AWS no
.env - Confirme que o email remetente está verificado no SES
- Teste a conexão: http://localhost:8000/admin/ → Core → Test SES
- Aguarde o container do PostgreSQL estar totalmente iniciado
- Execute
docker-compose pspara verificar status dos containers
- Verifique se está em sandbox mode no SES
- Confirme que o email destinatário está verificado (se em sandbox)
- Verifique os logs do Celery Worker
- Acesse o Flower para ver se as tasks estão sendo executadas
- Verifique se
VITE_API_URLno.envestá correto - Confirme que o backend está rodando na porta 8000
- Verifique CORS settings no Django
- Altere o
SECRET_KEYdo Django - Configure
DEBUG=False - Configure
ALLOWED_HOSTSadequadamente - Use HTTPS
- Configure firewall para proteger portas sensíveis
- Implemente autenticação na API
- Use variáveis de ambiente seguras (AWS Secrets Manager, etc)
Screenshots em desenvolvimento - contribua com capturas de tela!
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
Este projeto é de código aberto e pode ser usado para fins educacionais e comerciais.
Contribuições são bem-vindas! Veja o guia CONTRIBUTING.md para detalhes sobre como contribuir.
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add: Amazing feature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Veja também SECURITY.md para práticas de segurança.
Para questões sobre AWS SES, consulte a documentação oficial.
Desenvolvido com ❤️ usando Django, React e AWS SES