# 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
