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

Mail 26.1300.0: переезд с Яндекса и Mail.ru, тёмная тема писем и аватары отправителей

1 мин чтения Устаревших API: 8
Узнавайте о ломающих изменениях Битрикса раньше, чем они доедут до прода: свежие разборы — в канале @bxmax_updates

Mail 26.1300.0 в коробочном Битрикс24 готовит порталы к тому, что Яндекс и Mail.ru закрыли стандартные почтовые протоколы для внешних сервисов, причём для всех адресов, корпоративных тоже. Модуль научился предлагать перенос почты в Битрикс24 Почту, но по умолчанию эта функция выключена. Кроме того, письма перекрашиваются под тёмную тему, у отправителей и ящиков появились аватары, а удаление писем стало отдельным правом. Прошлый разбор: Mail 26.1200.0.

Новое

Покажите уведомление о переезде на своей странице

Уведомления о переезде рассчитаны на четыре поверхности: portal, mail, crm и mobile_list. Соседним модулям правила показа не нужны, для них есть точка входа Bitrix\Mail\Public\Service\MigrationNotice\MigrationNoticeService. Метод mayHaveSomethingFor() дешёвый, он ничего не читает про ящик, и с него начинают, чтобы не грузить расширение впустую. decideFor() возвращает Result с готовым решением: что показать, про какой ящик, с какими текстами и кнопками.

        <?php declare(strict_types=1);

use Bitrix\Mail\Public\Service\MigrationNotice\MigrationNoticeService;
use Bitrix\Main\Engine\CurrentUser;
use Bitrix\Main\Loader;

function getMailMigrationNotice(?int $mailboxId = null): ?array
{
    if (!Loader::includeModule('mail')) {
        return null;
    }

    $userId = (int)CurrentUser::get()->getId();
    $service = new MigrationNoticeService();
    if (!$service->mayHaveSomethingFor($userId, 'crm')) {
        return null;
    }

    $result = $service->decideFor($userId, 'crm', $mailboxId);

    return $result->isSuccess() ? $result->getData() : null;
}

    

Если такой поверхности нет в установленной версии модуля, ошибка придёт с кодом MigrationNoticeService::ERROR_UNKNOWN_SURFACE, исключения не будет. По умолчанию уведомления и анонс выключены. Включаются они опциями migration_notice_enabled и migration_announcement_enabled (Y), причём анонс работает только при включённых уведомлениях. Кнопка «Перенести почту» ведёт в панель корпоративной почты. Самой панели пока нет, поэтому кнопка открывает заглушку /mail/, если в опции migration_control_panel_url не задан другой адрес. Одноразовый вход в панель для администратора выдаёт Controller\ControlPanel::getEntryUrlAction().

Какие ящики считаются ограниченными, решает ProviderAccessRestriction. Про смену его логики ниже, в «Что сломается».

Перекрасьте письмо под тёмную тему

Bitrix\Mail\Public\Service\Message\BodyDarkThemeService::applyColorScheme() принимает HTML письма, схему (light или dark) и цвета вашей темы в формате #rrggbb, а возвращает BodyDarkThemeResult. Исключений сервис не бросает. Если перекрасить не вышло, вернётся исходное тело и причина в reason.

        <?php declare(strict_types=1);

use Bitrix\Mail\Public\Service\Message\BodyDarkThemeService;

$result = (new BodyDarkThemeService())->applyColorScheme($body, BodyDarkThemeService::COLOR_SCHEME_DARK, [
    'bgContentPrimary' => '#1f1f1f',
    'base1' => '#f2f2f2',
    'base2' => '#c8c8c8',
    'base3' => '#9a9a9a',
    'accentMainLink' => '#5aa9ff',
    'bgSeparatorPrimary' => '#3a3a3a',
]);

$html = $result->body;

    

Без хотя бы одного из этих шести цветов сервис откажет с REASON_INVALID_PALETTE. Работает сервис за флагом MobileMessageDarkThemeFeature, и этот флаг включён по умолчанию. Проверяйте его через BodyThemeFeature::isMobileAvailable(), а не читайте флаг напрямую.

Аватары, право на удаление, флаги

У ящиков и отправителей появились аватары. Для них есть контроллеры Controller\MailboxAvatar (get, view) и Controller\SenderAvatar (get, save, view) и загрузчики FileUploader\MailboxAvatarUploaderController и SenderAvatarUploaderController. MailboxConnector::updateMailbox() принимает необязательный AvatarChange.

Удаление писем стало отдельным правом MAIL_MESSAGE_DELETE, управление аватарами отправителей — правом MAIL_SENDER_AVATARS_MANAGE. У роли «Сотрудник» по умолчанию первое есть, второго нет. Проверка в своём коде — MailAccess::hasUserAccessToMessageDeletion($userId). Пока опция message_delete_permission_enabled выключена, удалять письма могут все. REST v3 на такой отказ отвечает 403, раньше было 400.

Новые фичи модуль включает через фича-флаги ядра на Bitrix\Main\Config\Feature\AbstractFlag: SenderAvatarFeature, MailboxAvatarFeature, MobileMessageDarkThemeFeature и InternalDraftsFeature в Bitrix\Mail\Public\Features. Внутренние черновики теперь включаются флагом, а не опцией internal_drafts_enabled. Как устроены флаги, мы разбирали в main 26.700.0.

Модуль подписан на событие ядра main:OnMailSenderListBuild и отдаёт в список отправителей подписи пользователя.

Что сломается

Перепроверьте вызовы isRestricted()

ProviderAccessRestriction::isRestricted(?string $serviceName) больше не принимает $email, и ответ у метода теперь другой. Раньше для Яндекса он возвращал true только на бесплатных доменах, теперь вернёт true на любом ящике Яндекса или Mail.ru. Старый вызов с двумя аргументами не упадёт, но вернёт другой ответ. Проверка по адресу осталась в новом isMigrationRestricted($serviceName, $email), но смысл у неё обратный. Метод возвращает true только для корпоративных доменов, которые можно перенести в Битрикс24 Почту, а на бесплатных адресах false. Заменить им старый вызов один в один не получится.

Уберите isHistorySyncByDateSearchEnabled()

Feature::isHistorySyncByDateSearchEnabled() удалён вместе с опцией sync_history_by_date_search. Вызов теперь упадёт с Error.

Что заметят на портале

  • Массовые действия в гриде ящиков включены по умолчанию: опция mailbox_grid_bulk_actions_enabled по умолчанию равна Y. Доступ к ним проверяет новый фильтр MassMailboxActionsAccess.
  • Фоновые пересборки истории остановлены опцией history_backfill_stopped = Y: степперы переписок и индекса сохраняют курсор и стоят.
  • Письмо уходит, только если SMTP-запись привязана к ящику. На новой установке main/sender_identity_address_fallback = N, и ядро больше не ищет запись по адресу. На существующих порталах опцию выключит степпер LegacyMailboxSenderBindingStepper, когда привяжет все старые записи. Отказы приходят с кодами MAIL_SENDER_ADDRESS_MISMATCH, MAIL_SENDER_UNAVAILABLE и MAIL_SEND_FAILED.

У десятка методов появились необязательные параметры (createMessage(), mail(), updateMailbox(), cleanCachesByMailboxId(), конструкторы AvatarManager и ComposeFormDataProvider). Сломаются только наследники, которые эти методы переопределяют.

Deprecated

Классы Public\Service\Mailbox\{AddressResolver, ResolvedMailbox, AddressHistory, AddressOccupation, AddressOccupationStatus, OrphanAlias} переехали в Public\Service\Mailbox\Alias\. Старые имена работают через Loader::registerClassAliases() в include.php, ими пока пользуются bizproc и crm. Ваш код не сломается, но импорты лучше перевести на \Alias\ сейчас.

Helper::repairCrmImapFilterAgent() стал заглушкой, которая возвращает пустую строку, и агента с ним больше не регистрируют.

БД

В b_mail_mailbox добавлены EMAIL_DOMAIN_HASH, AVATAR_RESOURCE_ID и AVATAR_REVISION, все три есть в MailboxTable::getMap(). Хеш домена для старых строк дозаполняет агент. Новые таблицы: b_mail_mailbox_avatar_resource, b_mail_sender_avatar и b_mail_sender_avatar_resource. Старые файлы аватаров раз в час чистят два агента.

Мелочи и находки

  • Если сервер сменил UIDVALIDITY папки, PlacementFolderVersionFilter не даст пользовательской команде уйти на строку под старой версией папки. Без этого удаление могло попасть в другое письмо с тем же UID. Актуальной считается последняя записанная версия, а не наибольшая: сервер, нарушающий RFC 3501, может выдать меньшее число.
  • StyleTagSanitizer вырезает внешние ресурсы из <style> в подписях.
  • MailboxTable::withDeferredCacheCleanup() откладывает сброс кеша ящиков до конца переданного блока. Пригодится, если массово правите ящики из своего кода.

Устаревшие и удалённые API в этой версии

Символ Статус Чем заменять
Bitrix\Mail\Public\Service\Mailbox\AddressResolver Deprecated Bitrix\Mail\Public\Service\Mailbox\Alias\AddressResolver
Bitrix\Mail\Public\Service\Mailbox\ResolvedMailbox Deprecated Bitrix\Mail\Public\Service\Mailbox\Alias\ResolvedMailbox
Bitrix\Mail\Public\Service\Mailbox\AddressHistory Deprecated Bitrix\Mail\Public\Service\Mailbox\Alias\AddressHistory
Bitrix\Mail\Public\Service\Mailbox\AddressOccupation Deprecated Bitrix\Mail\Public\Service\Mailbox\Alias\AddressOccupation
Bitrix\Mail\Public\Service\Mailbox\AddressOccupationStatus Deprecated Bitrix\Mail\Public\Service\Mailbox\Alias\AddressOccupationStatus
Bitrix\Mail\Public\Service\Mailbox\OrphanAlias Deprecated Bitrix\Mail\Public\Service\Mailbox\Alias\OrphanAlias
Bitrix\Mail\Helper::repairCrmImapFilterAgent() Deprecated (без публичной замены)
Bitrix\Mail\Helper\Config\Feature::isHistorySyncByDateSearchEnabled() Удалено —

Новая версия вышла — разбор уже в Telegram

В канале @bxmax_updates публикуем каждый свежий разбор: что сломается, что устарело и что появилось в API. Узнаете до того, как обновите прод.

Подписаться

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

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

Mail 26.1200.0: отложенная отправка, отмена отправки и автоответ за выключенными опциями

Mail 26.1200.0 идёт следом за [26.1100.0](/bitrix-updates/mail/mail-26-1100-0) и по объёму тянет на несколько релизов: отложенная отправка, отмена отправки, автоответ «в отпуске», группировка писем в переписки, картинки в подписях и генерация темы через AI. Всё это выключено опциями модуля, и после…

2 мин
mail 26.1000.0 Заметное Свежее

Mail 26.1000.0: FIELD_BCC без конвертных получателей, один адрес на портал и транзакции в MailboxTable

Mail 26.1000.0 вышел следом за [26.900.0](/bitrix-updates/mail/mail-26-900-0) и снова большой. Много кода спрятано за выключенными флагами: серверные черновики, метки, новая форма письма, AI-классификация входящих, макросы в подписях. Сразу после обновления заработают запрет повторного подключения а…

3 мин
mail 26.1100.0 Заметное Свежее

Mail 26.1100.0: smtpd.php без токена отвечает 404, а ящики удалённых пользователей удаляет агент

Mail 26.1100.0 вышел следом за [26.1000.0](/bitrix-updates/mail/mail-26-1000-0). Вендор пишет только о повышенной стабильности подключённых ящиков. В коде за этим стоят три вещи: инфраструктура «поколений источника» для переезда ящика на другой IMAP-сервер без потери истории (по умолчанию выключена)…

5 мин
mail 26.900.0 Заметное

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

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

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

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

на связи

пишет…

Можно закрыть чат и перейти на другую страницу. Когда ответ будет готов, на кнопке Домового появится отметка.

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

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

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

Войти