You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implement read-only JMAP support: connect to JMAP servers, sync mailbox structure, and fetch messages.
Problem
Users with JMAP-enabled accounts cannot access their mail via Nextcloud Mail.
We need to add JMAP as a supported protocol with feature parity to IMAP for reading mail.
Solution
Create JMAP client factory using SebastianKrupinski/jmap-client-php
Implement mailbox structure sync and conversion to domain models
Implement message fetching and conversion to domain models
Handle JMAP Session endpoint discovery and state-based sync
Ensure output uses same domain models as IMAP
Implementation
Create lib/JMAP/ namespace for JMAP-specific logic:
JmapClientFactory - creates and configures JMAP client
JmapMailboxMapper - converts JMAP Mailbox objects to domain models
JmapMailboxSync - syncs folder structure into database
JmapMessageMapper - converts JMAP Message objects to MessageDTO
JmapSync - orchestrates message sync using JMAP state tokens
Summary
Implement read-only JMAP support: connect to JMAP servers, sync mailbox structure, and fetch messages.
Problem
Users with JMAP-enabled accounts cannot access their mail via Nextcloud Mail.
We need to add JMAP as a supported protocol with feature parity to IMAP for reading mail.
Solution
Implementation
Create
lib/JMAP/namespace for JMAP-specific logic:JmapClientFactory- creates and configures JMAP clientJmapMailboxMapper- converts JMAP Mailbox objects to domain modelsJmapMailboxSync- syncs folder structure into databaseJmapMessageMapper- converts JMAP Message objects to MessageDTOJmapSync- orchestrates message sync using JMAP state tokensCredential handling reuses existing encryption patterns.
Session discovery fetches
.well-known/jmapfor JMAP capabilities.Sync strategy:
Message extraction:
Affected Components
lib/JMAP/directory with mappers and sync logicProtocolClientFactory: register JmapClientFactory (from JMAP Protocol Abstraction and Routing Infrastructure #12609)SyncService: use dispatcher to call appropriate synccomposer.json: add SebastianKrupinski/jmap-client-php dependencyAcceptance Criteria
Out of Scope