[О CGP] [Почему CGP?] [CGP в России] [Услуги и цены] [Поддержка] [Скриншоты]
[Документация] [Для разработчиков] [Пресса] [Новости] [Контакты/Почта] [Ресурсы] [FAQ]

Что такое CLI? Как работать с CLI из Perl?

Почтовый сервер на базе пакета Communigate Pro предоставляет своим владельцам широкие возможности по администрированию системы. Одним из инструментов является так называемый CLI-интерфейс (Command Line Interface).

  • Что такое CLI и зачем это нужно?
  • Как работает CLI?
  • Примеры команд CLI
  • CLI и Perl
  • Примеры использования CLI.pm
  • Полная документация
  • Ссылки


    Что такое CLI и зачем это нужно?

    CLI-интерфейс почтового сервера CommuniGatePro является альтернативой стандартному веб-интерфейсу администрирования почтового домена. При грамотном использовании, являясь достаточно мощным и гибким инструментом, CLI позволяет в значительной мере автоматизировать многие элементы работы с почтой: создание и удаление пользователей, работа с листами рассылки, ведение статистики. Именно CLI-интерфес как правило используется провайдерами для управления аккаунтами и доменами пользователей из биллинговой системы. При заведении нового пользователя на почтовый сервер с использованием CLI-интерфейса отправляется соответствующая команда, создающая еще один почтовый ящик или домен. Аналогичные действия производятся в случае отключения пользователя.

    Как работает CLI?

    Общий принцип работы таков: клиент устанавливает с почтовым сервером TCP-соединение по определенному порту (по умолчанию порт 106, включается/выключается в Settings -> Access -> Serving PWD Clients -> listener), проходит аутентификация пользователя, далее на каждый клиентский запрос сервер проверяет корректность запроса и наличие прав доступа на конкретный запрос у пользователя, а затем в зависимости от этого выдает клиенту определенный ответ и выполняет запрошенные им действия. То есть сервер выполняет данные ему команды и возвращает результат или ошибку в диалоговом режиме. Клиент в данном случае - специализированная программа (скрипт) или человек, использущий например telnet.

    Параметры подключения:

    • сервер: cgp-server.your-domain
    • порт: 106
    • имя пользователя: login
    • пароль: пароль, заданный для данного пользователя

    Пользователь в данном случае, это авторизованный администратор системы, наделенный определенными правами.

    Система контроля прав доступа, которая используется в CGP, идентифицирует пользователя по логину/пароли и даст выполнять те команды, на которые пользователь уполномочен администротором.

    Рассмотрим самый простой пример пример работы с CLI. В данном примере:

    К: - клиент, С: - сервер

    К: telnet mail.domain 106
    С: 200 CommuniGate Pro PWD Server 3.5.9 ready
    К: USER postmaster@domain
    С: 300 please send the PASS
    К: PASS postmasterpassword
    С: 200 connected to backend server
    К: CreateAccount "user1"
    С: 200 OK
    К: CreateAccount "user1"
    С: 520 account with this name already exists
    К: RenameAccount "user1" into "user2"
    С: 200 OK
    К: DeleteAccount "user2"
    С: 200 OK
    К: QUIT
    С: 200 CommuniGate Pro PWD Server connection closed
    
    Примеры команд CLI

    Как же может быть использован CLI? Во-первых, для автоматизированного администрирования системы владельцем сервера. Во-вторых, для автоматизации работы с сервером со стороны обычных пользователей. Например, Вы можете делегировать абонентам права на администрирования своего домена через CLI. Это поможет им интегрировать свой виртуальный почтовый сервер с внутренними системами заведения услуг или аккаунтинга, например.

    Какие же бывают команды...

    данные об аккаунте, например:

    • GetAccountSettings accountName - получить информацию по установкам аккаунта
    • GetAccountEffectiveSettings accountName - получить информацию по установкам аккаунта, включая установки по умолчанию
    • GetAccountRules accountName - получить список фильтров данного аккаунта
    • GetAccountInfo accountName Key keyName - информация по аккаунту. Например, время последнего логина
      keyName могут быть следующими:
      • LastAddress - IP-адрес, с которого в последний раз был осуществлен логин
      • LastFailedAddress - IP-адрес, с которого в последний раз была осуществлена неудачная попытка логина
      • LastLogin - дата и время последнего логина
      • LastFailedLogin - дата и время последней неудачной попытки логина
      • StorageUsed - размер (в байтах) дискового пространства, занимаемого данным аккаунтом
    данные о папках аккаунта, их создание, удаление, например:
    • LISTMAILBOXES accountName [ FILTER filter] [ AUTH authAccountName] - список папок пользователя
    • DELETEMAILBOX accountName MAILBOX mailboxName [ AUTH authAccountName] - удаление папки
    администрирование листов рассылки данного аккаунта, например:
    • GetAccountLists accountName - список листов рассылки данного пользователя
    • ListSubscribers listName [ FILTER filter [ limit ] ] - список подписчиков листа рассылки данного пользователя
    Примечание: доступность тех или иных команд зависит от тех установок и прав доступа, которые были заданы администратором почтового домена для созданного аккаунта. Повторимся, для каждого аккаунта можно установить специальные "права".

    установки почтового домена, например:

    • GetDomainSettings [ domainName ] - установки домена
    • GetAccountDefaults [ domainName ] - установки по умолчанию для создаваемых пользователей домена
    • ListAccounts [ domainName ] - список пользователей домена
    создание, удаление пользователей, например:
    • CreateAccount accountName [accountType] [ external ] [settings] - создание пользователя
    создание, удаление forwarder-аккаунтов, например:
    • DeleteForwarder forwarderName - удаление frowarder'а

    Здесь перечислены лишь примеры команд CLI и их использования. Полный список возможностей, которые предоставляет Command Line Interface Вы можете получить здесь.

    CLI и Perl

    Для удобства работы с CLI и его интеграции в собственные программы пользователя или CGI-скрипты сайта разработчиками почтового сервера CommuniGatePro был создан специальный модуль языка Perl CLI.pm. Данный модуль содержит все необходимые процедуры для подключения через CLI к почтовому серверу, выполнения запросов и получения результатов. Чтобы использовать его в своих скриптах, небходимо установить данный модуль, и использовать его из скрипта ( пример ):

    use CLI;
    

    Для каждой команды CLI в данном модуле существует одноименная функция. Вызов выглядит примерно так:

    my $subscribers=$cli->ListSubscribers("news", '', 100)
    - в данном модуле используются следующие процедуры:

    new CGP::CLI( { PeerAddr=>CGPaddress, PeerPort=>port, login=>username, password=>password})
    Для подключения через CLI к почтовому серверу используются следующие параметры:

    • CGPaddress: mail.domain
    • port: 106
    • username: user@domain, наиболее вероятно: postmaster@domain
    • password: пароль пользователя user@domain
    Возвращает новый объект или undef. Пример:
    my $cli = new CGP::CLI( { PeerAddr => 'mail.domain',
                              PeerPort => 106,
                              login    => 'postmaster@domain',
                              password => 'password' } )
       || die "Can't login to CGPro: ".$CGP::ERR_STRING."\n";
    

    Logout
    Закрывает текущую сессию с CLI. Возвращает TRUE в случае успеха или FALSE при каких-либо ошибках. Пример:

    $cli->Logout();
    

    getErrCode
    Возвращает код последней выполненной CLI команды. Пример:

    if($cli->getErrCode!=200) { print "Something's wrong..."; }
    

    getErrMessage
    Возвращает результат последней выполненной CLI команды в виде строки. Пример:

    print "The last result message is ".$cli->getErrMessage."\n";
    

    isSuccess
    Проверяет, успешно ли выполнена последняя команда CLI. Возвращает TRUE в случае успеха (код 200) или FALSE при каких-либо ошибках. Пример:

    if($cli->isSuccess) { print "OK"; }
    

    getErrCommand
    Возвращает полный текст последней отправленной серверу команды в виде строки.

    NewPassword(newPassword)
    Устанавливает новый пароль для текущего аккаунта.

    SendCommand(command)
    Отправляет команду серверу. Возвращает TRUE в случае успеха (код 200) или FALSE при каких-либо ошибках.

    GetResponseData
    Возвращает ссылку на данные (если они есть), полученные в результате выполнения SendCommand(command)

    Примеры использования CLI.pm

    Следующий скрипт на языке Perl позволяет получить список подписчиков листа рассылки:

    #!/usr/local/bin/perl -w
    
    use CLI;
    
    my $cli = new CGP::CLI( { PeerAddr => 'mail.domain',
                              PeerPort => 106,
                              login    => 'postmaster@domain',
                              password => 'postmasterpassword' } )
       || die "Can't login to CGPro: ".$CGP::ERR_STRING."\n";
    
      my $subscribers=$cli->ListSubscribers("ListName",
    '', 10000)
      || die "Can't list: ".$cli->getErrMessage.", quitting";
      print "  $_\n" foreach(@$subscribers);
    

    Получаем список пользователей домена и время последнего логина для каждого из них:

    #!/usr/local/bin/perl -w
    
    use CLI;
    
    my $cli = new CGP::CLI( { PeerAddr => 'mail.domain',
                              PeerPort => 106,
                              login    => 'postmaster@domain',
                              password => 'postmasterpassword' } )
       || die "Can't login to CGPro: ".$CGP::ERR_STRING."\n";
    
    my $accountList = $cli->ListAccounts("domain");
    
    die "\nError " . $cli->getErrMessage . "(".$cli->getErrCode.
        ") fetching accounts list\n"
        unless ($accountList);
    
    my $count = 0;
    
    foreach $userName (sort keys %$accountList) {
    
      print "Last login of user " . $userName . "\@domain: ";
      print $cli->GetAccountInfo($userName . "\@domain",
    "LastLogin");
      print "\n";
    
    }
    
    $cli->Logout;
    

    О том, как правильно разместить собственный скрипт на виртуальном сервере, можно прочитать тут.

    Вполне очевидно, что после изучения документации по доступным Вам CLI-командам Вы сможете реализовать совершенно новые функциональности и интегрировать свой сайт с нужными элементами почтового сервера. Например, Вы можете реализовать автоматический сбор информации о подписчиках Ваших списков рассылки или делать бэкап учетных записей своего домена. Это может быть полезно для дальнейшего анализа таких данных или их резервного/архивного хранения.

    Ссылки

  • CommuniGate Pro CLI
  • CLI и Perl
  • CLI и Java


    первая страница :: купить :: контакты :: новости :: о продукте

    © 1999-2005 Zenon N.S.P. (095) 232-37-36 (812) 326-44-68 cgp-support@zenon.net