Renaming any personal mailbox renamed all of them. The account profile and every personal mailbox shared one identity: syncPersonalIdentity wrote the profile name and avatar to every row matching (userId, type = 'personal'), PATCH /api/mailboxes/[id] redirected a rename into that sync instead of the mailbox row, and both the list response and the client overrode whatever was stored with the account name. Outgoing mail and message lists did the same, so a secondary mailbox also sent under the account owner's name. Only the primary mailbox — the one at the account address — carries the account identity now. Every other personal mailbox keeps the name and avatar it was given. The rule lives in one place, lib/profile/identity-utils.ts, and the API routes, the sender, and the client all go through it. Existing secondary mailboxes keep whatever name the old blanket update left on them until they are renamed; the rename now sticks. Fixes #36 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Mailflare
Mailflare is a self-hosted email inbox for custom domains, built on Cloudflare.
Thanks to mailflare sponsors. Want to support the project? Drop @hieuSSR a message
Featured sponsors
What you can do
- Connect domains and set up Cloudflare Email Routing from the dashboard.
- Create personal and shared mailboxes with delegated access.
- Send and receive email with attachments, rich formatting, signatures, and automatic replies.
- Organize mail with search, custom folders, stars, snoozing, archive, spam, and trash.
- Create routing rules to store, forward, reject, or categorize incoming messages.
- Get real-time inbox updates and new-message notifications.
- Import and export mail, manage contacts, and block unwanted senders.
- Manage accounts, permissions, API keys, webhooks, audit logs, and database backups.
How it works
Mailflare runs in your Cloudflare account. Email Routing delivers incoming messages to the app, while Cloudflare's email service handles outgoing messages. Your mail data stays in your own D1 database and attachments are stored in your own R2 bucket.
How much does it cost?
You can setup Mailflare and receive email for free
A Paid Worker plan ($5/month) is required to send email (and it's recommend to have a smooth experience)
Deploy
Getting started takes three steps:
- Deploy the app. Click Deploy to Cloudflare and keep the app name as
mailflare. The app will not work correctly under another Worker name. - Complete setup. Open the deployed app and follow
/setupto check the installation and create your admin account. - Connect your domain. Add a domain managed by the same Cloudflare account. Mailflare configures its email routing and helps you create the first mailbox.
⚠️ IMPORTANT: CF_TOKEN is required during deployment. Create a scoped Cloudflare API token with the following permissions for the domains you want to connect.
- All accounts - Email Sending:Edit, DNS Settings:Edit, Email Routing Addresses:Edit
- All zones - DNS Settings:Edit, Email Routing Rules:Edit, Zone Settings:Edit, DNS:Edit
See the deployment guide for required permissions, manual deployment, backups, and updates.
Local development
cp .dev.vars.example .dev.vars
npm install
npm run db:migrate:local
npm run dev
Add your Cloudflare credentials to .dev.vars, then open http://localhost:3000. For sample local data, run npm run db:seed while the development server is running.
Documentation
License
See LICENSE.
