ultisuite-backend/project-plan/ultimail.md

136 lines
6.3 KiB
Markdown

# Ultimail
**Équivalent** : Gmail
**Statut** : Partiel (backend avancé, incomplet)
---
## Résumé
Client mail unifié multi-comptes avec backend de synchronisation. Un compte Ultimail gère plusieurs comptes mail (SMTP/IMAP/POP3) avec identités d'envoi/réception distinctes, catch-all, et libellés unifiés.
## État d'implémentation réel (mai 2026)
### Déjà implémenté
- API `/api/v1/mail` avec endpoints comptes, messages, threads, envoi, règles, webhooks.
- Workers backend IMAP sync et SMTP outbox démarrés au boot.
- Schéma SQL principal mail en place (accounts, messages, folders, rules, outbox, webhooks, attachments).
### Partiel / incomplet
- Outbox planifiée: incohérence de statuts `scheduled`/`queued`.
- Règles et webhooks: briques présentes mais pas entièrement branchées au pipeline réel de réception.
- Threading, pièces jointes et identités d'envoi encore incomplets.
- Realtime WS non finalisé côté auth/events.
### Non commencé
- Tri IA en production.
- Tokens API fine-grained pour agents externes.
- Expérience desktop Tauri/mobile branchée au backend réel.
## Points de différenciation vs Gmail
- Webhooks avancés avec système de templates personnalisables (Slack, Discord, custom)
- Connectivité contrôlée avec agents IA via tokens API fine-grained
- Tri intelligent par LLM (fournisseurs OpenAI-compatibles, prompt personnalisé par règle)
- Hébergement souverain, données sous contrôle
- Multi-comptes natif avec unification complète (libellés, dossiers, recherche cross-comptes)
## Fonctionnalités
### Core
- [ ] Réception / envoi de mails (IMAP/SMTP)
- [ ] Multi-comptes avec identités d'envoi/réception
- [ ] Catch-all (envoi et réception)
- [ ] Conversations / threads
- [ ] Libellés et dossiers unifiés
- [ ] Recherche avancée
- [ ] Pièces jointes
- [ ] Brouillons, envoi programmé
- [ ] Contacts intégrés
### Automatisations
- [ ] Règles de tri à la réception
- [ ] Forward automatique
- [ ] Réponses automatiques
- [ ] Webhooks avec templates
- [ ] Tri IA (LLM + prompt personnalisé)
- [ ] Tokens API fine-grained pour agents
### UX
- [ ] Interface inspirée Gmail (migration sans friction)
- [ ] Desktop web + Tauri + mobile — UX uniforme
- [ ] Thèmes, densité, préférences par compte
- [ ] Raccourcis clavier complets
- [ ] Offline-first avec sync backend
## Intégration avec la suite (Nextcloud)
Ultimail utilise sa **propre stack mail** (pas le module mail de Nextcloud qui est insuffisant) mais s'intègre avec l'instance Nextcloud partagée pour les services complémentaires :
### Ce qu'Ultimail utilise de Nextcloud
| Service | Usage dans Ultimail | API |
|---------|--------------------|----|
| **Ultidrive (WebDAV)** | Sauvegarder les pièces jointes dans Drive | PUT `/remote.php/dav/files/{user}/` |
| **Ultidrive (WebDAV)** | Insérer des fichiers Drive dans un mail | GET + lien de partage OCS |
| **Agenda (CalDAV)** | Détecter les invitations .ics et créer des événements | PUT `.../calendars/{user}/{cal}/{uid}.ics` |
| **Agenda (CalDAV)** | Afficher les événements du jour dans la sidebar mail | REPORT calendar-query |
| **Contacts (CardDAV)** | Autocomplétion destinataires depuis le carnet | REPORT addressbook-query |
| **Contacts (CardDAV)** | Enrichir les fiches contact avec l'historique mail | Sync bidirectionnelle |
### Ce qu'Ultimail NE délègue PAS à Nextcloud
- **IMAP/SMTP** — client mail custom (stalwart-mail, maddy, ou implémentation propre)
- **Stockage des mails** — PostgreSQL + object storage propre (pas la DB Nextcloud)
- **Règles de tri, automatisations, webhooks** — moteur custom dans le backend Ultimail
- **Recherche mail** — index dédié (Meilisearch/Typesense) distinct de la recherche NC
- **Auth mail** — OAuth2/App passwords gérés par le backend Ultimail, pas par NC
### Flux d'interaction
```
┌──────────────────────────────────────────────────────────┐
│ Frontend Ultimail │
└────────────┬─────────────────────────────┬───────────────┘
│ │
▼ ▼
┌────────────────────────┐ ┌────────────────────────────┐
│ Backend Ultimail │ │ Nextcloud (headless) │
│ ├─ IMAP/SMTP client │ │ ├─ WebDAV (pièces jointes)
│ ├─ Moteur de règles │───▶│ ├─ CalDAV (invitations) │
│ ├─ Stockage mails │ │ └─ CardDAV (contacts) │
│ ├─ Webhooks/IA │ └────────────────────────────┘
│ └─ API sync clients │
└────────────────────────┘
```
Le backend Ultimail communique avec Nextcloud **côté serveur** pour :
- Créer un événement quand un mail contient une invitation .ics
- Résoudre les contacts pour l'affichage (photo, nom complet)
- Proposer "Sauvegarder dans Drive" pour les pièces jointes
## Briques technologiques envisagées
| Besoin | Option retenue | Alternatives |
|--------|----------------|--------------|
| IMAP/SMTP | stalwart-mail, maddy, ou client custom | — |
| Recherche full-text | Meilisearch, Typesense | — |
| Stockage mails | PostgreSQL + object storage (attachments) | — |
| Push/sync temps réel | WebSocket, SSE | — |
| Pièces jointes → Drive | Nextcloud WebDAV (même instance) | — |
| Calendrier (invitations) | Nextcloud CalDAV (même instance) | — |
| Contacts (autocomplétion) | Nextcloud CardDAV (même instance) | — |
| Auth | OIDC partagé Ulti Suite | — |
## Voir aussi
- [CLAUDE.md](../CLAUDE.md) — contexte technique détaillé du frontend actuel
- [ultidrive.md](ultidrive.md) — détails intégration Nextcloud fichiers
- [agenda.md](agenda.md) — détails intégration Nextcloud calendrier
- [contacts.md](contacts.md) — détails intégration Nextcloud contacts
- `components/gmail/README.md` — arborescence composants
- `lib/stores/README.md` — architecture stores