KamoCRM

Live Change Log

Every feature, fix and improvement, posted as it ships. Nothing is held back for a launch.

15,120
Total Changes
5,169
Features
4,935
Fixes
30
Projects
Filter by project
All Projects15,120AIService197APIService161BillingService143ConversionService107DaemonService129DocsService215ESigService88EmailService518InitializerService318KBService105KlusterServices697MCPGatewayService85MediaService546RAGService71SecurityService1,658TranslateService55VOIPService205VectorService11kamo-apps25kamo-asterisk-support24kamo-capcha17kamo-capcha-widget4kamo-internal6,937kamo-login330kamo-marketing625kamo-nowww20kamo-register213kamo-shared-library1,455kamo-signer-monorepo53kamolos108
Filter by type
All TypesBuild11CI523Chore738Docs2,167Feature5,169Fix4,935Other986Performance157Refactor274Revert23Style42Test94Upgrade1
April 28, 2026
FixEmailService

Sync members.email when primary mailbox is assigned, changed, or removed

When a mailbox was assigned to a member in a KAMO_MAIL org, members.email was never updated, causing EmailCredentialService to fail to resolve IMAP credentials ...

Kamo·5mo ago
April 26, 2026
FixEmailService

Mark-as-read for shared and member mailboxes

EmailController.setFlags now accepts an optional mailboxId query param and routes through resolveProviderWithMailbox so member-mailbox flags are set against the...

Kamo·5mo ago
FixEmailService

Handle IMAPInputStream in getMessage to prevent ClassCastException

JavaMail can return an IMAPInputStream instead of a decoded String from part.getContent() when message content has not been pre-fetched. The direct (String) cas...

Kamo·5mo ago
April 25, 2026
FixEmailService

Use getHasAttachments() to match Boolean wrapper type

**************** is a Boolean (wrapper), so Lombok generates getHasAttachments() not isHasAttachments(). The latter only exists for primitive boolean. Use Boole...

Kamo·5mo ago
FixEmailService

Reset stale hasAttachments on sync and accumulate correctly

- Reset has_attachments=false at start of bulk sync so stale true values from old false-positive MIME detection are cleared before re-indexing - Accumulate ha...

Kamo·5mo ago
FixEmailService

Support fromAddress override on send

Adds FromAddressRequest to EmailSendRequest so the frontend can specify which alias/shared/mailbox address to send from. SmtpOnlyProvider now uses that address ...

Kamo·5mo ago
FixEmailService

Fix attachment parsing and hasAttachment false positives

Three fixes to EmailImapService: 1. toEnvelope: narrow multipart check to multipart/mixed only — plain HTML+text emails (multipart/alternative) no longer sh...

Kamo·5mo ago
April 24, 2026
FixEmailService

Add com.kamo.z.shared.commerce to EnableJpaRepositories scan

**************** (required by **************** in the shared library) lives under com.kamo.z.shared.commerce but was not included in the JPA repository scan, ca...

Kamo·5mo ago
FixEmailService

Correct field name and type in getFromAddresses response

Backend was sending 'email' key but frontend expected 'address', and sent type 'shared_mailbox' when frontend expected 'shared'. Also fixes hasMailboxes flag wh...

Kamo·5mo ago
April 21, 2026
FixEmailService

Fall back to org_domains when no email_provider_domains default set

KamoMailDomainValidator was hard-failing with 403 for orgs that have a DNS-verified domain in org_domains but never added it to the email provider domain regist...

Kamo·5mo ago
April 20, 2026
FixEmailService

Wire up status filter and auto-seed required templates on list

- EmailTemplateController.list() now accepts ?status= param and filters using the existing findByOrgIdAndStatus repository query - Auto-seeds required templat...

Kamo·5mo ago
April 19, 2026
FixEmailService

Preview uses same auto-vars as sendToUser (org logo + name)

The preview endpoint now injects logoUrl, logoSimpleUrl, and orgName from the org's domain before applying sample content variables, matching the exact variable...

Kamo·5mo ago
FixEmailService

Update EMAIL_VERIFICATION sample vars to match current template

Use expiryText instead of expiryMinutes (renamed variable), and update verifyLink to point to the register subdomain (correct send path).

Kamo·5mo ago
April 18, 2026
FixEmailService

Preserve DB domain case in NoReply from address

Removed toLowerCase() — the domain already comes from resolvePrimaryDomain which reads org_domains from the database, so case is canonical from DB.

Kamo·5mo ago
FixEmailService

Resolve root domain for NoReply from-address instead of bare subdomain

resolvePrimaryDomain() was returning the first domain entry (e.g. "www") which produced NoReply@www. Now prefers root domains (parent == null) so transactional ...

Kamo·5mo ago
FixEmailService

Add internal.auth.secret to EmailService configmap

InternalAuthFilter was rejecting all service-to-service calls (send, seed-org) with 503 because internal.auth.secret was unconfigured. Matches the same INTERNAL...

Kamo·5mo ago
FixEmailService

Allow transactional send on port-25 relay and auto-seed missing templates

Port-25 SMTP (postfix) requires no auth — transactionalCredentials() was throwing ProviderUnavailableException when user/pass were unconfigured, blocking all ve...

Kamo·5mo ago
FixEmailService

Add dao.repositories to JPA scan so EmailTemplateRepository is found

Same pattern as KamoInitializerService — explicit basePackages overrides default scanning and must include every package that has repositories.

Kamo·5mo ago
FixEmailService

Bump kamo-shared-library to 1.4.0

Kamo·5mo ago
FixEmailService

Rename mailboxId→id and providerStatus→status in mailbox list response

Align field names with frontend expectations for member mailbox listings.

Kamo·5mo ago
April 2, 2026
FixEmailService

Support mailbox switching by resolving IMAP credentials per mailboxId

Added getMailCredentialsByEmail to look up virtual_users by email directly, resolveForMailbox to MailProviderResolver with access verification, and optional mai...

Kamo·5mo ago
FixEmailService

Rename DomainService to EmailDomainService to resolve bean name conflict

The shared library's DomainService and EmailService's local DomainService both registered as 'domainService' bean, causing CrashLoopBackOff on deploy.

Kamo·5mo ago
FixEmailService

Correct method signatures in DomainController and MailboxController

- Fix getMemberMailboxes -> getMailboxesForMember in MailboxController - Add missing memberId parameter to getVerificationRecords and verifyDomain in DomainCont...

Kamo·5mo ago
March 27, 2026
FixEmailService

Extract BCC recipients from IMAP messages

BCC header is retained on sent folder copies. Now extracted alongside To and CC so the frontend can display it in sent item previews.

Kamo·6mo ago
March 26, 2026
FixEmailService

Provider GET returns both type and providerType, PUT accepts both

GET /api/email/provider now includes both 'type' and 'providerType' fields in the response for frontend compatibility. PUT now accepts 'type' as a fallback when...

Kamo·6mo ago
March 21, 2026
March 20, 2026
FixEmailService

Update calendar, contact, and integration ID types from Long to UUID

Calendar entities, contact sub-entities, and ContactIntegration IDs are now UUID. Updates all services, controllers, and DAV endpoints.

Kamo·6mo ago
March 19, 2026
FixEmailService

Add security-service.*** to K8s ConfigMap

KamoJwtService requires this property for Bearer token validation in DavAuthFilter, but the K8s ConfigMap overrides application.yml and was missing it — causing...

Kamo·6mo ago
FixEmailService

Add *** secret to deployment envFrom

Kamo·6mo ago
FixEmailService

Remove duplicate JPA repo scan — use parent package only

com.kamo.z.shared.email covers metadata.repos, scanning both caused BeanDefinitionOverrideException on messageLabelRepository.

Kamo·6mo ago
March 18, 2026
FixEmailService

Add rspamd config to K8s ConfigMap and set ddl-auto to none

The rspamd.base-url property was missing from the production ConfigMap, causing CrashLoopBackOff on deploy. Also corrects dev ddl-auto to none.

Kamo·6mo ago
March 17, 2026
FixEmailService

Remove hardcoded WebSocket headers from email middleware

Traefik v3 handles WebSocket Upgrade/Connection headers natively. Hardcoding them broke SockJS fallback transports (xhr-streaming, xhr-polling). Now matches med...

Kamo·6mo ago
March 16, 2026
FixEmailService

Use @Value for RspamdConfig and make training non-blocking

RspamdConfig now uses @Value to match existing project patterns. Rspamd training failures no longer prevent the message from being moved.

Kamo·6mo ago
FixEmailService

Save copy to Sent folder after sending email

Transport.send() only sends via SMTP without saving to IMAP. Added saveToSent() to append the message to the Sent folder with the SEEN flag set. Applies to send...

Kamo·6mo ago
FixEmailService

Disable STARTTLS and auth for port 25 internal SMTP

Port 25 on internal Postfix doesn't support STARTTLS and allows relay from cluster IPs via mynetworks. Only enable auth and STARTTLS when using port 587 (submis...

Kamo·6mo ago
FixEmailService

Use SMTP port 25 instead of 587 for internal Postfix

Postfix only listens on port 25 inside the cluster. Port 587 (submission) is not enabled in the container.

Kamo·6mo ago
FixEmailService

Change ddl-auto from none to update for auto schema management

Hibernate was not creating the email_metadata schema and conversations table because ddl-auto was set to none in the k8s configmap.

Kamo·6mo ago
March 15, 2026
FixEmailService

Use native query for PostgreSQL text[] column in ConversationRepository

MEMBER OF is not supported by Hibernate for @JdbcTypeCode(ARRAY) fields. Switch to native SQL with ANY() for folder_ids array lookup.

Kamo·6mo ago
March 14, 2026
FixEmailService

Use StringRedisTemplate to read OTK/session values stored as plain strings

The Next.js app stores OTK and *** values as plain strings in Redis. The default RedisTemplate uses JSON serializer which fails to parse them.

Kamo·6mo ago
FixEmailService

Add *** secret to deployment envFrom

Kamo·6mo ago

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.

Start Free ForeverView Pricing