Wire DomainManager и MailboxProvisioner для всех облачных провайдеров
Замените заглушки UnsupportedOperationException в каждом облачном провайдере Настоящие HTTP-звонки против API администратора каждого бэкэнда: Microsoft 365 → M...
Поддерживаемые IMAP / SMTP отправки, папки и поиск облачных заглушки
Извлеките шаблон делегирования IMAP/SMTP в AbstractImapBackedCloudProvider Zoho, IceWarp, Exchange, Google Workspace и Microsoft 365 расширяются Это. Базовый кл...
MailReader с поддержкой IMAP для облачных заглушки
Zoho, IceWarp, Exchange, Google Workspace и Microsoft 365 раскрывают IMAP. так проводка каждого облачного провайдера методы MailReader через EmailImapService Вм...
Обслуживать встроенные изображения MIME-части и поверхностные метаданные Content-ID
Render <img src="cid:..."> в сообщениях UI путем экспонирования встроенных частей Тело HTML ссылается. - AttachmentInfo получает контентId (без угловых скобок)...
Сохранение оригинального имени файла и типа контента при загрузке вложения
**************** Конечные точки (как личные) и контроллеры с общим почтовым ящиком) выдавали Content-Disposition: вложение без параметра имени файла и Content-T...
Совпадение возможностей для создания рабочих мест, а не развертывание Kubernetes
Конкурентность на уровне рабочего процесса сериализовала весь трубопровод (включая кубектль). выкатки). Переместите группу на работу по сборке только так, чтобы...
Sync members.email, когда основной почтовый ящик назначен, изменен или удален
Когда почтовый ящик был назначен участнику в организации KAMO MAIL, участники.email Он никогда не обновлялся, в результате чего EmailCredentialService не смог р...
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...
Обработка IMAPInputStream в getMessage для предотвращения ClassCastException
JavaMail может вернуть IMAPInputStream вместо декодированной строки Part.getContent() - когда содержание сообщения не было предварительно придумано. The Прямые ...
Используйте getHasAttachments(), чтобы соответствовать типу булевой обертки
**************** — булева (обертка), так что Ломбок Привязка () не является привязкой (). Последний только Существует для примитивного булева. Используйте Boole...
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...
Поддержка от Address override в отправке
Добавляет из AddressRequest в EmailSendRequest, чтобы интерфейс мог указать alias/shared/mailbox адрес для отправки. Компания SmtpOnlyProvider использует этот а...
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...
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...
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...
Возврат к org domains, когда не установлен по умолчанию email provider domains
KamoMailDomainValidator был неисправен с 403 для организаций, которые имеют DNS-верифицированный домен в org domains, но никогда не добавлял его в электронную п...
Восстановление для обновления библиотеки с разделением на камо (удалить OrganizationType, добавить isTopLevel)
Revert replyTo change — smtpService.send принимает вложения, не отвечающие
Проводите фильтр состояния и автоматические шаблоны в списке
- EmailTemplateController.list() теперь принимает ?status= param и фильтры используя существующий запрос репозитория findByOrgIdAndStatus - Автосемена требовали...
Добавить валидатор домена KamoMail для блокировки адресов электронной почты перекрестных арендаторов
Вводит компонент KamoMailDomainValidator, который проверяет на уровне обслуживания соответствует ли представленный домен электронной почты проверенному домену п...
Восстановление для обновления камо-общей библиотеки (CREATE CHILD ORG right + apply-to flags)
Вытаскивает новый RoleRightType.CREATE CHILD ORG (id 131), три флага на ChildOrgSecurityModel, две перегрузки службы 13-arg и помощники типа создателя AppliedMo...
Реконструкция для обновления библиотеки kamo-shared (appConfig upsert-only fix)
Вытаскивает затвердевший ****************, который больше не удаляет строки AppConfig, типы услуг которых отсутствуют в полезной нагрузке абонента — предотвраща...
Rebuild for kamo-shared-library update (effective-feature resolver)
Picks up the new AppliedModelEnforcementService methods (computeAvailabilitiesMap, isAppEffectivelyEnabled, getEffectivelyEnabledAppTypes, computeEffectiveFeatu...
Rebuild for kamo-shared-library update (applied-model enforcement + appConfigs + isPrivate)
Triggers a rebuild so this service pulls the updated kamo-shared-library containing AppliedModelEnforcementService, ChildOrgSecurityModelAppConfig entity, Servi...
Rebuild for kamo-shared-library update (runtime force rules + DEFAULT fallback in MemberRightsAppliedService)
Triggers a rebuild so this service picks up the updated **************** that applies template force rules and DEFAULT-template fallbacks on top of the existing...
Rebuild for kamo-shared-library update (master model, default role templates, force-rule resolver)
Triggers a rebuild so this service pulls the new kamo-shared-library revision containing Organization.branchTypeID, Organization.masterModelID, ****************...
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...
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
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).
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.
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 ...
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...
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...
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.
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
Проверяет заголовок X-Internal-Auth на /api/email/templates/end и /api/email/templates/seed-org/* Paths. Другие пути обхода этого фильтра (пользовательская сесс...
Добавить EmailTemplateCategoryService — CRUD для категорий, связанных с оргами
Нечувствительная к делу уникальность имени в одной организации, применяемая на уровне обслуживания (соответствует частичному уникальному индексу в DB). Удаление...
Добавить EmailTemplateService — CRUD + send + seed + reset-to-default
Основной оркестратор для транзакционной электронной почты. sendToUser решает шаблон, отображает субъект/тело, выбирает основной домен организации из Организации...
Добавить NoReplySenderService для NoReply@{domain} с адреса
Единый источник правды для транзакционной почты с адресов. Принять a строка домена, нижняя строчка нормализует его, возвращает «NoReply@<domain>». Абоненты долж...
Добавить TemplateRenderer для замены {{var}}
Безгосударственный рендеринг на основе регекса. Недостающие варсы заменяют пустые струны и Издать журнал WARN с помощью templateKey + orgId для атрибуции. HTML ...
Переименовать почтовый ящикId→id и providerStatus→status в ответе списка почтовых ящиков
Выравнивайте имена полей с внешними ожиданиями для списков почтовых ящиков участников.
Add concurrency group to prevent duplicate workflow runs
When a push triggers a workflow and workflow_dispatch is also fired (or two pushes arrive in quick succession), both runs would execute simultaneously. Adding a...
Как вы видите судоходство?
Каждое из этих обновлений автоматически попадает в ваше рабочее пространство. Начните бесплатно и смотрите, как он растет неделю за неделей.