Администрация почтового ящика делает все правильно, и три конечные точки получают сеанс
MailboxController не имеет никаких прав. MANAGE EMAIL ACCOUNTS существовали только как CheckRight в браузере и VIEW EMAIL ACCOUNTS нигде не упоминался, поэтому ...
Каждая конечная точка контакта принимает глагол, который ее называет
ContactRestController тщательно проверил право собственности — orgOf, userOf, assertBookIsMine, GroupIsMine и 404, а не 403, поэтому чужой идентификатор никогда...
Поместите обратный звонок в календарь, который член действительно может видеть
Отзывы вообще не доходили до календаря. Эта служба выбрала цель Календарь по учетной записи - findPrimaryByUser - и пользователь является глобальным, в то время...
Остановите конверты, требующие ответа на согласие, который никто не просил
пульт дистанционного изображения был примитивным булевым, и только три конечные точки, которые Получите целое сообщение, когда-либо назначаемое. Список папок не...
Сделайте напоминание о событии фактически уведомить кого-то
Три ошибки, один симптом. Участники сообщили, что календарные уведомления не Работа, и все три причины были на этой стороне. Напоминания никогда не были написа...
Запишите все три флага IMAP и скажите, почему индекс еще не может обслуживать список
Миграция запущена, так что есть ответ существует и SearchIndexService теперь пишет: Находится рядом с is read и is starred. Индекс зафиксировал две из трех Флаг...
Не читайте и не пишите до того, как появится колонка
Следует за изменением общей библиотеки, расшифровывая поле. Ничего в развернутом Путь теперь касается колонки, которую KamoInitializer еще не создал. Индексный...
Прекратите утечку соединения IMAP IDLE в каждом браузере
Прерывание потока IDLE не может закончить IDLE: он припаркован в блокировке. читать сокет, который видит флаг только после того, как чтение возвращается само по...
Источник половина 1b3553f, который совершил только свои испытания
1b3553f инсценировал два новых тест-файла и ничего больше, поэтому он приземлился, утверждая, что Скачать FolderManager.set Флаги, которые еще не существовали и...
Остановить перезапись неназванного флага IMAP
Флаги IMAP независимы, поэтому «отметьте это чтение» не должно ничего говорить о звезде. EmailImapService.setFlags всегда брал недействительные булевы и пропуск...
Прекратить доставку общих учетных данных в качестве конфигурационного по умолчанию
Общий пароль платформы был запечён в качестве запасного для DB PASSWORD и MINIO ROOT PASSWORD, так что он жил в этом репо и в построенном образе, а также В клас...
Возьмите вызывающего из сессии, а не из строки запроса
GET/api/calendar/calendars принимает userId в качестве параметра запроса, поэтому меняется Число в URL-адресе читает чьи-либо календари — и потому календари пер...
Заставьте MKCOL создать книгу, которую можно хранить
mkCol создала ContactBook, не имея ни организации, ни владельца и вернулся 201 независимо от того, так что создание адресной книги из CardDAV Клиент каждый раз ...
CockroachDB-only SQL, который отвергает PostgreSQL
CockroachDB пишет текст типа STRING; PostgreSQL и YugabyteDB используют TEXT. 25 отливок по нативным запросам все еще излучали CAST (x AS STRING) и STRING, кото...
Область адресных книг для члена, который владеет ими
Контакты устанавливались только организацией. ListBooks (orgId) — это findByOrganizationId(orgId), и открывается запрос списка контактов Где c.contactBook.organ...
Опубликуйте строковые идентификаторы в виде строк — новая книга 404'd в тот момент, когда вы ее выбрали
CockroachDB unique rowid() производит 64-битные идентификаторы. Реальная книга от contact books 1200081912680906758; JSON.parse JavaScript обходит все прошлое Н...
Размеры записей вместо нуля
SearchIndexService написал sizeBytes = 0 для каждого сообщения, которое он когда-либо индексировал. Под комментарием «Недоступно из конверта». Доступно: The fet...
Восстановите файлы 2b23346 и ответьте на негабаритную отправку 413
2b23346 было совершено через частный индекс, который никогда не был засеян из HEAD. Таким образом, его дерево содержало только три файла, поставленных в него, и...
Перестаньте ограничивать каждую отправку в 1 МБ, так что вставленное изображение может фактически выйти
Сочинение с вставленным изображением провалилось с голым «Не удалось отправить электронное письмо». The Композитор встраивает пасту в корпус HTML в качестве баз...
Stop Hibernate манглинг «::» касты в родном SQL
Парсер родного запроса Hibernate рассматривает «::» как сбежавшую толстую кишку и пересылает сингл ":". CockroachDB получил **************** ARRAY[]:text[]), '...
Продолжайте перепроверку надежного потребителя NATS индексатора после развертывания
Подвижное развертывание перекрывает стручки, а исходящее все еще удерживает прочный Потребитель, поэтому входящий контейнер связывается с «email-metadata-indexe...
Адаптация индексаторов метаданных к колонкам типа массива
Изменения в библиотеке, которые отображают разговоры / Search index Колонки массивов как String[]/UUID[], а не List<T>, что и остановилось каждое проиндексирова...
Свяжите индекс объемной папки и остановите его на структурном отказе
Незавершенная работа с одновременным сеансом, пронесенная так, чтобы дерево было чистым. Массовый индекс шел по страницам с полными страницами, установленными ...
Никогда не противопоставляйте лидерство собственным адресам компании
Ведущий, чья электронная почта была настроена на noreply@kamocrm.com, соответствовал каждому сообщению, которое когда-либо отправленный адрес — один ведущий рек...
Страница свинцовой подметки, пока окно не будет закрыто
Одна фиксированная страница бесшумно теряла почту всякий раз, когда почтовый ящик брал больше, чем обычно. сообщения размером страницы между клещами — всплеск р...
Адресные ответы на Reply-To и прекращение утечки исключений SMTP в пользовательский интерфейс
Быстрый ответ на уведомление KamoCRM с ошибкой: Недействительные адреса переведено дословно в поле ответов. Эта строка - собственная формулировка почты Джакарты...
Прекратите классифицировать HTML-корень как вложение
Каждое транзакционное электронное письмо, которое мы отправляем со встроенным логотипом, пришло в наш собственный. /сообщения зрителя с правильным предметом и с...
Сканирование общих репозиториев MFA
MfaEnrollmentService - это @Service в библиотеке, разделенной Камо, так что Wildcard @ComponentScan("com.kamo") в этом приложении строит его независимо от того,...
Слить дубликат ключа kamo, который разрушил EmailService
Новый блок EmailService находится в CrashLoopBackOff с 16e8a05 — 22 перезапуска. Никогда не начинал. Змеямл поднимает DuplicateKeyException на повторном верхнем...
Укрепите загрузку kububl против шелушащегося выхода [skip ci]
dl.k8s.io по выходу бегуна периодически падает в середине передачи: Curl: (56) OpenSSL SSL read: расшифровка не удалась или не удалась который не справляется с ...
Добавить недостающие конечные точки CampaignController REST для /api/email/campaigns
Рабочее пространство/редактор для массовых сообщений GET/POST/api/email/campaigns и т.д. CampaignService (@Service) была когда-либо создана — ни один @RestContr...
Удалить неоднозначный запрос UnsubscribeMatcher, который разбил стартап
EmailService устанавливает два сервлета (MVC DispatcherServlet + Spring-WS) MessageDispatcherServlet at /services/*), поэтому запрос голой строки "/api/email/un...
Прекратите сериализацию вычисленного xoauth2 Getter, который сломал кэш MailCredentials Redis
MailCredentials кэшируется в Redis (GenericJackson2Json). Добавлено "isXoauth2()" Булевый геттер был сериализован как свойство «xoauth2», но не имеет поля для ч...
Сфера охвата почтового ящика / домена KamoMail для собственных доменов организации (перекрестная утечка)
БЕЗОПАСНОСТЬ: **************** Заголовок «Удачная электронная почта от виртуальных пользователей» (и ****************) «УДАЛЕНИЕ ИМЯ Виртуальных доменов» без оп...
Persist выбрал поставщика OAuth для обратного вызова, чтобы он перестал возвращаться в KamoMail
Переключение орга на Microsoft 365 (или Google Workspace / Zoho) никогда не застревал: обратный вызов OAuth хранил токены и переворачивал статус только на уже с...
Решите логотип приветственной почты от хоста темы org, а не apex
Логотипы заголовка / футера в системных электронных письмах (приветствие / проверка) были построены как **************** — высший путь, существующий только на К...
Постоянное сравнение секретов внутренней ауты (оракул времени)
Заменить String.equal на MessageDigest.isEqual, чтобы задержка ответа не могла X-Internal-Auth делится секретным байт за байтом. Широкий охват флота копировальн...
Возврат 422 (не 500), если у участника нет почтового ящика
файлы списков и другие прочитанные конечные точки выкинули из IllegalStateException MailContext.toMailCredentials(), когда у участника не было учетных данных IM...
Не сохраняйте транзакционные NoReply отправляет в папку Sent
NoReply - это адрес только для отправки, без почтового ящика, но с каждой транзакцией. Отправить все еще пытался приложение IMAP к папке Sent, производя шумный ...
Список почтовых ящиков API возвращает UI-образный ****************
GET/api/email/mailboxes вернула необработанную сущность (providerStatus, lastSyncedAt, Без учета членов. UI настроек читает **************** Статус всегда был н...
Разрешить привилегированный доступ к почтовому ящику для чтения + отправки
разрешает доступ только через прямое назначение MemberMailbox, Почтовые ящики всплывали через **************** Права бросил NoSuchElementException -> "Не удалос...
Сохранение оригинального имени файла и типа контента при загрузке вложения
**************** Конечные точки (как личные) и контроллеры с общим почтовым ящиком) выдавали Content-Disposition: вложение без параметра имени файла и Content-T...
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...
Как вы видите судоходство?
Каждое из этих обновлений автоматически попадает в ваше рабочее пространство. Начните бесплатно и смотрите, как он растет неделю за неделей.