When i try restoring it i get the following warnings,
export: AddressBook ...
export: Calendar ...
export: Identity ...
warning: Identity c2 not created (expected for non-owned addresses): {"description":"E-mail address not configured for this account.","properties":["email"],"type":"invalidProperties"}
warning: Identity c3 not created (expected for non-owned addresses): {"description":"E-mail address not configured for this account.","properties":["email"],"type":"invalidProperties"}
warning: Identity c4 not created (expected for non-owned addresses): {"description":"E-mail address not configured for this account.","properties":["email"],"type":"invalidProperties"}
export: ParticipantIdentity ...
warning: ParticipantIdentity c2 not created (expected for non-owned addresses): {"description":"Calendar address not configured for this account.","properties":["calendarAddress"],"type":"invalidProperties"}
warning: ParticipantIdentity c3 not created (expected for non-owned addresses): {"description":"Calendar address not configured for this account.","properties":["calendarAddress"],"type":"invalidProperties"}
warning: ParticipantIdentity c4 not created (expected for non-owned addresses): {"description":"Calendar address not configured for this account.","properties":["calendarAddress"],"type":"invalidProperties"}
export: Email ...
export: ContactCard ...
Mailbox: created=0 fetched=0 updated=0 deleted=0 skipped=5 failed=0
AddressBook: created=1 fetched=0 updated=0 deleted=0 skipped=1 failed=0
Calendar: created=0 fetched=0 updated=0 deleted=0 skipped=1 failed=0
Identity: created=0 fetched=0 updated=0 deleted=0 skipped=4 failed=0
ParticipantIdentity: created=0 fetched=0 updated=0 deleted=0 skipped=4 failed=0
Email: created=55 fetched=0 updated=0 deleted=0 skipped=0 failed=0
ContactCard: created=1 fetched=0 updated=0 deleted=0 skipped=0 failed=0
How can i restore the user aliases/identities?
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.
Vandelay identities can only be created on the target if the identity’s email address matches one of the addresses already configured on the target account (its primary address or an alias). If the account you’re restoring into doesn’t have those addresses set up yet, the identity creation will fail with a warning like “E-mail address not configured for this account” and the identity is skipped rather than the whole export aborting.
To fix it:
On the target Stalwart server, make sure the account has all the same aliases the source account had (Account > email addresses/aliases in the WebUI, or via the JMAP API/CLI).
Re-run vandelay export against the archive. Since export is stateless and additive, re-running it will pick up and create the identities (and any other previously-skipped objects) now that the aliases exist, without duplicating what already succeeded.
You can check exactly which addresses are missing by inspecting the identity records in the archive first:
vandelay inspect --objects identity alice.sqlite
and comparing them against the aliases configured on the target account.
Aliases are not in the archive, and there is a reason for that, a vandelay archive holds one account’s JMAP data, which is the ten object types you see in inspect. Aliases live on the server’s Account object, so they are directory configuration and never travel with the mail.
That is also why the identities were refused. The server checks the address on an Identity against the addresses the account owns (primary, aliases, anything inherited from a group), so the alias has to exist before the identity can be created. Create the aliases first and the same restore will take them.
For doing that in bulk, stalwart-cli snapshot Domain Account --output accounts.ndjson on the source server and stalwart-cli apply --file accounts.ndjson on the target will carry every account across with its full alias list; the plan is idempotent upserts, and --dry-run shows you what it would do first. Include Domain in the selection, since each alias references a domain id. Passwords are stripped unless you pass --include-secrets, so those need a separate pass. Docs are at Exporting server state | Stalwart. If the source server is gone and the archive is all you have left, then it is one stalwart-cli update account/user <id> --json '{"aliases":{...}}' per account, which at least does the whole alias map in a single call.
Then re-run the restore. Export holds no state between runs and re-matches everything from scratch, so the four identities and four participant identities that were skipped will be created the second time round. Scope it with --objects identity,participantidentity and it will leave the 55 messages alone.
I am the sole user of the account and need an easy way to create aliases on the fly. An example could be i walk into a store and they ask me for email address, i would like to create an alias say [email protected] easily on the phone.
The current workflow of logging in with a administrator account and adding an alias is not very efficient. The bulwark web client allows one to manage identities, but when trying to add an identity it gave an error. I was wondering it is a permission issue.
I am enviously looking at SimpleLogin but dont want to be tied to their platform.
Why not use masked addresses? Users can maintain their own and input secondary information to identify their purpose, and can be disabled individually to reject messages.
Or plus addressing, which doesn’t require any server configuration.