Skip to content

[FEATURE] Persistent mailbox tree, folder creation and drag-and-drop filing for NoSync accounts #343

Description

@nabz54

Feature proposal

Hi,

While testing Bichon 2.0.1 with a NoSync archive, I found that the existing mailbox model already works well for organizing imported messages into hierarchical paths such as:

Projects/Project A
Projects/Project B
Administrative/Invoices
Administrative/Contracts

However, once many messages are archived, managing these folders mainly through search filters becomes less convenient.

I built a working proof of concept on Bichon 2.0.1 that adds a persistent mailbox tree to the Search page and extends it with folder creation and drag-and-drop message filing.

Example use case

Imagine a small Purchasing department using a shared NoSync archive.

Several employees archive emails from Thunderbird into Bichon.

Their archive could look like:

Purchasing
├── 00 - To classify
├── Suppliers
│ ├── Supplier A
│ └── Supplier B
├── Orders
│ ├── 2026
│ └── 2027
├── Contracts
└── Archives

Most incoming emails are initially archived into "00 - To classify".

Later, users reviewing the archive need a quick way to move messages into the appropriate folder.

Without a persistent folder tree, users have to repeatedly use mailbox filters to navigate the archive.

With the proposed interface, they can simply drag an email from the search results and drop it onto:

Suppliers / Supplier A

This makes Bichon behave more like an archive/document classification system while keeping the current NoSync model.

Proposed features

Persistent mailbox tree

Display the mailbox hierarchy permanently on the left side of the Search page.

Example:

Archives
├── All messages
├── 00 - To classify
├── Administrative
├── Projects
│ ├── Project A
│ └── Project B
└── Archives
└── 2026

Clicking a mailbox filters the current search results.

Parent folders can also represent all descendant mailboxes.

Folder creation

Allow users to create folders and nested folders directly from the WebUI.

Example:

Projects
└── New Project

would create the NoSync mailbox path:

Projects/New Project

Bichon already creates missing NoSync mailboxes during EML import, so the same mailbox creation logic could potentially be reused.

This feature could remain limited to NoSync accounts.

Drag-and-drop message filing

Allow one or multiple messages to be dragged from the Search results onto a mailbox.

Example:

[Email]

Projects / Project A

The server would reassign the archived message to the target mailbox.

If several messages are selected, dragging one selected message could move the entire selection.

Mailbox counters

After a move, mailbox message counters should be refreshed automatically.

Permissions

Folder creation could reuse:

data:import:batch

since NoSync imports can already implicitly create mailboxes.

Moving existing archived messages modifies archive metadata, so the current:

data:manage

permission could be used.

Alternatively, a more restrictive permission such as:

data:move

could be introduced if finer-grained access control is preferred.

NoSync only

For an initial implementation, I would suggest limiting these features to NoSync accounts.

IMAP accounts should remain unchanged, since moving an archived IMAP message could have different synchronization semantics.

Possible server-side move API

For example:

POST /api/v1/move-messages

{
"account_id": 12,
"envelope_ids": [
"message-id-1",
"message-id-2"
],
"target_mailbox_id": 12345
}

The implementation should keep both archive indexes consistent:

  • envelope mailbox_id
  • attachment mailbox_id
  • deduplication cache
  • mailbox message counters

The raw EML/blob does not need to be duplicated or moved.

Possible folder creation API

For example:

POST /api/v1/create-mailbox

{
"account_id": 12,
"name": "Projects/Project C"
}

Only NoSync accounts would accept this operation.

UX considerations

Drag and drop should not be the only way to move messages.

A "Move to folder..." action could also be added to row or bulk actions for keyboard accessibility and users who prefer not to use drag and drop.

Possible behavior:

  • drag one message -> move one message
  • select several messages + drag -> move the selection
  • highlight the target mailbox while dragging
  • reject cross-account moves
  • no-op when dropping into the current mailbox
  • refresh search results and mailbox counters after the move

Proof of concept

I currently have a working proof of concept running on Bichon 2.0.1 with:

  • persistent mailbox sidebar
  • hierarchical NoSync folders
  • folder and subfolder creation
  • message drag and drop
  • multi-message drag and drop
  • mailbox counter updates
  • NoSync-only server validation
  • permission checks
  • envelope and attachment index updates

The proof of concept was implemented without changing the existing storage format.

I should mention that I am not a software developer. My background is systems and network administration, and I used AI assistance to help understand the Bichon codebase, implement the proof of concept, and troubleshoot the build.

I have tested the resulting implementation on a Bichon 2.0.1 instance, but I would of course expect the code to require review, cleanup, and adjustments to match the project's coding standards.

If this direction fits the project, I would be happy to share the current implementation and help test a cleaner upstream version.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions