# Port68 - SendDate ## Sistema de Envio de Emails Agendados Sistema web moderno para agendar envio de emails em data e hora pré-determinadas, com painel de estatísticas em tempo real e interface intuitiva. ### ✨ Características - ✅ **Interface intuitiva** com painel de estatísticas em tempo real - ✅ **CRUD completo** de emails agendados - ✅ **Filtro por status** (Pendente, Enviado, Erro) - ✅ **Edição e exclusão** de emails antes do envio - ✅ **Processamento automático** via cron job - ✅ **Processamento manual** com botão "Processar Agora" - ✅ **Sistema de notificações Toast** moderno e não intrusivo - ✅ **Validações robustas** frontend e backend - ✅ **Design responsivo** para desktop e mobile - ✅ **Sistema de logs** para rastreamento - ✅ **Seguro** - credenciais protegidas via .gitignore ### 🎨 Novidades da v2.0 - **Painel de Estatísticas**: Cards animados mostrando total de emails, pendentes, enviados e erros - **Botão Processar Agora**: Execute o processamento de emails diretamente da interface - **Toast Notifications**: Feedback visual elegante e não intrusivo - **Segurança Aprimorada**: Credenciais não são mais commitadas no repositório - **UI/UX Melhorada**: Design moderno com animações suaves - **Validações Frontend**: Validação robusta antes de enviar dados ao servidor ### Estrutura ``` port68-senddate/ ├── index.html # Interface principal ├── style.css # Estilos ├── script.js # JavaScript frontend ├── controller.php # API/Controller PHP ├── conexao.php # Conexão com banco de dados ├── cron.php # Processador de emails agendados ├── database.sql # Script para criar banco de dados ├── README.md # Esta documentação ├── models/ │ └── EmailModel.php # Model para gerenciar emails └── logs/ # Logs de execução (criado automaticamente) ``` ### Instalação > ⚠️ **Importante**: Para implantação completa, consulte o [Guia de Deploy](DEPLOY.md) 1. **Criar o banco de dados:** - Abra phpMyAdmin ou execute o arquivo `database.sql`: ```bash mysql -u root -p < database.sql ``` 2. **Configurar conexão com banco de dados:** - Copie `conexao.php` e ajuste as credenciais, OU - Crie `conexao.local.php` com suas credenciais (recomendado para produção) ```php define('DB_HOST', 'localhost'); define('DB_USER', 'seu_usuario'); define('DB_PASS', 'sua_senha'); define('DB_NAME', 'port68_senddate'); ``` 3. **Configurar envio de email (SMTP - Recomendado):** - Copie `mail_config.sample.php` para `mail_config.php` - Preencha com as credenciais da sua conta de email - Exemplo (Hostinger): ```php define('SMTP_HOST', 'smtp.hostinger.com'); define('SMTP_PORT', 465); // 465 para SSL define('SMTP_USER', 'seu@email.com'); define('SMTP_PASS', 'sua_senha'); define('SMTP_FROM', 'seu@email.com'); define('SMTP_ENCRYPTION', 'ssl'); ``` - ⚠️ **NUNCA** commite `mail_config.php` - está protegido no `.gitignore` 4. **Acessar a aplicação:** - http://localhost/portifolio/port68-senddate/index.html - (ou conforme seu servidor estiver configurado) ### Uso #### 1. Agendar Email 1. Preencha o formulário com: - Nome do destinatário - Email - Data e hora para envio - Assunto - Mensagem (pode conter HTML) 2. Clique em "Agendar Email" 3. O email ficará com status "Pendente" #### 2. Visualizar Estatísticas - **Cards no topo** mostram em tempo real: - Total de emails cadastrados - Emails pendentes - Emails enviados com sucesso - Emails com erro #### 3. Gerenciar Emails Agendados - **Ver lista:** A tabela mostra todos os emails agendados - **Filtrar:** Use o select "Filtro" para ver apenas Pendentes, Enviados ou Com Erro - **Editar:** Clique no botão "Editar" (disponível apenas para emails pendentes) - **Deletar:** Clique no botão "Deletar" para remover - **Processar Agora:** Clique no botão "🚀 Processar Agora" para enviar emails pendentes imediatamente #### 4. Processar Emails Automaticamente Os emails são enviados automaticamente quando chega o horário agendado. Para isso funcionar: **Opção A: Cron Job (Recomendado para Produção)** ```bash # Adicione ao crontab para executar a cada 5 minutos */5 * * * * /usr/bin/php /caminho/para/port68-senddate/cron.php ``` **Opção B: Chamada via URL (Alternativa)** ``` https://seusite.com/portifolio/port68-senddate/cron.php?token=port68_senddate_secret_token_2025 ``` **Opção C: Manualmente via Interface** - Clique no botão "🚀 Processar Agora" na interface ### Statusos de Email | Status | Descrição | |--------|-----------| | **Pendente** | Email agendado, aguardando data de envio | | **Enviado** | Email enviado com sucesso | | **Erro** | Falha ao enviar, tente novamente | ### Banco de Dados **Tabela: `port68_emails`** | Campo | Tipo | Descrição | |-------|------|-----------| | id | INT | ID único (PK) | | nome | VARCHAR(100) | Nome do destinatário | | email | VARCHAR(255) | Email do destinatário | | assunto | VARCHAR(255) | Assunto do email | | mensagem | LONGTEXT | Corpo do email (pode conter HTML) | | data_envio | DATETIME | Data e hora agendada | | status | ENUM | pendente/enviado/erro | | tentativas | INT | Número de tentativas | | ultima_tentativa | DATETIME | Última tentativa de envio | | created_at | TIMESTAMP | Data de criação | | updated_at | TIMESTAMP | Data de última atualização | ### Validações **Frontend (JavaScript):** - Campos obrigatórios - Formato de email válido - Data no futuro - Comprimento mínimo/máximo de textos **Backend (PHP):** - Validação de todos os campos - Prevenção de duplicação - Sanitização de entrada - Escape de strings SQL ### Segurança - ✅ Validação de entrada em ambos os lados - ✅ Escape de SQL via prepared statements - ✅ Token de acesso para cron job - ✅ Sanitização de HTML - ✅ Headers CORS não abertos (seguro) ### Logs Logs de execução são salvos em `logs/cron.log`: ``` 2025-01-13 14:30:45 - {"success":true,"message":"Processamento concluído: 2 enviados, 0 com erro","enviados":2,"erros":0,"detalhes":[]} ``` ### Exemplos de Uso #### Agendar email para amanhã às 10h: 1. Preencher formulário 2. Selecionar "Amanhã às 10:00" 3. Clicar "Agendar Email" #### Editar email antes do envio: 1. Clicar "Editar" na linha desejada 2. Modificar dados 3. Clicar "Salvar Alterações" #### Processar emails via command line: ```bash php /caminho/para/port68-senddate/cron.php ``` ### Troubleshooting **Problema:** Emails não são enviados - Verifique se o `mail_config.php` foi criado e preenchido corretamente - Verifique se o cron job está configurado - Verifique se o servidor permite envio de emails (php.ini) caso esteja usando `mail()` como fallback - Verifique os logs em `logs/cron.log` **Problema:** Erro de conexão ao banco - Verifique credenciais em `conexao.php` - Verifique se o banco de dados foi criado - Verifique se o MySQL está rodando **Problema:** Validações na frontend não funcionam - Limpar cache do navegador - Verifique se o `script.js` está carregando corretamente ### Desenvolvimento Futuro - [ ] Suporte a templates de email - [ ] Agendamento recorrente - [ ] Cancelamento de emails agendados - [ ] Rastreamento de abertura - [ ] Sistema de filas robusto - [ ] Interface de administrador com gráficos - [ ] Integração com email providers (SendGrid, Mailgun) ### Licença © 2025 Matheus LOBO - Projeto Educacional ### Suporte Para dúvidas ou problemas, consulte a documentação ou entre em contato.