Журнал изменений
Что нового.
Каждое усовершенствование платформы, как только она появится.
· EmailService
Поддерживаемые IMAP / SMTP отправки, папки и поиск облачных заглушки
Извлеките шаблон делегирования IMAP/SMTP в AbstractImapBackedCloudProvider Zoho, IceWarp, Exchange, Google Workspace и Microsoft 365 расширяются Это. Базовый класс реализует MailSender, MailReader, FolderManager и Поисковый провайдер поверх EmailImapService, EmailSmtpService и SearchService — те же услуги, которые использует KamoMail, — так: Отправлять/сохранитьПроект работы для любого облачного провайдера с учетными данными SMTP. - Все операции с папками (создать/переименовать/удалить/переместить/настроитьФлаги/ Удалить сообщение) через IMAP. Делегаты поиска в существующем поисковом сервисе. - читать операции и inline cid: рендеринг продолжает течь через EmailImapService Parser. Оставшиеся заглушки в каждом конкретном провайдере — RealtimeNotifier (где применимо, DomainManager и MailboxProvisioner — действительно необходимо API-интерфейсы администратора (Microsoft Graph, Google Admin SDK, Zoho Admin) API, EWS, админ IceWarp), которые еще не подключены к этой кодовой базе. Каждый Stub теперь содержит комментарий в стиле TODO, называя API, который будет его реализовывать.
· EmailService
MailReader с поддержкой IMAP для облачных заглушки
Zoho, IceWarp, Exchange, Google Workspace и Microsoft 365 раскрывают IMAP. так проводка каждого облачного провайдера методы MailReader через EmailImapService Вместо того, чтобы бросать неподдерживаемую операцию Исключение. Это: Разблокирует чтение сообщений на этих провайдерах, когда только учетные данные IMAP Настройка (наиболее распространенное развертывание на сегодняшний день). - делает новый контент Id/inline вложение метаданных поток равномерно по всему Каждый провайдер, поскольку EmailImapService является единственным парсером. Позволяет конечной точке inline-image разрешать cid: ссылки для любого провайдера. Оставшиеся методы облачных провайдеров (отправка, управление папками, обеспечение, доменные операции) по-прежнему не поддерживаются Операция Исключение - эти потребности API-интерфейсы нативного провайдера и не входят в область применения здесь. Также добавляется MailContext.toMailCredentials() для поставщиков (и существующих) Адаптер KamoMailReader) имеет единый помощник по преобразованию учетных данных.
· kamo-internal
Render inline cid: изображения через новую конечную точку EmailService
Когда сообщение раскрывает встроенные части (каждая из которых содержит контент), электронная почта Рендер теперь переписывает <img src="cid:..."> Ссылки в момент установки на **************************************************************************************************** пересылает Cache-Control, чтобы браузер кэшировал полученное изображение. - EmailAttachment (как в разговорах, так и в локальной копии) MessageBrowser) получает контент Id и встроенные поля. - SanitizedEmailRenderer принимает inlineImageBaseUrl + inlineContentIds; on cid: imgs переписывает известные cids и скрывает все остальное Обработчик ошибок все еще скрывает любое другое сломанное изображение. - Выделенная кислота, которая жила в дезинфицирующем средстве, возвращается - Переписывание происходит во время рендеринга, когда существует контекст сообщения. Список видимых вложений в ThreadDetailView и MessageBrowser фильтрует встроенные части, поэтому встроенные логотипы подписей больше не отображаются в виде загружаемые вложения.
· EmailService
Обслуживать встроенные изображения MIME-части и поверхностные метаданные Content-ID
Render <img src="cid:..."> в сообщениях UI путем экспонирования встроенных частей Тело HTML ссылается. - AttachmentInfo получает контентId (без угловых скобок) и встроенный флаг. - parseMultipart и getAttachment разделяют один предикат attachmentPart и рекурсивный ходок, поэтому рядные части, вложенные внутри многочастного/связанного Они фиксируются (и их индексы выравниваются по двум методам). Ранее рекурсия переписала список привязанностей родителя, который Также сбрасывали настоящие крепления в вложенные структуры. - HasAttachment теперь управляется только нелинейными частями - фирменные логотипы нет Дальше зажигайте скрепку на каждом сообщении. - Новая конечная точка GET ******************* EmailController и SharedMailboxMailController; решает проблему с помощью Разобранный AttachmentInfo, транслирует часть с Content-Disposition: inline Cache-Control: частный, максимальный возраст = 3600.
· KlusterServices
Добавить прайс @kamocrm.com почтовый ящик и внешний IMAP NodePort
- Новая служебная почта/dovecot-imap-external (NodePort 30143 -> 143) До IMAP можно добраться извне кластера по $NODE:30143. - Seed pricing@kamocrm.com in mysql-init so a fresh DB bootstrap Воссоздает почтовый ящик; живой ряд уже присутствует в MySQL.
· kamo-internal
Redesign ChatsList rows — элегантный макет, отсутствие горизонтальной прокрутки, онлайн-точки, непрочитанный значок, относительные метки времени
· MediaService
Add GET /sessions/{guid}/members endpoint with display-name priority
Returns member list with name resolved via usernameAlias → fullName → alias → username, matching the same priority as the chat sessions list. This feeds ChatBox.loadMembers() so the tool window title bar can show the correct preferred name.
· kamo-internal
Derive and dispatch tool window title from session members
Adds onMembersChange callback to ChatBox; ChatTool derives the title (single name for 1-on-1, or '<name> (+N more)' for groups) and dispatches tool:title to update the ToolWindowShell title bar dynamically.
· kamo-internal
Lift search above tab strip, share query across Members and Chats tabs
Moves the search TextField from MemberList into NavTopPanel above the Tabs. Passes searchQuery as a prop to both MemberList and ChatsList so a single field filters both tabs. ChatsList filters rows by matching any non-self member's name.
· MediaService
Добавить нечитанную трансляцию с полезной нагрузкой ACTIVITY для обновлений списка чатов
· kamo-internal
Обновления списка чатов через непрочитанный канал NATS
· kamo-internal
Закладки для членов / чатов в панели центра взаимодействия
· kamo-internal
Список чатов с бесконечной прокруткой, виртуализированный через IntersectionObserver
· kamo-internal
Multi-select в MemberList для групповых чатов
· kamo-internal
Заголовок чата со стеком аватара, пополнением заголовка и сборщиком членов
· kamo-internal
Композитор с перетаскиванием, ожидающие фишки крепления, многолинейный вход
· kamo-internal
Пузырь сообщений с аватарами, действиями наведения и видимым индикатором
· kamo-internal
Встроенный рендеринг крепления и лайтбокс
· kamo-internal
Типы клиентов и крючки для сессий, квитанции, вложения
· kamo-internal
Прокси-маршруты для поиска или создания, члены, вложения, визуализация прокси, немой, отзыв
Выдержка из раздела **************** Helper to app/lib/mediaServiceUrl.ts. Добавить прокси-маршруты: find-or-create, members, квитанции, вложения (streaming), mutes, revoke,
· MediaService
Configmap entries for attachment limits and multipart
· MediaService
Paged chat list with previews, members, unread counts
that returns ChatListRowDto rows including last message preview, member summaries, per-session unread counts, and ownLastViewedAt.
· kamo-shared-library
Add countUnreadAfter(guid, memberId, since) to MediaObjRepository
Needed by paged chat-list endpoint to compute per-session unread counts when ownLastViewedAt is a LocalDateTime pointer rather than a message UUID.
· MediaService
Real NATS publisher impl and READ_RECEIPT broadcast
· MediaService
Per-viewer mute endpoint and message filter
· kamo-shared-library
Добавить ******************* в MediaSessionMuteRepository
· MediaService
Imaging proxy with HTTP Range support and per-member download tracking
· kamo-shared-library
Add MediaObjImgDownloadRepository with existsByObjImgIdAndMemberId
Required by ImagingProxyService (Task 10) to deduplicate per-member download tracking without a full table scan.
· kamo-shared-library
Add CHAT_ATTACHMENT assoc type with imaging-chat-attachments bucket
· kamo-shared-library
Service methods for exact-match find/create, member add, mute, revoke, read

Ваша вселенная ждет.
Начните бесплатно через несколько минут. Добавляйте продукты, когда будете готовы — без миграции, без новых логинов.
Бесплатно навсегда — не требуется кредитная карта