[О CGP] [Почему CGP?] [CGP в России] [Услуги и цены] [Поддержка] [Скриншоты] [Документация] [Для разработчиков] [Пресса] [Новости] [Контакты/Почта] [Ресурсы] [FAQ] Что такое CLI? Как работать с CLI из Perl?
Почтовый сервер на базе пакета Communigate Pro предоставляет своим владельцам широкие возможности по администрированию системы. Одним из инструментов является так называемый CLI-интерфейс (Command Line Interface).
Что такое CLI и зачем это нужно? CLI-интерфейс почтового сервера CommuniGatePro является альтернативой стандартному веб-интерфейсу администрирования почтового домена. При грамотном использовании, являясь достаточно мощным и гибким инструментом, CLI позволяет в значительной мере автоматизировать многие элементы работы с почтой: создание и удаление пользователей, работа с листами рассылки, ведение статистики. Именно CLI-интерфес как правило используется провайдерами для управления аккаунтами и доменами пользователей из биллинговой системы. При заведении нового пользователя на почтовый сервер с использованием CLI-интерфейса отправляется соответствующая команда, создающая еще один почтовый ящик или домен. Аналогичные действия производятся в случае отключения пользователя. Общий принцип работы таков: клиент устанавливает с почтовым сервером TCP-соединение по определенному порту (по умолчанию порт 106, включается/выключается в Settings -> Access -> Serving PWD Clients -> listener), проходит аутентификация пользователя, далее на каждый клиентский запрос сервер проверяет корректность запроса и наличие прав доступа на конкретный запрос у пользователя, а затем в зависимости от этого выдает клиенту определенный ответ и выполняет запрошенные им действия. То есть сервер выполняет данные ему команды и возвращает результат или ошибку в диалоговом режиме. Клиент в данном случае - специализированная программа (скрипт) или человек, использущий например telnet. Параметры подключения:
Пользователь в данном случае, это авторизованный администратор системы, наделенный определенными правами. Система контроля прав доступа, которая используется в 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. Это поможет им интегрировать свой виртуальный почтовый сервер с внутренними системами заведения услуг или аккаунтинга, например. Какие же бывают команды... данные об аккаунте, например:
установки почтового домена, например:
Здесь перечислены лишь примеры команд CLI и их использования. Полный список возможностей, которые предоставляет Command Line Interface Вы можете получить здесь. Для удобства работы с CLI и его интеграции в собственные программы пользователя или CGI-скрипты сайта разработчиками почтового сервера CommuniGatePro был создан специальный модуль языка Perl CLI.pm. Данный модуль содержит все необходимые процедуры для подключения через CLI к почтовому серверу, выполнения запросов и получения результатов. Чтобы использовать его в своих скриптах, небходимо установить данный модуль, и использовать его из скрипта ( пример ): use CLI;
Для каждой команды CLI в данном модуле существует одноименная функция.
Вызов выглядит примерно так:
new CGP::CLI( { PeerAddr=>CGPaddress, PeerPort=>port, login=>username,
password=>password})
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->Logout();
getErrCode
if($cli->getErrCode!=200) { print "Something's wrong..."; }
getErrMessage
print "The last result message is ".$cli->getErrMessage."\n";
isSuccess
if($cli->isSuccess) { print "OK"; }
getErrCommand
NewPassword(newPassword)
SendCommand(command)
GetResponseData
Следующий скрипт на языке 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-командам Вы сможете реализовать совершенно новые функциональности и интегрировать свой сайт с нужными элементами почтового сервера. Например, Вы можете реализовать автоматический сбор информации о подписчиках Ваших списков рассылки или делать бэкап учетных записей своего домена. Это может быть полезно для дальнейшего анализа таких данных или их резервного/архивного хранения.
|