⚠️ VERSÃO BETA - Este projeto está em fase ativa de desenvolvimento e testes. Use com cautela e sempre revise as ações antes da execução.
Agente local em Python para cancelar inscrições de e-mails de propaganda de forma segura, reversível e auditável usando a Gmail API.
- ✅ APIs oficiais apenas (Gmail API via OAuth Desktop App)
- ✅ Fluxo de unsubscribe correto com prioridades:
List-Unsubscribe-Post: List-Unsubscribe=One-Click→ POST com headermailto:→ e-mail automático "unsubscribe"- Sem cabeçalho → filtro Gmail (arquivar + marcar como lido)
- ✅ Dry-run obrigatório - sempre mostra o que será feito antes
- ✅ Confirmação antes de executar (batch ou individual)
- ✅ Whitelist inteligente - nunca descadastra bancos, governo, etc.
- ✅ Undo - permite reverter filtros aplicados
- ✅ Rate limiting - 30-60 ações por hora com delays aleatórios
- ✅ Logs JSONL - auditoria completa em
logs/unsubscribe_YYYYMMDD.jsonl
# Clone o repositório
git clone <seu-repositorio>
cd gmail-unsubscribe-agent
# Execute o setup
python setup.py- Acesse Google Cloud Console
- Crie um novo projeto ou selecione um existente
- Ative a Gmail API
- Crie credenciais OAuth 2.0 (Aplicativo Desktop)
- Baixe o arquivo JSON e renomeie para
credentials.json - Coloque o arquivo na pasta raiz do projeto
# Execute uma análise (dry run)
python main.py analisar
# Execute o descadastro
python main.py executarpython main.py analisar [--dias 30] [--max-emails 100]- Analisa e-mails dos últimos N dias
- Mostra candidatos para descadastro
- Nunca executa ações - apenas mostra o que seria feito
python main.py executar [--dias 30] [--max-emails 100] [--lote]- Executa o descadastro dos candidatos encontrados
--lote: processa todos de uma vez (sem confirmação individual)- Sem
--lote: confirma cada candidato individualmente
python main.py reverter [--count 1]- Reverte as últimas N ações realizadas
- Funciona apenas para filtros Gmail criados
python main.py status- Mostra status atual do sistema
- Lista ações recentes
- Informações sobre rate limiting
O sistema possui whitelist automática que NUNCA descadastra:
- Governo:
gov.br,receita.fazenda.gov.br,sefaz.gov.br - Bancos:
bancodobrasil.com.br,itau.com.br,bradesco.com.br, etc. - E-commerce:
amazon.com.br,mercadolivre.com.br,americanas.com.br, etc. - Provedores:
gmail.com,outlook.com,yahoo.com, etc. - Mídia:
globo.com,folha.com.br,g1.com.br, etc.
banco,financeiro,cartão,contanota fiscal,nf-e,fatura,boletogoverno,receita,tribunal,políciaalerta,urgente,importante,oficial
Todos os logs são salvos em formato JSONL em logs/unsubscribe_YYYYMMDD.jsonl:
{
"timestamp": "2024-01-15T10:30:00",
"level": "ACTION",
"message": "Action: one_click_unsubscribe",
"data": {
"sender": "newsletter@example.com",
"url": "https://example.com/unsubscribe",
"status_code": 200,
"description": "One-click unsubscribe sent to newsletter@example.com"
}
}Edite o arquivo .env para personalizar:
# Rate Limiting
MAX_ACTIONS_PER_HOUR=50
MIN_DELAY_SECONDS=1
MAX_DELAY_SECONDS=3
# Logging
LOG_LEVEL=INFO- Detecta header
List-Unsubscribe-Post: List-Unsubscribe=One-Click - Envia POST com header
List-Unsubscribe: One-Click - Mais seguro e eficiente
- Detecta links
mailto:no headerList-Unsubscribe - Envia e-mail automático com assunto "Unsubscribe"
- Método tradicional
- Quando não há headers de unsubscribe
- Cria filtro Gmail para arquivar e marcar como lido
- Reversível - pode ser desfeito com
reverter
⚠️ Sempre executeanalisarantes deexecutar⚠️ O sistema NUNCA clica em links HTML - apenas usa headers⚠️ Rate limiting automático - respeita limites da API⚠️ Whitelist rigorosa - protege e-mails importantes⚠️ Logs completos - auditoria de todas as ações
Em caso de problemas:
- Verifique os logs em
logs/ - Execute
python main.py statuspara diagnóstico - Use
python main.py reverterpara desfazer ações - Verifique se
credentials.jsonestá configurado corretamente
Este projeto é para uso pessoal e educacional. Use com responsabilidade e sempre respeite os termos de serviço do Gmail.