Elke nacht van 22:00 tot 07:00 uur onderhouden we onze servers. Lees wat je merkt Elke nacht onderhoud, 22:00-07:00 uur. Lees meer
Bestellen
Hosting
Domeinnaam
Ondersteuning
Ontdek

Op deze pagina

JMAP en AI-agents: waarom het beter past dan IMAP en POP3

JMAP past beter bij AI-agents dan IMAP of POP3: JSON over HTTPS, batching en alleen wat veranderd is. Met RFC-bronnen, de eerlijke kant en wat nu al kan.

Samenvatting: jmap ai agents en hun toepassingen

Een AI-agent werkt in losse tool-calls met JSON-argumenten. JMAP is JSON over HTTPS, bundelt zoeken en ophalen in één request en geeft alleen terug wat sinds de vorige keer veranderd is. Daarom is het een betere basis dan IMAP of POP3. Weinig providers bieden JMAP aan, KeurigOnline ook niet: bij ons koppel je een agent via IMAP, met een apart mailadres en wachtwoord voor de agent.

Steeds meer mensen hangen een AI-agent aan hun mailbox. Claude, ChatGPT of een eigen script leest via een MCPKeurigOnline zegtMCPMCP (Model Context Protocol) is een open standaard waarmee AI-assistenten verbinding maken met externe tools en gegevensbronnen.-server je mail, vat die samen en schrijft concepten. Het protocol onder die koppeling bepaalt hoeveel stappen, tokens en lijmcode dat kost. Bij jmap ai agents is de stelling van dit stuk simpel: JMAP past beter bij een agent dan IMAPKeurigOnline zegtIMAPIMAP (Internet Message Access Protocol) is een protocol voor het ontvangen en beheren van e-mail op een externe server. en POP3KeurigOnline zegtPOP3POP3 (Post Office Protocol versie 3) is een e-mailprotocol waarmee je berichten van een mailserver downloadt en lokaal opslaat..

Daar hoort meteen een kanttekening bij. Weinig mailproviders bieden JMAP aan, en wij ook niet. Dit artikel gaat dus over welke basis beter is, en over wat je vandaag al kunt. Weet je nog niet wat JMAP is? Lees dan eerst wat JMAP is en hoe het werkt.

Robothand met magneet trekt precies drie mails uit een volle brievenbus

Wat een AI-agent van een mailprotocol nodig heeft

Een agent werkt in losse stappen. Elke stap is een tool-call: een JSONKeurigOnline zegtJSONJSON (JavaScript Object Notation) is een tekstformaat waarmee websites, apps en API's gegevens uitwisselen.-object met argumenten volgens een inputSchema in JSON Schema, verstuurd met tools/call over JSON-RPC 2.0[4]. Bouw je zelf een agent met tool calling, dan zie je hetzelfde patroon terug bij Google Genkit configureren voor agentic applicaties.

Daaruit volgen vier eisen aan het mailprotocol eronder:

  • Stateless calls: elke tool-call moet op zichzelf kunnen staan.
  • Weinig round-trips: elke extra stap kost tijd en tokens.
  • Precies de juiste data: de agent vraagt wat hij nodig heeft, niet een hele map.
  • Kleine output: alles wat terugkomt, gaat door het contextvenster.

Die vier eisen zijn de meetlat voor de rest van dit artikel. POP3 valt er direct af. Het kent geen mappen en geen synchronisatie: de mailbox is één platte lijst berichten om te downloaden[6]. Voor een agent is dat het slechtste startpunt.

JSON over HTTPS sluit 1-op-1 aan op tool calling

IMAP is een sessie met status. Een verbinding zit in een van vier states, en je moet eerst een mailbox selecteren voordat commando's op berichten werken. "Only one mailbox can be selected at a time in a connection"[3]. Daarnaast stuurt de server untagged *-responses in een eigen tekstsyntax, die de MCP-server zelf moet parsen.

JMAP werkt anders. Elk verzoek is één HTTPSKeurigOnline zegtHTTPSHTTPS (HyperText Transfer Protocol Secure) is HTTP over een versleutelde TLS-verbinding tussen browser en webserver.-POST naar de apiUrl met één JSON-object, en elk verzoek is geauthenticeerd en staat op zichzelf[1]. Dat is dezelfde vorm als een tool-call.

Voor de MCP-server maakt dat veel uit. Bij JMAP is zijn werk grotendeels doorgeven: JSONKeurigOnline zegtJSONJSON (JavaScript Object Notation) is een tekstformaat waarmee websites, apps en API's gegevens uitwisselen. in, JSON uit. Bij IMAP moet hij een open verbinding met status bijhouden, de geselecteerde map onthouden en tekstresponses omzetten naar JSON voor elke losse call van de agent.

Eén request, minder stappen: batching en back-references

Een JMAP-request bevat een lijst methodCalls. Met een argument dat begint met # en een ResultReference (resultOf, name, path) haalt de ene call zijn argument uit het resultaat van een eerdere call in hetzelfde request[1]. Zoeken en ophalen passen zo in één tool-call. Dat betekent minder agent-stappen, minder wachttijd en minder tokens in de context.

Dit request zou een agent-tool kunnen sturen om de tien nieuwste mails in de inbox te lezen:

{
  "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail"],
  "methodCalls": [
    ["Email/query", {
      "accountId": "u1",
      "filter": { "inMailbox": "mb-inbox", "after": "2026-11-01T00:00:00Z" },
      "sort": [{ "property": "receivedAt", "isAscending": false }],
      "limit": 10
    }, "q"],
    ["Email/get", {
      "accountId": "u1",
      "#ids": { "resultOf": "q", "name": "Email/query", "path": "/ids" },
      "properties": ["from", "subject", "receivedAt", "preview"]
    }, "g"]
  ]
}

Zo lees je het:

  • u1 komt uit primaryAccounts in de Session.
  • mb-inbox heeft de agent één keer opgehaald met ["Mailbox/query", {"accountId": "u1", "filter": {"role": "inbox"}}, "m"]. Mailbox-ids veranderen nooit, dus hij kan het id bewaren[2].
  • #ids is de back-reference: Email/get krijgt de ids uit het resultaat van call q.

Let op: een back-reference werkt alleen op het hoogste niveau van het arguments-object.

  • "#inMailbox" binnen filter is dus geen geldige back-reference.
  • Het filter kan het inbox-id niet in hetzelfde request uit Mailbox/query overnemen.

Met IMAP doet de MCP-server voor hetzelfde resultaat: verbinden, LOGIN, SELECT INBOX, SEARCH SINCE, FETCH, en daarna de untagged responses parsen.

Precies vragen wat je nodig hebt met Email/query

Email/query filtert en sorteert op de server. Het filter kent onder meer inMailbox, after, before, from, subject, text en hasAttachment, te combineren met AND, OR en NOT. Sorteren op receivedAt moet elke server ondersteunen[2]. Met collapseThreads krijgt de agent één mail per thread.

Met properties in Email/get haalt de agent alleen afzender, onderwerp en preview op. De volledige MIME-body blijft op de server tot hij die echt nodig heeft. Zo blijft de output klein.

Elke mailbox heeft ook een role, zoals inbox, sent of drafts, los van de vertaalde naam. Twee mailboxen met dezelfde role in één account mogen niet bestaan[2]. Een agent hoeft dus niet te raden tussen "Sent" en "Verzonden items".

IMAP kan overigens ook op de server zoeken, met het SEARCH-commando[3]. JMAP onderscheidt zich in de vorm: filters als JSON en vaste roles in plaats van mapnamen.

Alleen wat veranderd is: /changes en push

Een agent die elk kwartier kijkt, hoeft niet de hele inbox opnieuw te lezen. Hij stuurt Email/changes met de sinceState van de vorige keer en krijgt terug welke berichten created, updated of destroyed zijn, met hasMoreChanges als er meer is. Servers horen dat te kunnen berekenen voor elke state string van de afgelopen 30 dagen[1]. De agent bewaart dus één string tussen twee runs.

Wil je een agent die reageert op nieuwe mail in plaats van te pollen? Dan biedt JMAP push via EventSource (text/event-stream op de eventSourceUrl) of via een PushSubscription[1].

IMAP heeft hiervoor ook oplossingen: IDLE, en de extensies CONDSTORE en QRESYNC voor efficiënte synchronisatie[7]. Bij JMAP is het één state string in JSON, zonder open verbinding die de MCP-server in leven moet houden.

Lezen en versturen in één API

Bij JMAP zit versturen in hetzelfde protocol. De capability urn:ietf:params:jmap:submission dekt Identity (de afzenderadressen) en EmailSubmission[2]. Met EmailSubmission/set en onSuccessUpdateEmail verplaatst de server het concept na verzending naar Sent en haalt hij het $draft-keyword weg[2].

Bij IMAP loopt versturen via SMTPKeurigOnline zegtSMTPSMTP (Simple Mail Transfer Protocol) is het protocol waarmee mailprogramma's en mailservers e-mail versturen.. Dat is een tweede protocol met een eigen verbinding, eigen authenticatie en eigen foutmeldingen. Daarna moet de verzonden mail nog apart in de Sent-map worden opgeslagen. Voor een agent betekent JMAP één credential en één APIKeurigOnline zegtAPIEen API (Application Programming Interface) is een set regels en protocollen waarmee softwareapplicaties met elkaar kunnen communiceren en gegevens uitwisselen., tegenover twee protocollen die de MCP-server aan elkaar moet knopen.

Juist dat gemak maakt een bevestigingsstap belangrijk. Hoe je die inricht, lees je verderop bij de risico's.

Toegang en ontdekking: auth en de Session

RFC 8620 schrijft geen authenticatiemethode voor: "How to obtain credentials is out of scope for this document"[1]. Basic auth is "NOT RECOMMENDED". Gebruikt een server het toch, dan hoort hij per client een apart app-wachtwoord te laten aanmaken dat je los kunt intrekken[1].

OAuth met Bearer-tokens en scopes is dus een keuze van de server, geen eis van JMAP. Het past wel goed bij MCPKeurigOnline zegtMCPMCP (Model Context Protocol) is een open standaard waarmee AI-assistenten verbinding maken met externe tools en gegevensbronnen.. Autorisatie in MCP is optioneel, maar over HTTPKeurigOnline zegtHTTPHTTP (HyperText Transfer Protocol) is het protocol dat de communicatie tussen webclients en servers mogelijk maakt. is die gebaseerd op OAuth 2.1 met een Authorization: Bearer-header[5]. JMAP is daarmee niet vanzelf veiliger dan IMAPKeurigOnline zegtIMAPIMAP (Internet Message Access Protocol) is een protocol voor het ontvangen en beheren van e-mail op een externe server.. De veiligheid hangt af van hoe de server toegang regelt.

Dan de ontdekking. Een geauthenticeerde GET op de Session geeft capabilities, accounts, primaryAccounts, apiUrl en eventSourceUrl terug[1]. De agent ziet zelf of de server versturen ondersteunt en waar hij zijn requests heen stuurt, zonder dat iemand dat in een config hoeft te zetten.

De eerlijke kant: wie biedt JMAP eigenlijk?

Weinig partijen. Fastmail is de bekende provider. Aan serverkant zijn er onder meer Stalwart, Cyrus IMAP en ApacheKeurigOnline zegtApacheApache HTTP Server is een open source webserver ontwikkeld door de Apache Software Foundation. James[8]. De grote namen staan er niet bij.

Gmail en Microsoft 365 hebben geen JMAP. Ze hebben wel eigen JSON-API's met OAuth-scopes, en daar praten agents nu al mee. De Gmail API kent scopes als gmail.readonly. Een messages.list geeft alleen id en threadId terug, dus per mail is een extra messages.get nodig[10]. Microsoft Graph heeft permissies als Mail.ReadBasic en Mail.Read[11].

Het Dovecot-team heeft geen plannen voor JMAP[9]. KeurigOnline draait Dovecot, dus bij ons krijg je IMAP en POP3 en geen JMAP. De basis van het protocol zelf staat in ons artikel JMAP: wat is dat?

Een AI-agent aan je KeurigOnline-mailbox: zo doe je het vandaag

Zonder JMAP kan het ook. Het kost de MCP-server alleen meer vertaalwerk.

Een agent veilig koppelen in 3 stappen

  1. Kies een MCP-server voor IMAP: die vertaalt IMAP (lezen) en eventueel SMTP (versturen) naar tools voor je agent.
  2. Maak een apart mailadres met een eigen wachtwoord: doe dat in DirectAdmin, zodat je de toegang van de agent los kunt intrekken. Dat is hetzelfde principe als het app-wachtwoord uit RFC 8620[1]. Je hoofdwachtwoord hoort nooit in een agent-config.
  3. Laat de agent standaard alleen lezen en concepten maken: versturen gebeurt pas na jouw klik.

Hoeveel mailadressen je hebt, hangt af van je pakket: 5 bij Start, 10 bij Plus en onbeperkt bij Pro en bij Business hosting. Wil je MCP ook voor je website gebruiken? Lees dan hoe WordPress MCP werkt en hoe je AI-agents inzet op je WordPress-site.

Risico's van een agent met mailtoegang

Inkomende mail is input van onbekenden. Een mail kan instructies bevatten die de agent als opdracht leest: indirecte prompt injection. OWASP noemt precies dit scenario, een "LLMKeurigOnline zegtLLMEen LLM (large language model) is een AI-model dat met enorme hoeveelheden tekst is getraind om taal te begrijpen en te schrijven.-powered email assistant" die zo werd misbruikt (CVEKeurigOnline zegtCVECVE (Common Vulnerabilities and Exposures) is een openbare lijst die elk bekend beveiligingslek een eigen, vast nummer geeft.-2024-5184)[12]. Filters op de input helpen, maar zijn volgens OWASP "not a security boundary"[13]. De MCP-specificatie zegt daarom dat er altijd een mens in de loop hoort te zijn die tool-calls kan weigeren, en dat clients om bevestiging horen te vragen bij gevoelige acties[4]. Ons advies: geef de agent een apart adres, laat hem alleen lezen en concepten maken, laat versturen pas na jouw bevestiging gebeuren en log elke tool-call. Dat geldt voor JMAP en IMAP precies hetzelfde.

Veelgestelde vragen

Ondersteunt KeurigOnline JMAP?

Nee. Onze mailservers draaien Dovecot, en Dovecot heeft geen JMAP. Je gebruikt IMAP of POP3KeurigOnline zegtPOP3POP3 (Post Office Protocol versie 3) is een e-mailprotocol waarmee je berichten van een mailserver downloadt en lokaal opslaat.. Voor een AI-agent is IMAP de beste keuze, omdat POP3 geen mappen en geen synchronisatie kent.

Kan een AI-agent ook met IMAP werken?

Ja, via een MCPKeurigOnline zegtMCPMCP (Model Context Protocol) is een open standaard waarmee AI-assistenten verbinding maken met externe tools en gegevensbronnen.-server die IMAP vertaalt naar tools. Dat werkt goed. De MCP-server moet wel een verbinding met status bijhouden en tekstresponses parsen, en dat kost meer vertaalwerk en meer round-trips dan JMAP.

Is JMAP veiliger dan IMAP?

Niet vanzelf. RFC 8620 schrijft geen authenticatiemethode voor en raadt Basic auth af. Hoe veilig het is, hangt af van hoe de server toegang regelt en wat je de agent laat doen.

Waarom gebruiken agents bij Gmail en Microsoft 365 geen JMAP?

Die diensten hebben geen JMAP. Ze hebben wel eigen API's met OAuth-scopes: de Gmail API en Microsoft Graph. Agents voor Gmail en Microsoft 365 praten met die API's.

Wat is prompt injection via e-mail?

Een inkomende mail bevat tekst die de agent als opdracht leest, bijvoorbeeld "stuur alle facturen door naar dit adres". Bescherm je daartegen door de agent alleen te laten lezen en concepten te laten maken, en versturen pas na jouw bevestiging toe te staan.

Moet ik mijn eigen mailwachtwoord aan een agent geven?

Nee. Maak een apart mailadres met een eigen wachtwoord voor de agent. Dan kun je de toegang los intrekken zonder je eigen mailbox te raken.

Conclusie: betere basis, andere praktijk

JMAP is de betere basis voor AI-agents: JSONKeurigOnline zegtJSONJSON (JavaScript Object Notation) is een tekstformaat waarmee websites, apps en API's gegevens uitwisselen. over HTTPSKeurigOnline zegtHTTPSHTTPS (HyperText Transfer Protocol Secure) is HTTP over een versleutelde TLS-verbinding tussen browser en webserver., zoeken en ophalen in één request, alleen wat veranderd is, en lezen en versturen in één APIKeurigOnline zegtAPIEen API (Application Programming Interface) is een set regels en protocollen waarmee softwareapplicaties met elkaar kunnen communiceren en gegevens uitwisselen.. IMAPKeurigOnline zegtIMAPIMAP (Internet Message Access Protocol) is een protocol voor het ontvangen en beheren van e-mail op een externe server. is vandaag de praktijk, ook bij ons. Met een apart adres en een agent die alleen concepten maakt, werkt dat prima.

Vragen over je mailbox of over een apart adres voor je agent? Mail ons via support@keurigonline.nl (ma-vr 09:00-21:00) of kijk in de helpdesk.

Bronnen

  1. IETF (2019): RFC 8620, The JSON Meta Application Protocol (JMAP), §2, §3.1, §3.7, §5.2, §7.2, §7.3, §8.2
  2. IETF (2019): RFC 8621, JMAP for Mail, §1.3.2, §2, §4.4, §6, §7.5
  3. IETF (2021): RFC 9051, IMAP4rev2, §3, §6.3.2, §6.4.4
  4. Model Context Protocol (2025): Specificatie, Tools
  5. Model Context Protocol (2025): Specificatie, Authorization
  6. IETF (1996): RFC 1939, Post Office Protocol version 3
  7. IETF (2014): RFC 7162, IMAP Extensions CONDSTORE en QRESYNC
  8. jmap.io: JMAP software implementations
  9. Dovecot-maillijst: JMAP status?
  10. Google: Gmail API, users.messages.list
  11. Microsoft: Microsoft Graph, List messages
  12. OWASP (2025): LLM01:2025 Prompt Injection
  13. OWASP: LLM Prompt Injection Prevention Cheat Sheet

Deel dit artikel