mail · Почта 26.800.0 Заметное

mail 26.800.0: массовые действия над ящиками и fail-closed привязка письма к посту

3 мин чтения

Грид почтовых ящиков получил панель массовых действий: включить CRM или календарь пачке ящиков, отключить пачку ящиков разом. Фича спрятана за флагом. Плюс аккуратная переделка привязки письма к посту ленты и перевод установщика на миграции.

Массовые действия: зачем и как включить

На портале с сотней сотрудников включение CRM-интеграции каждому ящику вручную — это сотня заходов в карточку. Новые экшены закрывают ровно это:

        MailboxConnecting::massDisconnectMailboxesAction(array $mailboxIds)
MailboxConnecting::massSetCalendarIntegrationAction(array $mailboxIds, $enabled)
MailboxConnecting::massSetCrmIntegrationAction(array $mailboxIds, $enabled, ?array $crmOptions = null)

    

Все три закрыты префильтрами MassConnectAccess и MailboxGridBulkActionsAccess — массовое отключение чужих ящиков не должно быть доступно тому, кто просто видит грид.

Включается фича опцией:

        \Bitrix\Main\Config\Option::set('mail', 'enable_list_improvements', 'Y');

    

Проверка — Feature::isMailboxGridBulkActionsAvailable(). По умолчанию N, то есть после обновления вы ничего нового в интерфейсе не увидите, пока не включите. Это стоит знать, прежде чем искать баг.

Результат операции возвращается как BulkActionResult с тремя списками: applied, skipped, failed. Хороший контракт для массовых операций — частичный успех виден явно, а не сваливается в один булев флаг.

Со стороны сервиса добавились MailboxConnector::enableCrmWithDefaults(), updateCalendarOptions(), updateCrmOptions(), со стороны грида — MailboxGrid::createPanel() и набор actions (Enable/DisableCrmAction, Enable/DisableCalendarAction, ConfigureCrmAction, DisconnectMailboxAction, JsPanelAction, MailboxPanelProvider).

Привязка письма к посту ленты: маленький, но показательный кусок

Новый Secretary::bindFeedPostAction(int $messageId, int $postId, CurrentUser $currentUser) пишет UF_MAIL_MESSAGE через $USER_FIELD_MANAGER->Update('BLOG_POST', ...), а не через \CBlogPost::Update().

Разница существенная. CBlogPost::Update() — это полноценное обновление поста: события блога, пересчёт прав, потенциальная смена автора на того, кто выполняет операцию. Для того чтобы дописать одно пользовательское поле, это слишком много побочных эффектов. Прямое обновление UF трогает ровно то, что нужно, и автора поста не меняет.

Второе — экшен сделан fail-closed: успехом считается только случай, когда после обновления UF в MessageAccessTable действительно появилась запись для BLOG_POST. Не появилась — пишется AddMessage2Log и возвращается ошибка. Логика простая: привязка письма к посту — это раздача доступа к переписке, и «вроде записалось» здесь недопустимый ответ.

Установщик

InstallDB больше не гоняет install/db/{mysql,pgsql}/install.sql и не регистрирует обработчики через EventManager в index.php — всё ушло в install/migrations/: tables.php (b_mail_mailbox и остальные), events.php, agents.php (CMailbox::CleanUp() раз в сутки, AccessInstaller::install() каждые 60 секунд с лимитом 600). SQL-файлы удалены, добавлен migration_config.json.

Одна деталь для тех, кто мигрирует порталы: шифрование TOKENS на b_mail_oauth включается только при чистой установке после успешной миграции. На существующем портале само по себе не включится.

Что делать

  • Хотите массовые действия — включите mail / enable_list_improvements.
  • Пишете свои bulk-операции — посмотрите на BulkActionResult как на образец: applied / skipped / failed вместо true/false.
  • Если у вас был свой код привязки писем к постам через CBlogPost::Update — это хороший повод переписать его на USER_FIELD_MANAGER и перестать переписывать автора поста.

Читайте дальше

mail 26.900.0 Заметное Свежее

Mail 26.900.0: общие подписи ломают старый API, а тяжёлые вложения переезжают на Диск

Модуль mail получил один из самых жирных релизов за последнее время: 523 файла, +39 182/−3 131 строк. Внутри — три большие фичи (общие подписи, автоперенос тяжёлых вложений на Диск, избранное с AI-классификацией писем), переработанный IMAP-синк истории и три новые таблицы в БД. Если вы кастомизирова...

4 мин
mail 26.700.0 Заметное

mail 26.700.0: статистика писем для AI-ассистента и предупреждение о провайдерах

Модуль научился считать входящие по ящику или сотруднику за период и отдавать это AI-ассистенту как инструмент. Плюс появился слой ограничений по почтовым провайдерам. Основной риск обновления — не удаления, а вставка аргументов в середину конструкторов двух DTO.

3 мин
landing 26.1000.0 Заметное Свежее

Landing 26.1000.0: удалён Block::isContains, ссылки теперь режутся по белому списку схем

Обновление `landing` 26.1000.0 (сборка от 24.08.2026) — это на 90% security-хардening плюс новая песочница для превью страниц «на устройствах». Дифф огромный — 1300 файлов, +73 тысячи строк — но почти всё это пересобранные JS-бандлы, контентные блоки и webp вместо png. Содержательного PHP — примерно...

4 мин
security 26.200.0 Безопасность Свежее

Security 26.200.0 не ставится на маке и Windows: фатал «Cannot redeclare class» прямо в апдейтере

Обновление security 26.200.0 у нас не установилось вообще: апдейтер умирает с фаталом посреди своего скрипта. Если ваш прод на Linux — выдыхайте, вас это не касается. А вот если вы ставите обновления в локальной разработке на macOS или Windows (Docker с bind-mount проектной папки — это ровно тот слу...

4 мин
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…
Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти