ultisuite-backend/project-plan/ultimail.md

6.3 KiB

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 — contexte technique détaillé du frontend actuel
  • ultidrive.md — détails intégration Nextcloud fichiers
  • agenda.md — détails intégration Nextcloud calendrier
  • contacts.md — détails intégration Nextcloud contacts
  • components/gmail/README.md — arborescence composants
  • lib/stores/README.md — architecture stores