Email Aliases don't work

Issue Description

On the latest stalwart I moved a user between two different email/stalwart servers.

This user (me) had several masked email addresses.

I re-created the masked emails as aliases on the new server, and no email is arriving to them.

I can confirm emailing the user regularly works fine.

Expected Behavior

Aliases should work

Actual Behavior

They don’t work

Reproduction Steps

Create an alias such as:

xzfxjvhdz9g6vzzd.9b7xicgxhb6hsd93rgf3czey

And it doesn’t work

Relevant Log Output

N/A

Stalwart Version

v0.16.x

Installation Method

Binary (Linux)

Database Backend

PostgreSQL

Blob Storage

PostgreSQL

Search Engine

PostgreSQL

Directory Backend

Internal

I have reviewed the documentation and FAQ and confirm that my issue is NOT addressed there.

on

I have searched this support forum (open and closed topics) and confirm this is not a duplicate.

on

I understand that topics in this category are triaged by a bot first but a human reply will follow up. If I’d prefer a human-only reply, I’ll add the no-ai tag to my topic.

on

Let me look into how aliases work in Stalwart to help diagnose this.

There are two important things happening here that likely explain why the aliases aren’t working.

The core issue is almost certainly that masked email addresses are an Enterprise Edition feature, not standard aliases.

The address format you described (xzfxjvhdz9g6vzzd.9b7xicgxhb6hsd93rgf3czey) matches the auto-generated format of Stalwart’s Masked Email feature - not a regular account alias. These are distinct objects in Stalwart:

  • Regular aliases are simple email address entries linked to an account (e.g. [email protected]).
  • Masked emails are disposable addresses managed as MaskedEmail objects via the JMAP API. They must be created through Stalwart’s masked email system (WebUI Account Manager, CLI, or JMAP API), not simply added as an alias string on an account.

Key points:

  1. Masked email is an Enterprise Edition feature only. If your new server does not have an Enterprise license, these addresses cannot be routed at all, even if you manually create aliases with those names.
  2. Even with an Enterprise license, you cannot simply re-create a masked address as a plain alias. You need to recreate the masked email records as proper MaskedEmail objects (via WebUI under Account > Masked Addresses, the CLI with stalwart-cli create masked-email, or the JMAP API). The server resolves them differently from regular aliases.
  3. The emailPrefix field (the generated local part) only accepts characters a-z, 0-9, and _ (underscore) - and notably dots (.) are not permitted in the prefix. If the original addresses contained dots in the local part, that could also be a complication to be aware of.

What to do:

  • If you have an Enterprise license, recreate the addresses as proper MaskedEmail objects via the WebUI (Account > Masked Addresses) rather than as plain aliases.
  • If you don’t have an Enterprise license, masked email routing is not available and you would need to use regular aliases with different (non-masked) addresses instead.

See the docs for full details: Masked email | Stalwart

This is an automated reply from the Stalwart Help Bot. Other community members may follow up if this answer is incomplete or wrong.

Thanks but:

A) This is an enterprise server

B) Even if it wasn’t, it’s still an alias and should work (it is not a masked address anymore).

Also since this is a fresh/new installation that never had the masked addresses on it originally, it should be possible to create them as an alias.

I setup a catch all email and removed (one) of the aliases and I’m not seeing that email hit my catch all account.

This is very interesting..