Self-heal mailbox accounts from app DB (drift recovery)
The app DB is the source of truth for which mailboxes should exist; KamoMail accounts live in the mail server's virtual_users. If the mail DB loses data, mailbo...
Wire DomainManager and MailboxProvisioner for all cloud providers
Replace the UnsupportedOperationException stubs in every cloud provider with real HTTP calls against each backend's admin API: - Microsoft 365 → Microsoft Gra...
IMAP/SMTP-backed send, folder, and search for cloud stubs
Extract the IMAP/SMTP delegation pattern into AbstractImapBackedCloudProvider and have Zoho, IceWarp, Exchange, Google Workspace, and Microsoft 365 extend it. T...
IMAP-backed MailReader for the cloud-provider stubs
Zoho, IceWarp, Exchange, Google Workspace, and Microsoft 365 all expose IMAP, so wire each cloud-provider stub's MailReader methods through EmailImapService ins...
Serve inline image MIME parts and surface Content-ID metadata
Render <img src="cid:..."> in the messages UI by exposing the inline parts that the HTML body references. - AttachmentInfo gains contentId (without angle brack...
Add KamoMail domain validator to block cross-tenant email addresses
Introduces KamoMailDomainValidator component that checks, at service layer, whether the submitted email domain matches the org's verified default domain when Ka...
Auto-inject logoUrl, logoSimpleUrl, and orgName variables at send time
EmailTemplateService now merges base variables (logoUrl, logoSimpleUrl, orgName) derived from the org's primary domain before rendering, so all transactional te...
Add resetCode to password reset email, add emailVerifyByCode endpoint, send WELCOME_MEMBER after email verification
Add EmailTemplateCategoryController REST endpoints
**************** CRUD. Delete response includes reassignedCount — the number of templates that became uncategorized as a result of removing the category. Sessio...
Add EmailTemplateController REST endpoints + DTOs
Exposes /api/email/templates/* CRUD + preview + duplicate + reset-to-default + service-to-service /send + /seed-org/{orgId}. Top-level orgs (no parent) addition...
Add InternalAuthFilter for service-to-service endpoints
Validates X-Internal-Auth header on /api/email/templates/send and /api/email/templates/seed-org/* paths. Other paths bypass this filter (user session auth handl...
Add EmailTemplateCategoryService — CRUD for org-scoped categories
Case-insensitive name uniqueness per org enforced at service layer (matches the partial unique index in the DB). Deletion nulls category_id on affected template...
Add EmailTemplateService — CRUD + send + seed + reset-to-default
Core orchestrator for transactional email. sendToUser resolves the template, renders subject/body, picks the org's primary domain from Organization.domains, and...
Add NoReplySenderService for 'NoReply@{domain}' from-address
Single source of truth for transactional-email from addresses. Accepts a domain string, lowercase-normalizes it, returns "NoReply@<domain>". Callers must resolv...
Add TemplateRenderer for {{var}} substitution
Stateless regex-based renderer. Missing vars substitute empty string and emit a WARN log with templateKey + orgId for attribution. No HTML escaping in v1 — valu...
Add email signature field config API
Add service and REST controller for managing email signature field visibility configuration per organization. Admins can toggle which contact fields appear in s...
Add accessible mailboxes endpoint with privilege-based expanded access
Add AccessibleMailboxService and GET /api/email/mailboxes/accessible endpoint that returns personal mailboxes, shared mailboxes, and privilege-gated access to d...
Add email domain management and mailbox provisioning through abstract provider layer
- Add DomainManager and MailboxProvisioner capability interfaces with sub-capability detection - Add ProviderDomain, ProviderMailbox, DnsRecord DTOs - Implement...
Add email aliases and shared mailbox support
New MailboxManager provider capability interface for alias and shared mailbox CRUD. KamoMailMailboxManager implementation manages dovecot/postfix virtual_users ...
Add ICS generation for REQUEST/REPLY/CANCEL and calendar message parsing
Add per-source sync status in WebSocket + displayName support
- WebSocket sync status now includes per-integration statuses in a 'sources' map keyed by integration ID - applyConfig now handles displayName field for user-...
Add member-level sync toggle and WebSocket sync status
- Add PUT /member/sync-toggle endpoint to batch-toggle syncEnabled on all member integrations at once - Add ContactSyncWebSocketController broadcasting aggreg...
Write ContactSyncLog on calendar/contact mutations for bidirectional sync
Add Google, Microsoft, and GenericDav provider stubs with token refreshers
Add IntegrationSettingsController, IntegrationSettingsService, SyncTriggerPublisher stub
Add GroupwareProvider interface, ProviderContext, and model classes
- GroupwareProvider interface defines calendar and contact book operations - ProviderContext carries runtime context for provider invocations - Model classes: P...
Add CardDavController and ContactService DAV methods for CardDAV support
Add CalDavController and CalendarService DAV methods
Adds findEventByUid, getChangedEventsSince, getDeletedEventsSince to CalendarService. Adds CalDavController handling PROPFIND, REPORT, MKCALENDAR, PROPPATCH, GE...
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
