| marp | theme | paginate | backgroundColor | header | footer |
|---|---|---|---|---|---|
true |
default |
true |
IETF - IMAP OBJECTID Account Identifier Extension |
Draft: draft-imap-objectid-accountid |
Extending RFC 8474 to Support Multi-Account Environments
An extension to provide account-level identification for mailboxes in IMAP, enabling IMAP-JMAP interoperability when multiple JMAP accounts are accessible through a single IMAP session.
- Persistent Identifiers: Provides stable object IDs for mailboxes and messages
- MAILBOXID: Unique identifier for each mailbox that persists across renames
- EMAILID: Unique identifier for messages across mailbox moves/copies
- THREADID: Optional identifier for related messages (threading)
- Client Benefits: Efficient cache reuse without redownloading data
- Protocol Bridge: Tells IMAP clients that mailboxes/messages are also available via JMAP
- Shared Identifiers: Same MAILBOXID and EMAILID used in both IMAP and JMAP
- Gradual Migration: Clients can transition from IMAP to JMAP incrementally
- Discovery: GETJMAPACCESS command returns JMAP session URL
- ID Mapping: Assumes 1:1 correspondence between IMAP and JMAP objects
- Current Limitation: Assumes all mailboxes belong to a single JMAP account
- Real-time Notifications: Clients receive EmailPush objects when new mail arrives
- Filtered Delivery: Client-defined filters control which messages trigger notifications
- Property Inclusion: Push includes requested email properties (from, subject, etc.)
- Account Context: Each EmailPush object includes an accountId field
IMAP Mailbox Structure:
├── INBOX
├── Drafts
└── Shared Folders/
├── sales/
│ ├── INBOX
│ └── Drafts
└── support/
├── INBOX
└── Drafts
Multiple accounts' mailboxes presented in single IMAP hierarchy
With RFC 8474 MAILBOXID (Current State):
├── INBOX (MAILBOXID "m1")
├── Drafts (MAILBOXID "m2")
└── Shared Folders/
├── sales/
│ ├── INBOX (MAILBOXID "m1")
│ └── Drafts (MAILBOXID "m2")
└── support/
├── INBOX (MAILBOXID "m1")
└── Drafts (MAILBOXID "m2")
Problem: Same MAILBOXID can appear in different accounts! Cannot uniquely identify which JMAP account a mailbox belongs to.
With the ACCOUNTID Extension:
├── INBOX (MAILBOXID "m1") (ACCOUNTID "a1")
├── Drafts (MAILBOXID "m2") (ACCOUNTID "a1")
└── Shared Folders/
├── sales/
│ ├── INBOX (MAILBOXID "m1") (ACCOUNTID "a2")
│ └── Drafts (MAILBOXID "m2") (ACCOUNTID "a2")
└── support/
├── INBOX (MAILBOXID "m1") (ACCOUNTID "a3")
└── Drafts (MAILBOXID "m2") (ACCOUNTID "a3")
Solution: ACCOUNTID + MAILBOXID uniquely identifies mailboxes across accounts
C: A001 CAPABILITY
S: * CAPABILITY IMAP4rev2 OBJECTID OBJECTID=ACCOUNTID JMAPACCESS
S: A001 OK Capability completed
C: A002 LIST "" "*" RETURN (STATUS (MAILBOXID ACCOUNTID))
S: * LIST (\HasNoChildren) "/" "INBOX"
S: * STATUS "INBOX" (MAILBOXID (m1) ACCOUNTID (a1))
S: * LIST (\HasNoChildren) "/" "Drafts"
S: * STATUS "Drafts" (MAILBOXID (m2) ACCOUNTID (a1))
S: * LIST (\HasNoChildren) "/" "Shared Folders/sales/INBOX"
S: * STATUS "Shared Folders/sales/INBOX" (MAILBOXID (m1) ACCOUNTID (a2))
S: * LIST (\HasNoChildren) "/" "Shared Folders/sales/Drafts"
S: * STATUS "Shared Folders/sales/Drafts" (MAILBOXID (m2) ACCOUNTID (a2))
S: * LIST (\HasNoChildren) "/" "Shared Folders/support/INBOX"
S: * STATUS "Shared Folders/support/INBOX" (MAILBOXID (m1) ACCOUNTID (a3))
S: * LIST (\HasNoChildren) "/" "Shared Folders/support/Drafts"
S: * STATUS "Shared Folders/support/Drafts" (MAILBOXID (m2) ACCOUNTID (a3))
S: A002 OK List completed
Thank you!
Draft: draft-imap-objectid-accountid Contact: mauro@stalw.art