> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oximail.ch/llms.txt
> Use this file to discover all available pages before exploring further.

# Protocoles historiques & clients

> L'accès IMAP, CalDAV, CardDAV et ManageSieve pour les clients classiques, plus les points d'accès d'autodécouverte (autoconfig Mozilla, autodiscover Microsoft, mobileconfig Apple, eM Client) qui les configurent automatiquement.

OxiMail est d'abord un serveur JMAP, mais les déploiements réels comptent des Thunderbird, Apple Mail, eM Client et des clients mobiles qui parlent les protocoles classiques. La fonctionnalité `legacy` les fournit comme des **couches de traduction au-dessus du même modèle de données JMAP** : un changement de drapeau IMAP et un changement de mot-clé JMAP sont la même mutation, vue à travers deux protocoles. Il n'y a pas de second stockage de courrier qui pourrait dériver.

```toml theme={null}
[legacy]
enabled = true                 # interrupteur général (désactivé par défaut ; l'assistant l'active)
imap_bind = "0.0.0.0:993"      # IMAPS (TLS implicite)
imap_plaintext_bind = ""       # IMAP+STARTTLS sur 143 optionnel ; vide = désactivé
caldav_path = "/caldav"        # préfixe de chemin sur l'écouteur HTTPS
carddav_path = "/carddav"
managesieve_proxy_protocol = false   # voir la page Sieve
```

## IMAP (RFC 9051)

La passerelle IMAP implémente **IMAP4rev2** sur le port 993 (TLS implicite). Les points qui comptent pour un exploitant :

* **Les mêmes données, en direct.** Un message déplacé dans le webmail apparaît déplacé dans chaque session IMAP ; les changements faits par une connexion sœur sont annoncés correctement : une boîte qui rétrécit est annoncée par des lignes `EXPUNGE` (numérotation de l'ancienne vue, en ordre décroissant), jamais par un simple `EXISTS` décroissant, que la RFC 9051 interdit et que les clients multi-connexions comme eM Client punissent d'une resynchronisation complète du dossier.
* **Resynchronisation incrémentale.** `CONDSTORE` et `QRESYNC` sont pris en charge, y compris les réponses `VANISHED` : un client qui se reconnecte récupère des deltas au lieu de relister le dossier.
* **Des UID durables.** L'unicité des UID par boîte est imposée par la couche de stockage ; `UID EXPUNGE` respecte son ensemble d'UID.
* **Une identification honnête.** La commande `ID` annonce le nom du serveur et sa vraie version, et journalise l'identité déclarée du client : quand un client précis se comporte mal, les journaux peuvent le nommer.
* **Mots de passe d'application.** Les clients qui ne peuvent pas suivre le flux de connexion web s'authentifient avec des [mots de passe d'application](./multi-tenancy) par client ; les échecs alimentent fail2ban comme sur tous les autres écouteurs.

## CalDAV (RFC 4791) et CardDAV (RFC 6352)

Les agendas, les listes de tâches et les carnets d'adresses sont servis en HTTPS sur l'écouteur principal, sous les préfixes de chemin configurés. Les passerelles traduisent vers les mêmes objets JMAP que le webmail édite, et **chaque mutation est inscrite au journal de changements** : JMAP `/changes`, la `sync-collection` de la [RFC 6578](https://www.rfc-editor.org/rfc/rfc6578) et le push voient immédiatement une écriture DAV.

Comportements d'interopérabilité vérifiés contre de vrais clients (Apple Calendar, Thunderbird, eM Client 10.4) :

* **Amorçage à la racine du serveur.** Certains clients ne retiennent que le nom d'hôte de l'autodécouverte et sondent `OPTIONS` / `PROPFIND` sur `/`. La racine annonce les classes de conformité DAV combinées et répond à un `PROPFIND` authentifié avec `current-user-principal` ; chaque principal annonce aussi le home set de l'autre service, si bien qu'une seule passe de découverte trouve agendas, listes de tâches et carnets d'adresses.
* **Du XML sûr pour les parseurs stricts.** Les contenus textuels qui embarquent du HTML ou un `&` nu sont enveloppés en CDATA : une seule description d'événement décorée ne peut pas rendre tout un multiget illisible et tuer la synchronisation.
* **Des ETag en empreinte de contenu.** L'ETag d'un VEVENT change exactement quand sa représentation change, y compris quand une exception de récurrence est ajoutée depuis un autre client : un `If-Match` périmé échoue en `412` et le client se resynchronise au lieu d'écraser en silence le changement qu'il n'a jamais vu. Idem pour les VTODO.
* **Un filtrage côté serveur réel.** `calendar-query` évalue `time-range` (conscient des récurrences, sémantique de chevauchement), `prop-filter`, `param-filter` et `text-match` ; une forme de filtre que le serveur ne modélise pas dégrade vers un résultat trop inclusif, jamais vers un résultat vide en silence. `free-busy-query` renvoie un vrai `VFREEBUSY`.
* **Des fuseaux qui font l'aller-retour.** `DTSTART;TZID=` est émis avec le composant `VTIMEZONE` correspondant (généré depuis la base IANA, 597 zones), les noms de fuseaux du registre Windows émis par Outlook/Exchange sont normalisés vers IANA sur chaque chemin d'ingestion, et les propriétés paramétrées à la façon d'Outlook (`SUMMARY;LANGUAGE=fr-FR:...`) s'analysent correctement.
* **Des collections créées par le client.** `MKCALENDAR` à une URL choisie par le client fonctionne (Apple Calendar et Thunderbird créent leurs collections à une URL en UUID de leur choix).
* **Des alarmes modélisées.** Les composants `VALARM` des VEVENT et des VTODO s'importent dans le modèle d'alertes et sont réémis au GET, y compris les déclencheurs absolus (`VALUE=DATE-TIME`). Les flux ICS publics ne portent volontairement aucun VALARM : un abonné ne doit pas hériter des rappels de l'éditeur.

## Points d'accès d'autodécouverte

Quatre familles de points d'accès configurent les clients automatiquement (adossées aux enregistrements DNS de la [page d'authentification](./email-auth-security)) :

| Point d'accès                                  | Famille de clients                                                                                                                                                                                                                                                   |
| ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/.well-known/autoconfig/mail/config-v1.1.xml` | Thunderbird et l'autoconfig à la Mozilla.                                                                                                                                                                                                                            |
| `/autodiscover/autodiscover.xml` (GET et POST) | Outlook et l'autodiscover à la Microsoft. Les entrées DAV portent des URL `https://` complètes et des marqueurs explicites d'authentification par mot de passe.                                                                                                      |
| `/apple/mobileconfig`                          | Profil iOS / macOS : Mail, CalDAV et CardDAV en un seul téléchargement de profil.                                                                                                                                                                                    |
| `/emclient/settings.xml?email=...`             | Un fichier de compte eM Client préconfiguré (IMAP 993 / SMTP 465 / CalDAV / CardDAV, authentification par mot de passe). Son import contourne l'assistant de compte d'eM Client, dont le défaut Windows SSO échoue en silence sur les machines jointes à un domaine. |

<Note>
  Derrière un proxy inverse, faites passer **tout** vers OxiMail sauf le chemin de défi ACME : l'extrait généré par l'assistant fait exactement cela. Une liste blanche de routes, ou une interception des `OPTIONS`/CORS au niveau du proxy, casse en silence la découverte et le DAV ; voir [Premier démarrage](../first-boot).
</Note>

## Ce que le mode legacy ne change pas

Les passerelles sont des chemins d'accès en lecture-écriture, pas un serveur parallèle : l'authentification, le chiffrement au repos, l'isolation par organisation, fail2ban et la limitation de débit sont la même mécanique que pour JMAP. Désactiver `[legacy]` retire les écouteurs et les préfixes de routes ; les données restent intactes.
