136 lines
6.3 KiB
Markdown
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
|