Self-hosted email operations

One local inbox for multiple IMAP mailboxes

Skarbiec mailbox credentials never leave your machine; Skrzynka preserves the originating identity on every message and reply.

  • IMAP and SMTP operations
  • Skarbiec credential boundary
  • SQLite state persistence

The problem with operating multiple mailboxes

Most multi-mailbox setups fragment message state and encourage copying provider credentials into every client or automation.

State fragmentation

Each client or automation maintains its own view of message state, leading to inconsistencies and missed messages.

Credential proliferation

Provider credentials must be copied into every client and automation, increasing the attack surface and maintenance burden.

How Skrzynka works

Three concrete steps from mailbox identity through synchronization to reply.

  1. Select a Skarbiec mailbox identity

    Skrzynka reads mailbox item references from Skarbiec without ever resolving the credentials. Each mailbox identity is stored as an exact reference to the Skarbiec item.

  2. Synchronize through IMAP

    When synchronization begins, Skrzynka resolves the mailbox credentials from Skarbiec only while opening the IMAP connection. Messages are deduplicated by mailbox and IMAP UID, and synchronization state is recorded in a local SQLite database.

  3. Reply through the originating SMTP identity

    When replying to a message, Skrzynka automatically uses the SMTP identity of the mailbox that received the original message. Credentials are resolved from Skarbiec only while opening the SMTP connection, and reply state is recorded in the SQLite database to protect against ambiguous sends.

A real first-local-mailbox command sequence

The commands that take a mailbox Skarbiec declares to a readable local inbox: status, declare, sync, and message list.

$ skrzynka status
# database path, schema version, mailbox and message counts, whether skarbiec starts

$ skrzynka mailbox declare --skarbiec-item team-inbox
# tags team-inbox skrzynka:mailbox in Skarbiec and imports every INBOX message;
# prints mailbox_state, imported/unchanged/rejected counts

$ skrzynka sync
# reads which items Skarbiec declares (reconciliation), then polls each mailbox

$ skrzynka message list
# the normalized local inbox, newest first, without contacting the provider
Declaring a Skarbiec item a mailbox and reading its inbox

Common questions about Skrzynka

Is Skrzynka a hosted shared email server?

No. Skrzynka is a self-hosted local service that runs on your machine. It does not expose a remote shared server or provide hosted email services.

Does Skrzynka automatically generate or send replies?

No. Skrzynka only sends replies when you explicitly execute a reply command. It does not generate automatic replies or send messages without user action.

Where are mailbox credentials stored?

Credentials remain exclusively in Skarbiec. Skrzynka stores only exact item references to the mailbox identities in Skarbiec, and resolves secrets only while opening IMAP or SMTP connections. Resolved credentials are never written to the database or logs.

What API does Skrzynka expose?

Skrzynka exposes a CLI and an authenticated loopback-only JSON API. The API is not exposed on external network interfaces and requires authentication for all operations.

One local inbox for multiple IMAP mailboxes

Skarbiec mailbox credentials never leave your machine; Skrzynka preserves the originating identity on every message and reply.