Apache James est un serveur de messagerie open source et, à la fois, une boîte à outils pour les applications dont la logique métier repose sur l’e-mail. Son nom signifie Java Apache Mail Enterprise Server. James peut accepter et relayer des messages via SMTP, gérer des boîtes aux lettres locales, les rendre disponibles via IMAP, POP3 ou JMAP et piloter l’ensemble du flux de messages au moyen de composants de traitement librement combinables. Le projet ne se décrit donc pas seulement comme un serveur, mais comme une plateforme d’inversion de contrôle sur la JVM, composable de manière modulaire (Apache James – Présentation du projet).
Ce double rôle distingue James des agents de transfert de courrier classiques tels que Postfix et des appliances de sécurité prêtes à l’emploi. Un administrateur peut exploiter James comme simple relais SMTP, comme serveur de boîtes aux lettres complet ou comme moteur de messagerie intégré à un produit. L’antispam, le chiffrement, l’archivage ou le routage spécifique à un domaine ne résultent pas d’un bloc fonctionnel rigide, mais d’un pipeline de Matchers et de Mailets. James est ainsi exceptionnellement adaptable, mais transfère une partie de la responsabilité produit du fabricant vers l’organisation qui l’exploite.
L’explication suit un message à travers James : des serveurs de protocoles à la file d’attente et au pipeline de Mailets, jusqu’au stockage des boîtes aux lettres. Les variantes d’exploitation, le diagnostic et enfin l’évolution technique du projet s’appuient sur cette base.
Commandes adaptées
Des commandes prêtes à l’emploi autour de Apache James pour PowerShell et le shell Unix, avec des exemples à copier.
Articles sur Apache James (4)
- 28 août 2026 Contrôles TotemoMail Contrôles essentiels pour les administrateurs TotemoMail : arrêter le serveur, vérifier les files d’attente et les purger de manière contrôlée
- 24 août 2026 Test de charge JMeter Test de charge SMTP avec Apache JMeter en pratique : 10'000 e-mails, cinq chemins de règles, un rapport HTML
- 11 août 2026 Reconstruire l’ensemble de règles Reconstruire de manière structurée les ensembles de règles Apache James : outils et méthode
- 17 juin 2026 Apache James ↔ M365 Comprendre le routage des e-mails entre totemomail et Exchange Online
Positionnement : MTA, MDA et plateforme applicative
Dans un système de messagerie, chaque composant ne remplit pas le même rôle. Un Mail User Agent (MUA) est le client de l’utilisateur, par exemple Thunderbird. Un Mail Transfer Agent (MTA) transporte les messages entre systèmes. Un Mail Delivery Agent (MDA) dépose un message dans la boîte aux lettres cible. James peut être simultanément MTA et MDA ; par ses modules de protocoles et de boîtes aux lettres, il fournit en outre des services côté serveur aux MUA. La vue d’ensemble officielle des composants mentionne à cet effet des projets distincts pour le serveur, les protocoles, les Mailets, les boîtes aux lettres et les tests (Apache James – Composants logiciels).
| Rôle | Mise en œuvre dans James | Point de transfert |
|---|---|---|
| Transport de messages | Serveurs SMTP et LMTP, file d’attente, Mailet de livraison distante | autres MTA, relais et passerelles |
| Livraison locale | Pipeline de Mailets et Mailbox API | utilisateurs, domaines et quotas |
| Accès aux boîtes aux lettres | IMAP, POP3 et JMAP | clients de messagerie et applications web |
| Logique de filtrage | Matchers, Mailets, Processors et Sieve | règles internes et services de contrôle externes |
| Administration | WebAdmin REST API, CLI, Health Checks et métriques | automatisation et supervision |
James n’est donc pas un client de messagerie, ni une passerelle de messagerie sécurisée préconfigurée. Il fournit des briques pour le transport, la livraison, le stockage et le traitement. La distribution et la configuration choisies déterminent s’il devient un simple relais, un service de messagerie mutualisé ou une passerelle spécifique à un produit.
Protocoles, TLS et ports
James fournit SMTP, LMTP, IMAP, POP3 et ManageSieve comme services basés sur TCP ; JMAP et WebAdmin utilisent HTTP (Apache James – Serveurs de protocoles). Selon l’écouteur, TLS protège une connexion chiffrée dès le départ ou est inséré dans une session existante via StartTLS. DNS ne fait pas partie du processus James, mais il est indispensable à un MTA public : les enregistrements MX déterminent la destination, les enregistrements A et AAAA ses adresses, et les enregistrements PTR influencent la réputation des connexions sortantes.
Le seul numéro de port ne décrit pas encore la sémantique de sécurité. Le port 25 est destiné au transport de serveur à serveur ; la soumission authentifiée par les clients relève du port 587 selon la RFC 6409. Depuis la RFC 8314, le port 465 est à nouveau enregistré pour la soumission de messages avec chiffrement implicite. Les mêmes deux modèles s’appliquent à IMAP et POP3 : connexion en clair avec StartTLS possible ou établissement immédiat de TLS.
| Service | Ports typiques | Standard | Rôle dans James |
|---|---|---|---|
| SMTP | 25, 587, 465 | RFC 5321 | acceptation, relais et soumission |
| LMTP | configurable, 24 enregistré | RFC 2033 | transfert local avec statut par destinataire |
| IMAP4rev2 | 143, 993 | RFC 9051 | accès synchrone aux boîtes aux lettres |
| POP3 | 110, 995 | RFC 1939 | récupération simple des messages |
| ManageSieve | 4190 | RFC 5804 | gestion des règles Sieve propres aux utilisateurs |
| JMAP Mail | généralement 443 | RFC 8621 | accès HTTP aux boîtes aux lettres pour les clients modernes |
Les ports sont configurables ; la combinaison de l’écouteur, du protocole, du mode TLS et de l’authentification est déterminante. La IANA Service Name and Port Number Registry reste la référence pour les affectations enregistrées.
Approche architecturale
James suit une architecture basée sur les composants. Les serveurs de protocoles, la file d’attente, la logique de traitement, les boîtes aux lettres, la gestion des utilisateurs, l’index de recherche et l’administration sont séparés par des API et assemblés via l’injection de dépendances. Les distributions documentées pour James 3.9 reposent à cet effet sur Google Guice ; l’architecture Spring appartient à une génération antérieure. Ce découplage ne relève pas seulement de l’organisation du code : il permet d’utiliser la même Mailbox API avec différentes couches de persistance et la même logique de Mailets dans des profils de serveur très différents.
Le chemin de données central est asynchrone. Un écouteur SMTP n’a pas besoin de livrer intégralement un message accepté avant de répondre à la connexion. Il place un objet mail dans une file d’attente ; un Spooler l’en retire ultérieurement et l’exécute à travers le conteneur de Mailets. La file d’attente sépare ainsi la charge de réception, la durée de traitement et la disponibilité des systèmes en aval. La documentation d’exploitation distribuée la désigne donc à juste titre comme un composant obligatoire d’un serveur SMTP (Apache James – Exploitation d’un serveur distribué).
Le parcours de traitement d’un message
- Acceptation par protocole : SMTP ou LMTP vérifie la session, l’authentification, l’expéditeur d’enveloppe et les destinataires. Après la fin de
DATA, un objet interneMailest créé avec l’enveloppe, le contenu MIME et les attributs. - File d’attente : l’objet est mis en file de manière persistante ou volatile. Ce n’est qu’à partir de ce point que l’acceptation est découplée du traitement.
- Spooler : des workers retirent les entrées de la file d’attente et les transmettent au conteneur de Mailets.
- Processor : un Processor nommé contient une liste ordonnée de paires Matcher/Mailet. Le Processor obligatoire
rootconstitue le point d’entrée. - Matcher : un Matcher ne modifie pas le message, mais renvoie le sous-ensemble des destinataires pour lesquels une condition s’applique.
- Mailet : le Mailet associé modifie le message ou l’enveloppe, déclenche un effet secondaire, livre localement ou à distance, ou bifurque vers un autre Processor.
- Résultat : le message aboutit dans une boîte aux lettres utilisateur, dans la livraison sortante, dans un Mail Repository pour traitement ultérieur, ou est terminé après une action réussie.
Un détail important est la division par destinataire. Si un Matcher ne correspond qu’à une partie des destinataires, le conteneur divise le traitement entre ensembles de destinataires correspondants et non correspondants. Les règles ne s’appliquent donc pas nécessairement à un message MIME complet. Un Mailet peut en outre sauter directement vers un autre Processor via ToProcessor ; le pipeline ressemble ainsi davantage à un graphe de traitement orienté qu’à une simple liste linéaire. La documentation officielle du conteneur de Mailets décrit précisément ce modèle.
Un modèle minimal et simplifié se présente ainsi :
<processor state="root" enableJmx="true">
<mailet match="RelayLimit=30" class="ToRepository">
<repositoryPath>cassandra://var/mail/relay-denied/</repositoryPath>
</mailet>
<mailet match="RecipientIsLocal" class="LocalDelivery" />
<mailet match="All" class="RemoteDelivery" />
</processor>
L’ordre fait partie de la sémantique. Une règle très large placée au début peut rendre les règles suivantes inaccessibles ; une boucle infinie entre Processors peut bloquer le Spooler. James propose donc un comportement d’erreur configurable pour chaque Matcher et Mailet, ainsi que des Processors d’erreur dédiés (Configuration du conteneur de Mailets).
L’architecture par composants devient concrète dès qu’un message atteint la file d’attente. Les Processors, Matchers et Mailets déterminent alors les étapes de traitement suivantes et la destination du résultat.
Structure technique
L’architecture décrit le parcours des messages ; pour l’installation et l’exploitation, elle doit maintenant se traduire par une vue concrète des composants. Le point décisif est de savoir quels runtimes, stockages et services supplémentaires le profil James choisi nécessite réellement.
Stack technologique et vue d’ensemble pour l’administrateur
Pour une première évaluation du produit, les limites d’exploitation sont plus importantes que les noms de classes. La vue d’ensemble suivante synthétise le stack autour des questions qui doivent être clarifiées avant l’installation, l’intégration ou la reprise d’un environnement existant :
| Domaine | Technologie ou artefact | Ce que l’administrateur doit savoir |
|---|---|---|
| Runtime | Java 21, JVM ; code source majoritairement Java, quelques modules Scala | le heap, le garbage collection, le threading et les correctifs JVM font partie de l’exploitation du serveur |
| Build et paquet | projet Maven multimodule ; ZIP et images Docker | les Mailets personnalisés doivent correspondre aux générations de James, Java et Jakarta |
| Câblage | Guice dans la génération 3.9 ; Spring dans les installations plus anciennes | la distribution choisie détermine les modules et fichiers de configuration disponibles |
| Configuration | conf/*.xml, conf/*.properties, variables d’environnement | particulièrement importants : smtpserver.xml, mailetcontainer.xml, webadmin.properties, fichiers JMAP et backend |
| Traitement | MailQueue, Spooler, Processor, Matcher, Mailet | acceptation, traitement et livraison finale sont des états séparés |
| Données | PostgreSQL/JPA ou Cassandra ; S3, OpenSearch, RabbitMQ en option | source, projection, file d’attente et contenu blob requièrent des plans de reprise distincts |
| Administration | WebAdmin REST API et james-cli | REST est plus puissant ; la CLI est incluse dans chaque variante de câblage |
| Observabilité | Health Checks, Dropwizard Metrics, Prometheus, JMX, journaux, Grafana | la file d’attente, les Mailets, les Matchers, les protocoles et les backends possèdent leurs propres métriques |
| Sécurité | keystores TLS, SMTP AUTH, JWT pour WebAdmin, segmentation réseau | WebAdmin sans JWT activé n’est pas protégé par défaut |
Selon le projet, tous les fichiers de configuration se trouvent dans conf ou conf/META-INF; ceux qui s’appliquent réellement dépendent du câblage et du backend. Les valeurs peuvent être récupérées depuis l’environnement avec ${env:VARIABLE} (Apache James – Configuration). C’est pratique pour les conteneurs, mais ne remplace pas une gestion des secrets : les certificats, clés privées, clés JWT et mots de passe de base de données devraient être fournis comme secrets montés ou via la plateforme d’orchestration.
Couche protocolaire
Le projet Protocols fournit des implémentations de serveurs extensibles pour SMTP, LMTP, IMAP, POP3, ManageSieve et JMAP (James Protocols). Les écouteurs ne sont pas câblés de façon fixe à un stockage précis. IMAP et JMAP accèdent via la Mailbox API ; SMTP transmet les messages acceptés à la file d’attente et au conteneur de Mailets. Les protocoles peuvent ainsi être mis à l’échelle ou désactivés indépendamment de la topologie du backend.
Boîte aux lettres, Mail Repository et stockage Blob
James distingue trois notions de stockage qui ne devraient pas être confondues en exploitation :
| Stockage | Contenu | Visibilité | Restauration typique |
|---|---|---|---|
| Mailbox | dossiers, messages, flags, UID, ACL et quotas d’un utilisateur | IMAP/JMAP/POP3 | restauration ou réplication du backend de boîtes aux lettres |
| Mail Repository | messages issus de chemins de traitement tels que error, relay-denied ou la quarantaine | administration uniquement | corriger la cause et retraiter le message |
| Blob Store | contenu MIME binaire ou objets volumineux | référencé indirectement par les métadonnées | sauvegarde cohérente avec métadonnées et références |
La documentation sur la persistance souligne qu’un Mail Repository n’est précisément pas la boîte aux lettres utilisateur. Cette séparation est précieuse pour la réponse aux incidents : un message défectueux peut être isolé, examiné et réinjecté dans le pipeline après correction, sans contourner le modèle de boîtes aux lettres.
Bus d’événements, recherche et projections
Les opérations sur les boîtes aux lettres produisent des événements, par exemple MailboxAdded, MessageMoveEvent, FlagsUpdated ou des modifications de quota. Des listeners mettent à jour les quotas, les index de recherche et d’autres projections. Dans le profil distribué, RabbitMQ assure la communication, OpenSearch la recherche et Cassandra les métadonnées ; les contenus binaires sont stockés dans un Object Store compatible S3. Cette séparation permet une mise à l’échelle horizontale, mais crée une cohérence éventuelle entre la source et les projections. Les événements de listener échoués arrivent dans une Event Dead Letter et doivent être surveillés et, si nécessaire, redélivrés (Distributed James – Mailbox Event Bus).
MIME, Sieve et authentification des expéditeurs
Le projet James englobe plus que le serveur. Apache Mime4J analyse les structures MIME en flux ou comme modèle objet ; jSieve implémente le langage de filtrage Sieve ; jSPF et jDKIM fournissent des bibliothèques Java pour la vérification d’expéditeurs ainsi que la signature et la vérification DKIM. Ces modules sont des projets autonomes et peuvent également être utilisés en dehors d’un serveur James complet (Apache James – Composants).
La question de savoir quels composants fonctionnent sur un nœud ou sont répartis n’est pas une simple question de performance. Ce choix détermine aussi la cohérence, le redémarrage et le nombre de backends à surveiller.
Variantes d’exploitation et mise à l’échelle
Pour James 3.9.0, Apache documente plusieurs profils. Il ne s’agit pas seulement d’installateurs différents, mais de modèles de cohérence, de mise à l’échelle et d’exploitation distincts. Dans cet état, la variante JPA est explicitement désignée comme legacy ; une distribution PostgreSQL et une distribution distribuée sont également proposées (Apache James – Téléchargements). Les points indiqués dans le graphique comme déduction d’exploitation sont des recommandations dérivées et non des affirmations littérales du fabricant.
| Profil | Persistance et services | Adapté à | Conséquence opérationnelle |
|---|---|---|---|
| JPA/Guice (legacy) | base H2 embarquée ou base SQL externe ; modèle classique à serveur unique | laboratoire, migration d’installations anciennes, petites solutions spécifiques | peu de composants, mais trajectoire stratégique limitée et mise à l’échelle verticale |
| PostgreSQL | PostgreSQL comme cœur ; OpenSearch, RabbitMQ et stockage compatible S3 en option | nouvelles installations à un ou plusieurs nœuds sur base relationnelle | sauvegarde et HA bien connues ; introduire les services supplémentaires seulement en cas de besoin de mise à l’échelle |
| Distributed/Guice | Cassandra, RabbitMQ, OpenSearch et Object Store compatible S3 | services importants et horizontalement extensibles | plusieurs domaines de défaillance, projections, Dead Letters et contrôles de cohérence plus complexes |
| Memory | composants In-Memory volatils | tests et développement | aucune conservation des données de production |
La version 3.9 met en avant l’implémentation PostgreSQL performante comme une nouveauté majeure et la décrit comme capable de fonctionner de manière autonome tout en étant extensible avec RabbitMQ, OpenSearch et S3 (Apache James 3.9.0). Pour les nouvelles installations, c’est généralement le point de départ le plus compréhensible : commencer par la cohérence relationnelle et les méthodes de sauvegarde connues, puis ajouter des services uniquement pour des exigences concrètement mesurées.
Modèle de sécurité
James fournit TLS, l’authentification SMTP, des contrôles de protocoles et des Mailets cryptographiques. Cela ne garantit toutefois pas automatiquement une exploitation de production sûre. Le chiffrement de transport protège un saut ; il ne remplace ni le chiffrement de bout en bout ni une vérification contraignante des destinataires. La configuration TLS distingue le keystore, les suites de chiffrement activées, StartTLS et TLS implicite pour chaque écouteur. Un changement de certificat doit donc être suivi séparément pour SMTP, IMAP, POP3 et HTTP.
WebAdmin mérite une attention particulière. L’API REST peut modifier les domaines, utilisateurs, boîtes aux lettres, files d’attente, repositories, quotas et tâches de maintenance. Selon la documentation WebAdmin, l’authentification JWT est désactivée par défaut ; sans protection supplémentaire, l’API ne doit donc jamais être accessible depuis un réseau non contrôlé. Les endpoints de santé et la documentation API peuvent en outre être volontairement hors authentification.
Un durcissement minimal de production comprend :
- lier WebAdmin à un réseau d’administration, activer JWT et limiter en plus l’accès via un pare-feu ou un reverse proxy ;
- empêcher les relais ouverts par des règles explicites de relais, d’authentification et de destinataires ;
- exploiter la soumission et le SMTP serveur-à-serveur sur des écouteurs séparés avec des politiques différentes ;
- supprimer les domaines de démonstration, utilisateurs d’exemple et mots de passe par défaut des images de conteneurs avant le premier démarrage externe ;
- gérer les clés privées hors de la couche de conteneur et surveiller les dates d’expiration ;
- traiter les Mailets personnalisés comme du code applicatif : vérifier les dépendances, exécuter les tests et limiter les droits d’exécution ;
- concevoir consciemment le contrôle antispam et antimalware. James est une plateforme ; les scanners externes et services de réputation sont intégrés via des Mailets ou des transferts de protocoles.
Pour le dépannage, le parcours du message est à nouveau contrôlé dans le même ordre : écouteur, file d’attente, pipeline de Mailets, repository, boîte aux lettres et livraison sortante.
Exploitation et dépannage
Avec un serveur de messagerie modulaire, « le service fonctionne » n’est pas un état suffisant. Les Health Checks WebAdmin distinguent healthy, degraded et unhealthy; en mode strict, un seul composant dégradé entraîne déjà un HTTP 503. Selon le profil, les contrôles couvrent notamment JPA ou Cassandra, OpenSearch, RabbitMQ, le cycle de vie Guice, les Event Dead Letters et une livraison de test complète (WebAdmin Health Checks).
Pour le diagnostic, une approche par couches est plus efficace qu’une recherche globale dans les journaux :
- Connexion : le client atteint-il le bon écouteur et TLS fonctionne-t-il avec le certificat et le nom d’hôte attendus ?
- Transaction SMTP : quel code de réponse a été fourni pour
MAIL FROM,RCPT TOetDATA? Un250aprèsDATAsignifie une acceptation, pas nécessairement la livraison finale. - File d’attente : le nombre d’entrées en attente augmente-t-il, leur âge s’accroît-il ou la même erreur distante se répète-t-elle ?
- Pipeline de Mailets : quel Processor et quelle paire Matcher/Mailet ont traité le message ? L’identifiant du mail sert de clé de corrélation.
- Repository : le message se trouve-t-il dans
error,address-error,relay-deniedou dans un repository propre ? Corriger d’abord la cause, puis retraiter. - Boîte aux lettres et événements : le message est-il présent dans le stockage Mailbox principal, mais absent de l’index de recherche ou de JMAP ? Dans ce cas, les listeners, Dead Letters et la réindexation sont plus pertinents que SMTP.
- Remote Delivery : pour la livraison sortante, vérifier séparément DNS, routage, TLS, code du pair, plan de retry et génération de bounce.
Un contrôle synthétique compact peut relier le plan d’administration et le plan de données :
$headers = @{ Authorization = "Bearer $env:JAMES_ADMIN_JWT" }
Invoke-RestMethod `
-Uri "https://james-admin.example.net/healthcheck?strict" `
-Headers $headers
curl --fail --silent \
-H "Authorization: Bearer $JAMES_ADMIN_JWT" \
"https://james-admin.example.net/healthcheck?strict"
Sous Windows, Invoke-RestMethod appelle l’endpoint REST ; sous Linux et Unix, curl effectue le même contrôle HTTP. Ces deux commandes testent ici exclusivement le Health Check WebAdmin documenté et ne remplacent aucune transaction SMTP ou Mailbox synthétique.
Il convient en outre d’alerter au minimum sur la profondeur et l’âge de la file d’attente, les repositories d’erreurs, les Event Dead Letters, le retard d’indexation OpenSearch, les latences de backend, les classes de réponses SMTP, la mémoire JVM et les durées de validité des certificats. Dans la variante distribuée, un processus James au vert alors que RabbitMQ ou OpenSearch est perturbé ne constitue qu’un succès partiel.
Outils pour le poste de travail de l’administrateur
James fournit un client en ligne de commande pour les domaines, utilisateurs, boîtes aux lettres, mappings, quotas et la réindexation ; dans les conteneurs Guice, il est disponible sous le nom james-cli (James CLI). Pour un diagnostic fiable, quelques outils neutres vis-à-vis des protocoles doivent également être présents sur le poste de travail de l’administrateur :
| Outil | Utilisation avec James |
|---|---|
swaks | transaction SMTP et de soumission complète avec AUTH, TLS, enveloppe et en-têtes librement définis |
openssl s_client | vérifier la chaîne de certificats, SNI, le chiffrement et StartTLS sur SMTP, IMAP ou POP3 |
curl et jq | interroger automatiquement WebAdmin, Health Checks, tâches et métriques |
dig ou Resolve-DnsName | contrôler MX, A/AAAA, PTR, SPF, DKIM et DMARC |
tcpdump ou Wireshark | distinguer handshake, retransmissions, interruptions de connexion et dialogues de protocoles |
| Prometheus et Grafana | surveiller les métriques de file d’attente et de protocoles, les percentiles de latence, les temps d’exécution des Mailets/Matchers et les états des backends |
JMX, VisualVM et jcmd | analyser le heap, les threads, le garbage collection et les métriques internes de la JVM |
La documentation native des métriques répertorie notamment les connexions SMTP, IMAP et LMTP actives, les entrées de file d’attente, les messages envoyés et livrés, les temps de réponse par protocole ainsi que les durées d’exécution de Mailets et Matchers individuels. Ces métriques sont plus significatives qu’un simple uptime de processus, car elles représentent le parcours d’un message dans l’architecture.
Histoire technique
James n’est pas né comme portage d’un MTA Unix existant. Les plus anciennes pages de projet conservées, datant de 1997/1998, décrivent d’abord un serveur Java prévu, encore inutilisable, fondé sur des packages communs du Java Apache Project. Une interface de protocole commune, un stockage JDBC et une interface MailServlet inspirée des Servlets étaient prévus ; l’infrastructure de l’environnement Apache-JServ servait de travail préparatoire technique (Archives James-1.0). La Mailet API ultérieure a conservé l’idée fondamentale de petits composants de traitement déployables, sans devenir partie de la spécification Java Servlet.
| Période | Étape de développement technique |
|---|---|
| 1997–1998 | conception au sein du Java Apache Project : serveur Java pur, interfaces communes de protocoles et de ressources, idée MailServlet |
| Février 2001 | migration du Java Apache Project vers le projet Jakarta (Jakarta News 2001) |
| James 1.x/2.x | serveur SMTP/POP3 stable, NNTP temporairement ; moteur de Mailets, stockage fichiers et RDBMS ; conteneur de composants Avalon/Phoenix (Archives de documentation) |
| début des années 2000 | passage de sous-projet Jakarta à projet Top-Level autonome de l’Apache Software Foundation (James 2.1.3 – page de projet archivée) |
| 2010 | James 3.0 M1 avec prise en charge IMAP complète, SMTP/LMTP, Mailet API révisée et stockage Maildir, JPA et JCR (Annonce de publication) |
| James 3.x | remplacement d’Avalon/Phoenix par Spring, puis orientation stratégique vers Guice ; développement d’IMAP, JMAP, administration REST et backends distribués |
| Septembre 2025 | James 3.9.0 : passage de javax à jakarta, Java 21 et nouvelle implémentation PostgreSQL (Annonce de publication) |
Le code source se trouve dans le dépôt officiel apache/james-project. La génération 3.9 considérée ici est principalement constituée de Java ; certains modules utilisent Scala. La compilation repose sur un vaste projet Maven multimodule. Cette longue histoire explique pourquoi plusieurs générations restent visibles dans la documentation et les installations : termes Phoenix et Spring dans les anciens textes, Guice dans la documentation 3.x, JPA comme voie legacy et profils PostgreSQL ou Cassandra pour les déploiements distribués.
Adéquation et limites
James est particulièrement adapté lorsque l’e-mail constitue une partie de l’application et non seulement une infrastructure : traitement fondé sur des règles, Mailets propres, protocoles ouverts, JMAP, stockage maîtrisable ou mise à l’échelle horizontale sans cœur de serveur propriétaire. Les API publiques permettent de faire évoluer séparément le transport, les boîtes aux lettres et la logique métier.
James est moins adapté aux organisations qui attendent une appliance clé en main avec une interface graphique complète, une défense antispam et antimalware préconfigurée, des SLA éditeur et un objet de sauvegarde unique. La liberté modulaire génère du travail d’intégration. Le profil distribué exige en particulier une expérience d’exploitation avec plusieurs systèmes de données ainsi qu’une définition claire de la source, des projections, de la reconstruction et du point de reprise.
La question d’architecture décisive est donc la suivante : faut-il exploiter l’e-mail comme système de protocoles configurable ou comme produit fini ? Dans le premier cas, James fournit une boîte à outils ouverte d’une profondeur inhabituelle. Dans le second cas, un produit davantage préconfiguré est souvent plus économique.
Sources
- Apache Projects – James Committee
- Apache License 2.0
- Microsoft Learn – Invoke-RestMethod
- curl – Manpage
- SWAKS – Swiss Army Knife for SMTP
- OpenSSL – s_client
- jq – Manual
- BIND 9 – dig
- Microsoft Learn – Resolve-DnsName
- tcpdump – Manpage
- Wireshark – User’s Guide
- Prometheus – Overview
- Grafana – Documentation
- Oracle – JMX User Guide
- VisualVM – Documentation
- Oracle – jcmd
- Apache James – Présentation du projet – auto-description, JVM, protocoles, modules et objectifs d’architecture.
- Apache James – Composants logiciels – projets serveur, Mailet, Mailbox, Protocols et sous-projets.
- Apache James – Serveurs de protocoles – services de protocoles pris en charge.
- RFC 6409
- RFC 8314
- IETF: SMTP, LMTP, Message Submission, IMAP4rev2, POP3, ManageSieve et JMAP Mail – normes de protocoles normatives.
- RFC 2033
- RFC 9051
- RFC 1939
- RFC 5804
- RFC 8621
- IANA Service Name and Port Number Registry – ports enregistrés.
- Mailbox API
- Apache James – Managing Distributed James – Cassandra, S3, OpenSearch, RabbitMQ, bus d’événements et exploitation.
- Apache James – Mailet Container – Matchers, Mailets, Processors, Spooler et division par destinataire.
- Apache James – Mailet Container Configuration – configuration et gestion des erreurs du pipeline.
- Apache James – Configuration – répertoire de configuration, fichiers et variables d’environnement.
- Apache James – Persistence – distinction entre Mailbox et Mail Repository.
- Apache James – Downloads – profils de serveur et téléchargements officiels.
- Apache James Server 3.9.0 – Java 21, transition Jakarta et implémentation PostgreSQL.
- Apache James – SSL/TLS Configuration – modes TLS et configuration des écouteurs.
- Apache James – WebAdmin – administration REST, indication JWT et Health Checks.
- Apache James – Command Line – CLI pour domaines, utilisateurs, boîtes aux lettres, mappings, quotas et réindexation.
- Apache James – Metrics – Prometheus, JMX et métriques d’exploitation disponibles.
- Archives James-1.0 du Java Apache Project – premières planifications d’architecture et de MailServlet.
- Jakarta Project News 2001 – migration du projet James vers Jakarta.
- Apache James Document Archive – documentation des versions 1.x et 2.x.
- James 2.1.3 – page de projet archivée
- Apache James 3.0 M1 – IMAP, profils de stockage et Mailet API de la génération 3.x.
- Apache James – Dépôt GitHub – code source, build et structure des modules.