Switch between multiple IMAP accounts within a single Roundcube session.
ident_switch is a Roundcube plugin that turns identities into full account shortcuts. Configure each identity with its own IMAP, SMTP and Sieve server, then switch between accounts with a single click from the toolbar dropdown. Aliases, notifications, and domain preconfig are all built in.
Originally created by Boris Gulay. This fork is a major rewrite by Gecka — modernized for PHP 8.2+, restructured codebase, and packed with new features: alias identities, Sieve support, background mail notifications, domain preconfig, connection testing, and per-protocol security.
- One-click account switching from a toolbar dropdown
- Each identity can be linked to a separate IMAP/SMTP server with its own credentials
- Automatic special folder mapping (Sent, Drafts, Junk, Trash) per account
- Encrypted password storage in database
- Link identities as aliases of any configured account (not just the primary)
- Aliases share the parent account's IMAP inbox, SMTP and Sieve configuration
- Compose "From" dropdown automatically filtered to show only the active account and its aliases
- Per-account Sieve server configuration with independent host, port and credentials
- Three authentication modes: same as IMAP, none, or custom credentials
- Sieve section only appears when the
managesieveplugin is active
- Background mail checking across all secondary accounts
- Unread count badge in the account switcher dropdown
- Per-account notification settings: favicon, sound, desktop notifications
- Optional round-robin mode to reduce IMAP connections with many accounts
- Integrates with Roundcube's
newmail_notifierplugin
- Pre-fill server settings based on the identity's email domain
- Wildcard domain support (
*) for catch-all defaults - Lock preconfigured fields as read-only to prevent user changes
- Restrict account creation to preconfigured domains only (
preconfig_onlymode)
- Per-protocol security selection: None, STARTTLS, or SSL/TLS (IMAP, SMTP, Sieve independently)
- Connection testing on save (IMAP, SMTP, Sieve) to catch misconfigurations early
- Passwords encrypted using Roundcube's built-in encryption
- Warning displayed when selecting unencrypted connections
- PHP 8.2+
- Roundcube 1.6+
- MySQL, PostgreSQL, or SQLite
Navigate to your Roundcube installation directory and run:
composer require gecka/ident-switchThe roundcube/plugin-installer will automatically place the plugin in the correct plugins/ directory, initialize the database schema, and offer to enable it.
Don't have Composer? See getcomposer.org for installation instructions.
Running as root on a VPS? Roundcube files are typically owned by
www-data. Run Composer as the web server user to avoid permission issues:sudo -u www-data composer require gecka/ident-switch
-
Place this plugin folder into the plugins directory of Roundcube:
cd /path/to/roundcube/plugins/ git clone https://github.com/Gecka-Apps/roundcube-ident_switch.git ident_switch -
Add
ident_switchto$config['plugins']in your Roundcube config:$config['plugins'] = array('ident_switch', /* other plugins */);
-
Initialize the database schema:
bin/updatedb.sh --package=ident_switch --dir=plugins/ident_switch/SQL
Copy the sample configuration file and edit it to match your environment:
cp plugins/ident_switch/config.inc.php.dist plugins/ident_switch/config.inc.phpPre-fill server settings per email domain so users don't have to enter them manually:
$config['ident_switch.preconfig'] = [
'domain.tld' => [
'imap_host' => 'ssl://mail.domain.tld:993',
'smtp_host' => 'tls://mail.domain.tld:587',
'sieve_host' => 'tls://mail.domain.tld:4190',
'user' => 'email', // 'email' = full address, 'mbox' = local part
'readonly' => true, // lock fields in UI
],
'*' => [ // wildcard: default for unlisted domains
'imap_host' => 'ssl://mail.example.com:993',
'smtp_host' => 'tls://mail.example.com:587',
'user' => 'email',
],
];| Setting | Default | Description |
|---|---|---|
ident_switch.check_mail |
true |
Enable background mail checking across secondary accounts |
ident_switch.round_robin |
false |
Check one account per refresh cycle instead of all at once |
ident_switch.hide_notifier_warning |
false |
Hide the warning when newmail_notifier plugin is not active |
ident_switch.preconfig_only |
false |
Restrict account creation to preconfigured domains only |
ident_switch.debug |
false |
Log SMTP/Sieve routing and alias resolution to logs/ident_switch.log |
- Create a new identity in Settings > Identities
- Choose the account mode:
- Primary account — default identity, no server config needed
- Separate account — configure IMAP, SMTP, and optionally Sieve servers
- Alias of [account] — link to an existing account's servers
- For separate accounts, fill in server details (or let preconfig handle it)
- The account switcher dropdown appears in the toolbar once at least one separate account is configured
composer update gecka/ident-switchDatabase migrations are applied automatically by the Roundcube plugin installer.
If you are upgrading from boressoft/ident_switch, toteph42/identity_switch, or another fork:
Important: This version (5.x) requires a v4.x database schema as its starting point. If you are running v1.x–v3.x, you must first upgrade to v4.x (
boressoft/ident_switch) before migrating to this fork. This applies to all supported databases (MySQL, PostgreSQL, SQLite).
- Replace the old package in
composer.jsonwithgecka/ident-switchand runcomposer update - Database migrations are applied automatically
- Replace the plugin files in
plugins/ident_switch/ - Run the database migration:
bin/updatedb.sh --package=ident_switch --dir=plugins/ident_switch/SQL
If you use config.inc.php, update it to the new format — the 'host' key has been replaced by separate 'imap_host' and 'smtp_host' keys (old 'host' key still works as fallback).
Available in 7 languages: English, French, German, Italian, Dutch, Russian, Slovenian.
| Version | Roundcube | PHP |
|---|---|---|
| 5.x | 1.6+ | 8.2+ |
| 4.x | 1.3 — 1.5 | 7.x — 8.1 |
| 1.x — 3.x | 1.1 — 1.3 | discontinued |
This plugin is released under the GNU Affero General Public License Version 3.
Original code by Boris Gulay licensed under GPL-3.0+. New contributions licensed under AGPL-3.0+.
- Boris Gulay — Original developer (2016–2022)
- Christian Landvogt — Special folders support
- Gergely Papp — Bug fixes
- Laurent Dinclaux — Current maintainer (Gecka)
Built with 🥥 and ☕ by Gecka — Kanaky-New Caledonia 🇳🇨