По умолчанию Plesk для Linux поддерживает 2 клиента веб-почты: Horde и RoundCube. Чтобы добавить пользовательские клиенты веб-почты, их нужно настроить с помощью Plesk SDK.

Пользовательские клиенты веб-почты добавляются путем их интеграции как модулей веб-почты. После этого пользовательский клиент веб-почты станет доступен как вам, так и пользователям Plesk во всех интерфейсах Plesk: в GUI, CLI и через API.

Хук PleskSDKHookWebmail

Чтобы добавить пользовательский клиент веб-почты, используйте хук Plesk\SDK\Hook\Webmail. Нужно вернуть анонимный класс, который отнаследован от хука и имплементирует метод getWebmails.

Этот класс должен находиться в папке /usr/local/psa/admin/plib/modules/custom-webmail/hooks/.

Пример

/usr/local/psa/admin/plib/modules/custom-webmail/hooks/Webmail.php

<?php

return new class extends \Plesk\SDK\Hook\Webmail
{
    public function getWebmails(): array
    {
        return [
            (new \Plesk\SDK\Webmail('custommail', 'Custom Webmail 1.2.5'))
                ->setLoginLinkTemplate('://webmail./?user=')
                ->setIsVisibleForDomainCallback(fn (\pm_Domain $domain): bool => $domain->hasPermission('custommail')),
        ];
    }
}

Примечание: Метод должен вернуть массив классов \Plesk\SDK\Webmail. Первый аргумент конструктора \Plesk\SDK\Webmail должен быть уникальным внутри вашего модуля, так как неуникальные экземпляры перезаписывают ранее созданные записи.

Настройка шаблона для входа по ссылке

Используя классы \Plesk\SDK\Webmail. вы можете задать шаблон входа по ссылке. Пользователи будут входить в веб-почту по ссылке, которая открывает веб-почту в отдельном окне браузера. Если в Настройках почты домена выбрана пользовательская веб-почта, ссылка будет отображаться справа от учетной записи электронной почты в Сайты и домены > домен > вкладка «Почта» > Учетные записи почты.

image webmail login link

Шаблон ссылки для входа ('://webmail./?user=')) сделан на основе системы шаблонов Mustache и имеет следующую структуру:

  • protocol: http или https
  • domainName: имя домена символами ASCII. При необходимости оно автоматически конвертируется в Punycode.
  • mailName: локальная часть адреса электронной почты (до символа «@»)
  • fullMailName: полный адрес электронной почты, зашифрованный в URL-адресе (локальная и доменная части с символом «@»)

Шаблон автоматически заменяет части действительными значениями для создания ссылки для входа. Например, ссылка для входа john_doe@example.com, если для домена example.com включен HTTPS, будет выглядеть так:

https://webmail.example.com/?user=john_doe%40example.com

Удаление пользовательской веб-почты из интерфейса

Вы можете ограничить доступ к пользовательской веб-почте в зависимости от подписки или хостинг-плана. Таким образом, для всех доменов определенной подписки или хостинг плана пользовательский клиент веб-почты не будет отображаться в GUI, CLI и API.

Чтобы удалить пользовательскую веб-почту:

  1. Задайте разрешение с помощью хука pm_Hook_Permissions:

    class Modules_CustomMail_Permissions extends pm_Hook_Permissions
    {
        public function getPermissions(): array
        {
            return [
                'access_to_custommail' => [
                    'default' => true,
                    'place' => self::PLACE_ADDITIONAL,
                    'name' => 'Custom Webmail',
                    'description' => 'Grants access to Custom Webmail.',
                ],
            ];
        }
    }
    
  2. Используйте классы \Plesk\SDK\Webmail, чтобы провести обратный вызов, который принимает \pm_Domain в качестве параметра и возвращает значение типа boolean методу setIsVisibleForDomainCallback:

    <?php
    
    return new class extends \Plesk\SDK\Hook\Webmail
    {
        public function getWebmails(): array
        {
            return [
                (new \Plesk\SDK\Webmail('custommail', 'Custom Webmail 1.2.5'))
                    ->setLoginLinkTemplate('://webmail./?user=')
                    ->setIsVisibleForDomainCallback(fn (\pm_Domain $domain): bool => $domain->hasPermission('access_to_custommail')),
            ];
        }
    }
    
  3. Удаление пользовательской веб-почты для всех доменов определенной подписки или хостинг-плана:

    • (Подписка) Перейдите в Подписки > подписка > нажмите «Настроить» в правой панели > на вкладке «Разрешения» отключите разрешение «Пользовательская веб-почта».
    • (Хостинг-план) Перейдите в Тарифные планы > хостинг-план > вкладка «Разрешения» и отключите разрешение «Пользовательская веб-почта».

Создание конфигурации веб-почты

Для стабильной работы всех клиентов веб-почты требуется определенная конфигурация веб-сервера. Чтобы настроить веб-почту, используйте методы getWebmailApacheConfig и getWebmailNginxConfig класса pm_Hook_WebServer. Подробнее об этом в этой теме.

Методы getWebmailApacheConfig и getWebmailNginxConfig получат объект \pm_Domain как первый параметр и строку с типом веб-почты как второй параметр. Конфигурацию можно создать на основе полученного типа веб-почты. Например, если он соответствует типу веб-почты, который вы зарегистрировали с помощью хука \Plesk\SDK\Hook\Webmail:

class Modules_CustomMail_WebServer extends \pm_Hook_WebServer
{
    private Configuration $generator;

    <...>

    public function getWebmailApacheConfig(pm_Domain $domain, string $type): string
    {
        if ($type === 'custommail') {
            return $this->generator->getApacheConfiguration();
        }

        return '';
    }

    public function getWebmailNginxConfig(pm_Domain $domain, string $type): string
    {
        if ($type === 'custommail') {
            return $this->generator->getNginxConfiguration();
        }

        return '';
    }
}