Apache James är en e-postserver med öppen källkod och samtidigt en byggsats för applikationer vars affärslogik bygger på e-post. Namnet står för Java Apache Mail Enterprise Server. James kan ta emot och vidarebefordra meddelanden via SMTP, hantera lokala postlådor, tillgängliggöra dem via IMAP, POP3 eller JMAP och styra hela meddelandeflödet genom fritt kombinerbara bearbetningskomponenter. Projektet beskriver sig därför inte bara som en server utan som en modulärt sammansättbar Inversion-of-Control-plattform på JVM (Apache James – projektöversikt).
Denna dubbla roll skiljer James från klassiska Mail Transfer Agents som Postfix och från färdiga säkerhetsappliance-lösningar. En administratör kan driva James som ett rent SMTP-relä, som en komplett postlådeserver eller som en inbäddad e-postmotor i en produkt. Spamkontroll, kryptering, arkivering eller domänspecifik routning uppstår då inte ur ett fast funktionsblock utan ur en pipeline av Matchers och Mailets. Det gör James exceptionellt anpassningsbar, men flyttar en del av produktansvaret från tillverkaren till den organisation som driver systemet.
Förklaringen följer ett meddelande genom James: från protokollservrarna via kön och Mailet-pipelinen till postlådearkivet. Därpå följer driftsvarianter, diagnostik och slutligen projektets tekniska utveckling.
Passande kommandon
Färdiga kommandon kring Apache James för PowerShell och Unix-skalet, med exempel att kopiera.
Artiklar om Apache James (4)
- 28 aug. 2026 TotemoMail-kontroller Viktigaste kontrollerna för TotemoMail-administratörer: stoppa servern, kontrollera köer och rensa kontrollerat
- 24 aug. 2026 JMeter-belastningstest SMTP-belastningstest med Apache JMeter i praktiken: 10 000 mejl, fem regelvägar, en HTML-rapport
- 11 aug. 2026 Bygg om regelverk Bygg om Apache James-regelverk strukturerat: verktyg och metod
- 17 juni 2026 Apache James ↔ M365 Förstå e-postroutning mellan totemomail och Exchange Online
Klassificering: MTA, MDA och applikationsplattform
I e-postsystemet har inte varje komponent samma roll. En Mail User Agent (MUA) är användarens klient, till exempel Thunderbird. En Mail Transfer Agent (MTA) transporterar meddelanden mellan system. En Mail Delivery Agent (MDA) lägger ett meddelande i målpostlådan. James kan vara både MTA och MDA; genom sina protokoll- och postlådemoduler tillhandahåller den dessutom servertjänster för MUA:er. Den officiella komponentöversikten listar separata projekt för server, protokoll, Mailets, postlådor och tester (Apache James – Software Components).
| Roll | Implementering i James | Överlämningspunkt |
|---|---|---|
| Meddelandetransport | SMTP- och LMTP-server, kö, Remote-Delivery-Mailet | andra MTA:er, reläer och gateways |
| Lokal leverans | Mailet-pipeline och Mailbox API | användare, domäner och kvoter |
| Postlådeåtkomst | IMAP, POP3 och JMAP | e-postklienter och webbapplikationer |
| Filterlogik | Matchers, Mailets, Processors och Sieve | interna regler och externa kontrolltjänster |
| Administration | WebAdmin REST API, CLI, Health Checks och mätvärden | automatisering och övervakning |
James är därmed ingen e-postklient och inte heller en förkonfigurerad Secure-Mail-Gateway. Den tillhandahåller byggblock för transport, leverans, lagring och bearbetning. Om resultatet blir ett enkelt relä, en multitenant-e-posttjänst eller en produktspecifik gateway avgörs av vald distribution och konfiguration.
Protokoll, TLS och portar
James tillhandahåller SMTP, LMTP, IMAP, POP3 och ManageSieve som TCP-baserade tjänster; JMAP och WebAdmin använder HTTP (Apache James – Protocol Servers). TLS skyddar, beroende på listener, en anslutning som är krypterad från början eller läggs in i en befintlig session via StartTLS. DNS ingår inte i James-processen, men är oumbärligt för en publik MTA: MX-poster bestämmer målet, A- och AAAA-poster dess adresser och PTR-poster påverkar ryktet för utgående anslutningar.
Portnumret ensamt beskriver ännu inte säkerhetssemantiken. Port 25 är avsedd för server-till-server-transport; autentiserad inlämning från klienter hör enligt RFC 6409 till port 587. Port 465 är sedan RFC 8314 åter registrerad för implicit krypterad Message Submission. För IMAP och POP3 gäller samma två mönster: klartextanslutning med möjlig StartTLS eller omedelbar TLS-etablering.
| Tjänst | Typiska portar | Standard | Betydelse i James |
|---|---|---|---|
| SMTP | 25, 587, 465 | RFC 5321 | mottagning, relä och submission |
| LMTP | konfigurerbar, registrerad 24 | RFC 2033 | lokal överlämning med status per mottagare |
| IMAP4rev2 | 143, 993 | RFC 9051 | synkron postlådeåtkomst |
| POP3 | 110, 995 | RFC 1939 | enkel meddelandehämtning |
| ManageSieve | 4190 | RFC 5804 | hantering av användarspecifika Sieve-regler |
| JMAP Mail | vanligtvis 443 | RFC 8621 | HTTP-baserad postlådeåtkomst för moderna klienter |
Portarna är konfigurerbara; avgörande är kombinationen av listener, protokoll, TLS-läge och autentisering. IANA Service Name and Port Number Registry är fortsatt referensen för registrerade tilldelningar.
Arkitekturprincip
James följer en komponentbaserad arkitektur. Protokollservrar, kö, bearbetningslogik, postlåda, användarhantering, sökindex och administration är åtskilda genom API:er och sätts samman via dependency injection. De distributioner som dokumenterats för James 3.9 använder Google Guice för detta; Spring-upplägget tillhör en äldre generation. Frikopplingen är inte bara en kodorganisation: den gör det möjligt att använda samma Mailbox API med olika persistenslager och samma Mailet-logik i mycket olika serverprofiler.
Den centrala datavägen är asynkron. En SMTP-listener behöver inte leverera ett mottaget meddelande fullständigt innan den svarar på anslutningen. Den lägger ett Mail-objekt i en kö; en Spooler hämtar det senare och kör det genom Mailet-containern. Kön skiljer därmed mottagningsbelastning, bearbetningstid och tillgängligheten hos efterföljande system åt. Dokumentationen för distribuerad drift beskriver den följdriktigt som en obligatorisk del av en SMTP-server (Apache James – Distributed Server Operations).
Ett meddelandes bearbetningsväg
- Protokollmottagning: SMTP eller LMTP kontrollerar session, autentisering, kuvertavsändare och mottagare. Efter slutet av
DATAskapas ett interntMail-objekt med kuvert, MIME-innehåll och attribut. - Kö: Objektet köas permanent eller flyktigt. Först från denna punkt är mottagning frikopplad från bearbetning.
- Spooler: Workers hämtar köposter och överlämnar dem till Mailet-containern.
- Processor: En namngiven Processor innehåller en ordnad lista av Matcher/Mailet-par. Den obligatoriska
root-Processorn utgör ingången. - Matcher: En Matcher förändrar inte meddelandet utan returnerar den delmängd av mottagare för vilka ett villkor gäller.
- Mailet: Tillhörande Mailet förändrar meddelande eller kuvert, utlöser en sidoeffekt, levererar lokalt eller på distans eller förgrenar till en annan Processor.
- Resultat: Meddelandet hamnar i en användarpostlåda, i utgående leverans, i ett Mail Repository för senare hantering eller avslutas efter en lyckad åtgärd.
En viktig detalj är den mottagarrelaterade uppdelningen. Om en Matcher bara matchar en del av adresserna delar containern upp bearbetningen i matchande och icke-matchande mottagaruppsättningar. Regler gäller därför inte nödvändigtvis för ett helt MIME-meddelande. Ett Mailet kan dessutom hoppa direkt till en annan Processor via ToProcessor; pipelinen är därmed snarare en riktad bearbetningsgraf än en enda linjär lista. Den officiella Mailet Container-dokumentationen beskriver just denna modell.
Ett minimalt, förenklat mönster ser ut så här:
<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>
Ordningen är en del av semantiken. En regel med bred matchning i början kan göra efterföljande regler ouppnåeliga; en oändlig slinga mellan Processors kan binda Spoolern. James erbjuder därför definierbart felbeteende per Matcher och Mailet samt egna fel-Processors (Mailet Container Configuration).
Komponentarkitekturen blir konkret så snart ett meddelande når kön. Då avgör Processor, Matcher och Mailet vilka bearbetningssteg som följer och vart resultatet hamnar.
Teknisk uppbyggnad
Arkitekturen beskriver meddelandevägen; för installation och drift måste den nu omsättas i en konkret komponentbild. Avgörande är vilken körtid, lagring och vilka tilläggstjänster den valda James-profilen faktiskt kräver.
Teknikstack och administrationsöversikt
För en första produktklassificering är driftsgränser viktigare än klassnamn. Följande översikt koncentrerar stacken till de frågor som bör klarläggas före installation, integration eller övertagande av en befintlig miljö:
| Område | Teknik eller artefakt | Vad administratören måste veta |
|---|---|---|
| Körtid | Java 21, JVM; källkod huvudsakligen Java, enskilda Scala-moduler | Heap, garbage collection, trådhantering och JVM-patchar hör till serverdriften |
| Build och paket | Maven-multimodulprojekt; ZIP-filer och Docker-images | egna Mailets måste passa James-, Java- och Jakarta-generationen |
| Wiring | Guice i 3.9-generationen; Spring i äldre installationer | den valda distributionen avgör tillgängliga moduler och konfigurationsfiler |
| Konfiguration | conf/*.xml, conf/*.properties, miljövariabler | särskilt viktigt: smtpserver.xml, mailetcontainer.xml, webadmin.properties, JMAP- och backend-filer |
| Bearbetning | MailQueue, Spooler, Processor, Matcher, Mailet | mottagning, bearbetning och slutleverans är separata tillstånd |
| Data | PostgreSQL/JPA eller Cassandra; valfritt S3, OpenSearch, RabbitMQ | källa, projektion, kö och Blob-innehåll behöver separata återställningsplaner |
| Administration | WebAdmin REST API och james-cli | REST är kraftfullare; CLI ingår i varje Wiring-variant |
| Observerbarhet | Health Checks, Dropwizard Metrics, Prometheus, JMX, loggar, Grafana | kö, Mailets, Matchers, protokoll och backends har egna mätvärden |
| Säkerhet | TLS-keystores, SMTP AUTH, JWT för WebAdmin, nätverkssegmentering | WebAdmin utan aktiverad JWT är inte skyddad som standard |
Alla konfigurationsfiler finns enligt projektet i conf respektive conf/META-INF; vilka som faktiskt gäller beror på Wiring och backend. Värden kan hämtas från miljön med ${env:VARIABLE} (Apache James – Configuration). Det är praktiskt för containrar, men ersätter inte secret management: certifikat, privata nycklar, JWT-nycklar och databaslösenord bör tillhandahållas som monterade secrets eller via orkestreringsplattformen.
Protokollager
Protocols-projektet erbjuder utbyggbara serverimplementationer för SMTP, LMTP, IMAP, POP3, ManageSieve och JMAP (James Protocols). Listerners är inte hårdkopplade till en viss lagring. IMAP och JMAP använder Mailbox API; SMTP överlämnar mottagna meddelanden till kön och Mailet-containern. Därmed kan protokoll skalas eller inaktiveras oberoende av backend-topologin.
Postlåda, Mail Repository och Blob-lagring
James skiljer mellan tre lagringsbegrepp som inte bör blandas ihop i drift:
| Lagring | Innehåll | Synlighet | Typisk återställning |
|---|---|---|---|
| Mailbox | mappar, meddelanden, flaggor, UID:er, ACL:er och användarkvoter | IMAP/JMAP/POP3 | återställning eller replikering av Mailbox-backend |
| Mail Repository | meddelanden från bearbetningsvägar som error, relay-denied eller karantän | endast administration | åtgärda orsaken och bearbeta meddelandet igen |
| Blob Store | binärt MIME-innehåll respektive stora objekt | refereras indirekt via metadata | konsekvent säkerhetskopia med metadata och referenser |
Persistensdokumentationen betonar att ett Mail Repository uttryckligen inte är användarens postlåda. Denna separation är värdefull för incidenthantering: ett felaktigt meddelande kan isoleras, undersökas och efter en korrigering återföras till pipelinen utan att kringgå postlådemodellen.
Händelsebuss, sökning och projektioner
Mailbox-operationer skapar händelser, till exempel MailboxAdded, MessageMoveEvent, FlagsUpdated eller kvotändringar. Lyssnare uppdaterar utifrån detta kvoter, sökindex och ytterligare projektioner. I den distribuerade profilen hanterar RabbitMQ kommunikationen, OpenSearch sökningen och Cassandra metadata; binärt innehåll ligger i en S3-kompatibel Object Store. Denna uppdelning möjliggör horisontell skalning, men medför eventuell konsistens mellan källa och projektioner. Misslyckade lyssnarhändelser hamnar i en Event Dead Letter och måste övervakas och vid behov levereras på nytt (Distributed James – Mailbox Event Bus).
MIME, Sieve och autentisering av avsändare
James-projektet omfattar mer än servern. Apache Mime4J parsar MIME-strukturer strömorienterat eller som objektmodell; jSieve implementerar filterspråket Sieve; jSPF och jDKIM tillhandahåller Java-bibliotek för avsändarkontroll respektive DKIM-signering och -verifiering. Dessa moduler är självständiga projekt och kan användas även utanför en komplett James-server (Apache James – komponenter).
Vilka av dessa komponenter som körs på en nod eller distribuerat är inte en ren prestandafråga. Valet bestämmer även konsistens, omstart och antalet backends som måste övervakas.
Driftsvarianter och skalning
För James 3.9.0 dokumenterar Apache flera profiler. Det handlar inte bara om olika installationsprogram, utan om olika modeller för konsistens, skalning och drift. I detta läge betecknas JPA-varianten uttryckligen som legacy; utöver den finns en PostgreSQL-distribution och en distribuerad distribution (Apache James – Downloads). Punkterna som i grafiken betecknas som driftshärledning är rekommendationer härledda från detta och inte ordagranna tillverkaruppgifter.
| Profil | Persistens och tjänster | Lämplig för | Driftsmässig konsekvens |
|---|---|---|---|
| JPA/Guice (legacy) | inbäddad H2-databas eller extern SQL-databas; klassisk enservermodell | labb, migrering av äldre installationer, små speciallösningar | få komponenter, men begränsad strategisk väg och vertikal skalning |
| PostgreSQL | PostgreSQL som kärna; valfritt OpenSearch, RabbitMQ och S3-kompatibel lagring | nya en- eller flernodsinstallationer med relationell grund | backup och HA är välkända; inför tilläggstjänster endast vid behov av skalning |
| Distributed/Guice | Cassandra, RabbitMQ, OpenSearch och S3-kompatibel Object Store | stora, horisontellt skalbara tjänster | flera felområden, projektioner, Dead Letters och mer komplexa konsistenskontroller |
| Memory | flyktiga in-memory-komponenter | test och utveckling | ingen beständig data i produktion |
3.9-versionen lyfter fram den kraftfulla PostgreSQL-implementationen som en viktig nyhet och beskriver den som både standalone-kapabel och skalbar med RabbitMQ, OpenSearch och S3 (Apache James 3.9.0). För nya installationer är detta oftast den mest lättbegripliga utgångspunkten: först relationell konsistens och kända säkerhetskopieringsmetoder, därefter ytterligare tjänster endast för konkret uppmätta krav.
Säkerhetsmodell
James tillhandahåller TLS, SMTP-autentisering, protokollkontroller och kryptografiska Mailets. Detta innebär dock inte automatiskt säker produktionsdrift. Transportkryptering skyddar ett hopp; den ersätter varken end-to-end-kryptering eller bindande mottagarkontroll. TLS-konfigurationen skiljer mellan keystore, aktiverade Cipher Suites, StartTLS och implicit TLS per listener. Ett certifikatbyte måste därför följas upp separat för SMTP, IMAP, POP3 och HTTP.
WebAdmin förtjänar särskild uppmärksamhet. REST API:t kan förändra domäner, användare, postlådor, köer, repositories, kvoter och underhållsuppgifter. Enligt WebAdmin-dokumentationen är JWT-autentisering inaktiverad som standard; utan ytterligare skydd får API:t därför aldrig vara nåbart från ett okontrollerat nätverk. Hälsoändpunkter och API-dokumentation kan dessutom medvetet ligga utanför autentiseringen.
En minimal härdning för produktion omfattar:
- bind WebAdmin till ett hanteringsnät, aktivera JWT och begränsa åtkomst ytterligare med brandvägg eller reverse proxy;
- förhindra öppna reläer genom explicita regler för relä, autentisering och mottagare;
- kör submission och server-till-server-SMTP på separata listeners med olika policyer;
- ta bort demodomäner, exempelanvändare och standardlösenord från container-images före första externa start;
- hantera privata nycklar utanför containerlagret och övervaka utgångsdatum;
- behandla anpassade Mailets som applikationskod: granska beroenden, kör tester och begränsa körningsrättigheter;
- utforma spam- och skadlig kod-kontroll medvetet. James är en plattform; externa skannrar och ryktestjänster integreras via Mailets eller protokollöverlämningar.
Vid felsökning granskas meddelandevägen åter i samma ordning: listener, kö, Mailet-pipeline, repository, postlåda och utgående leverans.
Drift och felsökning
För en modulär e-postserver är ”tjänsten körs” ingen tillräcklig statusuppgift. WebAdmin Health Checks skiljer mellan healthy, degraded och unhealthy; i strikt läge leder redan en degraderad komponent till HTTP 503. Beroende på profil kontrolleras bland annat JPA eller Cassandra, OpenSearch, RabbitMQ, Guice-livscykeln, Event Dead Letters och en komplett testleverans (WebAdmin Health Checks).
För diagnostik är en skiktvis metod effektivare än en global logsökning:
- Anslutning: Når klienten rätt listener, och lyckas TLS med förväntat certifikat och värdnamn?
- SMTP-transaktion: Vilken svarskod gavs för
MAIL FROM,RCPT TOochDATA? Ett250efterDATAbetyder mottagning, inte nödvändigtvis slutleverans. - Kö: Växer antalet väntande poster, ökar deras ålder eller upprepas samma fjärrfel?
- Mailet-pipeline: Vilken Processor och vilket Matcher/Mailet-par bearbetade meddelandet? Mail-ID:t fungerar som korrelationsnyckel.
- Repository: Finns meddelandet i
error,address-error,relay-deniedeller ett eget repository? Åtgärda först orsaken, bearbeta sedan på nytt. - Postlåda och händelser: Finns meddelandet i den ledande Mailbox-lagringen men saknas i sökindex eller JMAP? Då är lyssnare, Dead Letters och omindexering mer relevanta än SMTP.
- Remote Delivery: Vid utgående leverans ska DNS, rutt, TLS, motpartens kod, återförsöksplan och Bounce-skapande kontrolleras separat.
En kompakt syntetisk kontroll kan koppla samman administrations- och dataplanet:
$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"
I Windows anropar Invoke-RestMethod REST-slutpunkten; i Linux och Unix utför curl samma HTTP-kontroll. Båda kommandona testar här uteslutande den dokumenterade WebAdmin Health Check och ersätter inte en syntetisk SMTP- eller postlådetransaktion.
Dessutom bör minst ködjup och köålder, fel-repositories, Event Dead Letters, OpenSearch-indexeringsfördröjning, backend-latenser, SMTP-svarsklasser, JVM-minne och certifikatens återstående giltighetstid larmövervakas. I den distribuerade varianten är en grön James-process vid störd RabbitMQ eller OpenSearch bara en delvis framgång.
Verktyg för administratörens arbetsplats
James innehåller en kommandoradsklient för domäner, användare, postlådor, mappningar, kvoter och omindexering; i Guice-containrar finns den som james-cli (James CLI). För robust diagnostik bör även några protokollneutrala verktyg finnas på administratörens arbetsplats:
| Verktyg | Användning med James |
|---|---|
swaks | fullständig SMTP- och submission-transaktion med AUTH, TLS, kuvert och fritt satta headers |
openssl s_client | kontrollera certifikatkedja, SNI, Cipher och StartTLS på SMTP, IMAP eller POP3 |
curl och jq | automatiskt fråga WebAdmin, Health Checks, uppgifter och mätvärden |
dig eller Resolve-DnsName | kontrollera MX, A/AAAA, PTR, SPF, DKIM och DMARC |
tcpdump eller Wireshark | skilja mellan handshake, retransmits, anslutningsavbrott och protokolldialoger |
| Prometheus och Grafana | övervaka kö- och protokollmätvärden, latenspercentiler, Mailet-/Matcher-körtider och backendstatus |
JMX, VisualVM och jcmd | undersöka heap, trådar, garbage collection och JVM-interna mätvärden |
Den inbyggda mätvärdesdokumentationen listar bland annat aktiva SMTP-, IMAP- och LMTP-anslutningar, köposter, skickade och levererade meddelanden, svarstider per protokoll samt körtider för enskilda Mailets och Matchers. Dessa mätvärden är mer utsagekraftiga än en enda process-uptime eftersom de återspeglar ett meddelandes väg genom arkitekturen.
Teknisk historia
James uppstod inte som en portning av en befintlig Unix-MTA. De äldsta bevarade projektsidorna från 1997/1998 beskriver först en planerad Java-server som ännu inte kunde användas, baserad på gemensamma paket i Java Apache Project. Planen omfattade ett gemensamt protokollgränssnitt, JDBC-lagring och ett MailServlet-gränssnitt inspirerat av Servlets; som tekniskt förarbete användes infrastrukturen från Apache-JServ-miljön (James-1.0-arkiv). Det senare Mailet API bevarade grundidén med små, deploybara bearbetningskomponenter utan att bli en del av Java Servlet-specifikationen.
| Tidsperiod | Tekniskt utvecklingssteg |
|---|---|
| 1997–1998 | utformning i Java Apache Project: ren Java-server, gemensamma protokoll- och resursgränssnitt, MailServlet-idé |
| februari 2001 | migrering från Java Apache Project till Jakarta-projektet (Jakarta News 2001) |
| James 1.x/2.x | stabil SMTP-/POP3-server, tidvis NNTP; Mailet-motor, fil- och RDBMS-lagring; komponentcontainer Avalon/Phoenix (dokumentarkiv) |
| tidiga 2000-talet | utveckling från Jakarta-underprojekt till självständigt Top-Level-projekt hos Apache Software Foundation (James 2.1.3 – arkiverad projektsida) |
| 2010 | James 3.0 M1 med komplett IMAP-stöd, SMTP/LMTP, omarbetat Mailet API samt Maildir-, JPA- och JCR-lagring (release-meddelande) |
| James 3.x | ersättning av Avalon/Phoenix med Spring och senare strategisk inriktning mot Guice; utbyggnad av IMAP, JMAP, REST-administration och distribuerade backends |
| september 2025 | James 3.9.0: övergång från javax till jakarta, Java 21 och ny PostgreSQL-implementation (release-meddelande) |
Källkoden finns i det officiella repositoryt apache/james-project. Den här behandlade 3.9-generationen består huvudsakligen av Java; enskilda moduler använder Scala. Den byggs som ett stort Maven-multimodulprojekt. Den långa utvecklingshistorien förklarar varför flera generationer syns parallellt i dokumentation och installationer: Phoenix- och Spring-begrepp i äldre texter, Guice i 3.x-dokumentationen, JPA som legacy-väg och PostgreSQL- respektive Cassandra-profiler för distribuerade deploymenter.
Lämplighet och begränsningar
James är särskilt lämplig när e-post är en del av en applikation snarare än bara infrastruktur: regelbaserad bearbetning, egna Mailets, öppna protokoll, JMAP, kontrollerbar datahantering eller horisontell skalning utan proprietär serverkärna. De offentliga API:erna gör det möjligt att vidareutveckla transport, postlåda och affärslogik var för sig.
James är mindre lämplig för organisationer som förväntar sig en nyckelfärdig appliance med komplett GUI, förkonfigurerat skydd mot spam och skadlig kod, tillverkar-SLA:er och ett enda backupobjekt. Den modulära friheten skapar integrationsarbete. Särskilt den distribuerade profilen kräver driftserfarenhet av flera datasystem och en tydlig definition av källa, projektion, återuppbyggnad och Recovery Point.
Den avgörande arkitekturfrågan är därför: Ska e-post drivas som ett konfigurerbart protokollsystem eller som en färdig produkt? För det första fallet erbjuder James en ovanligt djup och öppen byggsats. För det andra fallet är en mer förkonfigurerad produkt ofta mer ekonomisk.
Källor
- 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 – projektöversikt – självbeskrivning, JVM, protokoll, moduler och arkitekturmål.
- Apache James – Software Components – server-, Mailet-, Mailbox-, Protocols- och delprojekt.
- Apache James – Protocol Servers – protokolltjänster som stöds.
- RFC 6409
- RFC 8314
- IETF: SMTP, LMTP, Message Submission, IMAP4rev2, POP3, ManageSieve och JMAP Mail – normativa protokollstandarder.
- RFC 2033
- RFC 9051
- RFC 1939
- RFC 5804
- RFC 8621
- IANA Service Name and Port Number Registry – registrerade portar.
- Mailbox API
- Apache James – Managing Distributed James – Cassandra, S3, OpenSearch, RabbitMQ, händelsebuss och drift.
- Apache James – Mailet Container – Matchers, Mailets, Processors, Spooler och mottagaruppdelning.
- Apache James – Mailet Container Configuration – konfiguration och felhantering för pipelinen.
- Apache James – Configuration – konfigurationskatalog, filer och miljövariabler.
- Apache James – Persistence – avgränsning mellan Mailbox och Mail Repository.
- Apache James – Downloads – officiella serverprofiler och nedladdningar.
- Apache James Server 3.9.0 – Java 21, Jakarta-övergång och PostgreSQL-implementation.
- Apache James – SSL/TLS Configuration – TLS-lägen och listener-konfiguration.
- Apache James – WebAdmin – REST-administration, JWT-information och Health Checks.
- Apache James – Command Line – CLI för domäner, användare, postlådor, mappningar, kvoter och omindexering.
- Apache James – Metrics – Prometheus, JMX och tillgängliga driftmätvärden.
- James-1.0-arkiv från Java Apache Project – tidig arkitektur- och MailServlet-planering.
- Jakarta Project News 2001 – migrering av James-projektet till Jakarta.
- Apache James Document Archive – dokumentation för versionerna 1.x och 2.x.
- James 2.1.3 – arkiverad projektsida
- Apache James 3.0 M1 – IMAP, lagringsprofiler och Mailet API för 3.x-generationen.
- Apache James – GitHub-repository – källkod, build och modulstruktur.