Système de gestion et réponse automatique aux emails avec IA, enrichissement OSINT et contexte marketing commercial.
MailPilot surveille les emails entrants sur node12.lan, les enrichit avec des outils OSINT installés sur node15.lan, et génère des réponses automatiques via Ollama en utilisant le contenu marketing de danielcraft.fr comme source d'information.
- Réception temps réel : IMAP IDLE pour notifications instantanées
- Classification intelligente : Détection automatique humain/robot, commercial, entreprise (basée sur le premier email de la conversation)
- Enrichissement OSINT : Utilisation des outils installés sur node15.lan (uniquement pour les humains, pas pour les robots)
- Génération IA : Réponses générées via Ollama (node15.lan:11434)
- Templates marketing : Système de templates d'emails commerciaux
- Contexte danielcraft.fr : Utilisation du contenu de danielcraft.fr pour les réponses
- Threading intelligent : Suivi des conversations par thread
- Interface temps réel : WebSocket pour mises à jour en direct avec labels de classification
- Interface type Gmail : Historique complet du fil, réponses inline, mode sombre, fuseau Europe/Paris pour les dates
- Réponses inline : Boîte de réponse qui se ferme pendant l'envoi ; en cas d'erreur, réouverture avec le texte conservé (pas de bloc "Réponse envoyée" dupliqué, seul le message "Vous (envoyé par vous)" dans le fil)
- Traitement asynchrone : Celery pour traitement en arrière-plan
- Contacts : Carnet d'adresses intégré (CRUD, recherche, export vCard/CardDAV), enrichi automatiquement par OSINT et classification (badges humain/robot, commercial, entreprise, fuites, profils)
- Nouveau message : Envoi d'emails depuis l'interface (À, Cc, Bcc, Objet, corps) avec création/mise à jour des contacts destinataires
- Interface unifiée : Headers de page homogènes (titre + barre d'outils ou recherche) sur toutes les vues (Boîte de réception, Envoyés, Spams, Corbeille, Statistiques, Contacts, OSINT email, Paramètres)
- Page OSINT : Saisie d'une adresse email dans le header et lancement d'une analyse OSINT manuelle (Kali/WSL)
- Page Paramètres : Sections formulaires (Apparence, Règles d'auto-réponse, OSINT) avec affichage du thème actuel et chemins de configuration
node12.lan (Serveur Mail)
↓ IMAP IDLE
MailPilot (node15.lan)
↓
├── Classification (humain/robot, commercial, entreprise)
│ └── Si robot → OSINT ignoré (optimisation)
├── Enrichissement OSINT (theharvester, sherlock, maigret, holehe, socialscan)
│ └── Utilise email + display_name pour meilleurs résultats
├── Génération réponse (Ollama node15.lan:11434)
├── Application template marketing
└── Envoi réponse (SMTP node12.lan)
MailPilot/
├── app/
│ ├── services/
│ │ ├── imap_monitor.py # IMAP IDLE - réception temps réel
│ │ ├── mail_service.py # IMAP/SMTP - lecture/envoi
│ │ ├── ollama_service.py # Génération réponses via Ollama
│ │ ├── osint_service.py # Enrichissement OSINT
│ │ ├── email_classification_service.py # Classification (humain/robot, commercial, entreprise)
│ │ ├── template_service.py # Gestion templates marketing
│ │ ├── danielcraft_content_service.py # Extraction contenu danielcraft.fr
│ │ ├── conversation_service.py # Threading et historique
│ │ └── contact_service.py # Gestion contacts (CRUD, export vCard)
│ ├── tasks/
│ │ ├── email_tasks.py # Tâches Celery traitement emails
│ │ ├── osint_tasks.py # Tâches OSINT asynchrones
│ │ └── contact_tasks.py # Création/mise à jour contacts (réception, envoi, OSINT)
│ ├── models/
│ │ ├── email.py # Modèles email/conversation
│ │ ├── email_classification.py # Modèle classification (lié à Conversation)
│ │ ├── identity.py # Modèle identités normalisées
│ │ ├── osint.py # Modèle enrichissement OSINT (lié à Identity)
│ │ ├── contact.py # Modèle Contact (carnet d'adresses)
│ │ └── response.py # Modèles réponses
│ ├── api/
│ │ ├── routes.py # Endpoints REST
│ │ └── websocket.py # Handlers WebSocket
│ ├── utils/
│ │ └── datetime_utils.py # Heure Europe/Paris (now_paris) pour dates créées par l'app
│ ├── templates/ # Templates HTML interface
│ ├── static/css/ # Feuilles de style (main.css)
│ ├── static/js/ # Logique frontend (app.js)
│ └── email_templates/ # Templates emails marketing
├── config/
│ ├── config.yaml # Configuration principale
│ └── email_templates.yaml # Configuration templates
├── docs/ # Documentation complète
├── celery_app.py # Configuration Celery
├── app.py # Application Flask principale
├── requirements.txt # Dépendances Python
└── README.md # Ce fichier
- Python 3.9+
- Redis (pour Celery)
- Accès IMAP/SMTP à node12.lan
- Ollama sur node15.lan:11434
- Outils OSINT installés (via install_osint_tools_trixie.sh)
- WSL (optionnel, pour développement Windows avec OSINT)
# Configuration automatique
.\scripts\setup-dev.ps1
# Éditer la configuration
notepad config\config.yaml
# Installer les dépendances (sans lxml pour éviter les problèmes de compilation)
pip install Flask Flask-SocketIO python-socketio celery redis SQLAlchemy PyYAML loguru beautifulsoup4 requests email-validator python-dotenv
# Démarrer Redis (via WSL ou Docker)
wsl redis-server
# ou
docker run -d -p 6379:6379 redis
# Démarrer tout l'environnement (dans un seul terminal)
.\scripts\start-dev.ps1
# Ou séparément :
# Terminal 1 : Celery
.\scripts\start-celery.ps1
# Terminal 2 : Application
python app.pyNote : lxml est optionnel. BeautifulSoup fonctionne avec le parser HTML natif. Voir INSTALLATION_WINDOWS.md pour plus de détails.
# Créer environnement virtuel
python3 -m venv venv
source venv/bin/activate
# Installer les dépendances
# Sur Windows, utiliser requirements-windows.txt pour éviter les problèmes de compilation
pip install -r requirements-windows.txt # Windows
# ou
pip install -r requirements.txt # Linux/Mac
# Copier la configuration dev
cp config/config.dev.yaml config/config.yaml
# Éditer la configuration
nano config/config.yaml
# Initialiser la base de données
python -c "from app.models.email import Base; from app.models.response import Base as ResponseBase; from sqlalchemy import create_engine; import yaml; config = yaml.safe_load(open('config/config.yaml')); engine = create_engine(config['database']['url']); Base.metadata.create_all(engine); ResponseBase.metadata.create_all(engine)"Voir scripts/README.md pour le déploiement complet.
Éditer config/config.yaml :
mail:
imap_host: node12.lan
imap_port: 993
smtp_host: node12.lan
smtp_port: 587
username: ton_email@danielcraft.fr
password: ton_mot_de_passe
ollama:
base_url: http://node15.lan:11434
model: gemma-2b-chat
timeout: 60
osint:
tools_path: /usr/local/bin # Chemin vers outils OSINT
danielcraft:
base_url: https://danielcraft.fr # URL du site danielcraft.frredis-servercelery -A celery_app worker --loglevel=info --pool=threads --concurrency=4python app.pyL'application sera accessible sur http://localhost:5000
- Architecture détaillée
- Interface utilisateur - Pages, headers, Contacts, OSINT, Paramètres
- Classification intelligente - Détection humain/robot, commercial, entreprise
- Enrichissement OSINT - Outils OSINT, utilisation display_name, optimisation
- Guide d'installation
- Configuration
- Environnements dev/prod
- Mise en production et déploiement - Récap prod, données sensibles, deploy.targets, mot de passe BDD après SCP
- API Reference
- Dépannage - 502 Bad Gateway, service en boucle (PostgreSQL), installation, connexion, OSINT
- Scripts de déploiement
- Roadmap
- Backend : Flask, Celery, Flask-SocketIO
- Mail : imaplib, smtplib (IMAP IDLE)
- IA : Ollama API
- OSINT : Intégration outils système (theharvester, sherlock, maigret, holehe, socialscan) avec utilisation de display_name
- Frontend : HTML/CSS/JavaScript vanilla + WebSocket
- Base de données : SQLite (peut migrer vers PostgreSQL)
© 2026 Loïc DANIEL - Tous droits réservés
Loïc DANIEL
- Email : loic5488@gmail.com
- Site : danielcraft.fr