У нас имеется Ubuntu 10.04 server, при установке которого был выбран LAMP сервер, в связи с этим я здесь не буду описывать настройку apache2 + php5 + mysql.

Так же у нас уже есть настроенные LDAP сервер и Почтовый сервер.

Все действия в этой статье выполняются от пользователя root.

1. Установка и настройка RoundCubeMail

Скачиваем Roundcubemail (версия 0.4.2 последняя на момент написания статьи)

cd /usr/src/ && wget http://ignum.dl.sourceforge.net/project/roundcubemail/roundcubemail/0.4.2/roundcubemail-0.4.2.tar.gz

Распаковываем полученный архив

tar xzf roundcubemail-0.4.2.tar.gz

Перемещаем распакованные файлы

mv roundcubemail-0.4.2 /var/www/roundcubemail

Назначаем права

chown -R root:root /var/www/roundcubemail
chown -R :www-data /var/www/roundcubemail/logs
chown -R :www-data /var/www/roundcubemail/temp
chmod 775 /var/www/roundcubemail/logs
chmod 775 /var/www/roundcubemail/temp

Устанавливаем необходимые пакеты

apt-get install php5-mcrypt

Перезагружаем apache

/etc/init.d/apache2 restart

Создаём базу данных для roundcubemail

mysql -u root -p

CREATE DATABASE roundcubemail;
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';

\q

Открываем Roundcubemail в браузере

http://IP вашего сервера/roundcubemail/installer

и начинаем конфигурировать.

Жмём START INSTALLATION

Везде должно быть ОК кроме

PostgreSQL: NOT AVAILABLE(Not installed)
SQLite (v2): NOT AVAILABLE(Not installed)
date.timezone:  NOT OK(Could be set)

Жмём NEXT и в появившейся странице выставляем следующие значения

General configuration

product_name = ваше значение

Database setup

Database type = MySql
Database server (omit for sqlite) = localhost
Database name (use absolute path and filename for sqlite) = roundcubemail
Database user name (needs write permissions)(omit for sqlite) = roundcube
Database password (omit for sqlite) = password

IMAP Settings

default_host = ssl://localhost
default_port = 993
username_domain = example.com

SMTP Settings

smtp_server = ssl://localhost
smtp_port = 465
Use the current IMAP username and password for SMTP authentication = ставим галочку

Display settings & user prefs

language * = ru_RU
preview_pane * = ставим галочку
htmleditor * = ставим галочку
draft_autosave * = never

Жмём CREATE CONFIG и скачиваем main.inc.php и db.inc.php после чего их необходимо поместить в /var/www/roundcubemail/config на сервере

Жмём CONTINUE

Видим следующее

DB Schema:  NOT OK(Database not initialized) 

Жмём Initialize database

Тестируем IMAP

Test IMAP config

Указываем Username и Password

Жмём Check login

Ответом должно быть

IMAP connect:  OK(SORT capability: yes)

SMTP протестировать не удалось так как не смотря указанный логи и пароль тест идёт от анонимного пользователя. Но при работе всё нормально.

Всё конфигурирование Roundcubemail завершено.

Можно зайти и посмотреть как всё работает, открываем в браузере

http://IP вашего сервера/roundcubemail

2. Подключение плагинов в RoundCubeMail

Подключим два плагина, один для создания фильтров, второй для перемещения писем в папку спам.

Редактируем /var/www/roundcubemail/config/main.inc.php следующим образом

$rcmail_config['plugins'] = array('managesieve', 'markasjunk');

Подключаем конфиг файл плагина managesieve

cp /var/www/roundcubemail/plugins/managesieve/config.inc.php.dist /var/www/roundcubemail/plugins/managesieve/config.inc.php

Всё плагины подключены.

3. Подключение адресной книги из LDAP

Для этого устанавливаем необходимые пакеты

apt-get install php5-ldap

и редактируем /var/www/roundcubemail/config/main.inc.php

Находим в нём раздел

// ----------------------------------
// ADDRESSBOOK SETTINGS
// ----------------------------------

и приводим его к следующему виду

// This indicates which type of address book to use. Possible choises:
// 'sql' (default) and 'ldap'.
// If set to 'ldap' then it will look at using the first writable LDAP
// address book as the primary address book and it will not display the
// SQL address book in the 'Address Book' view.
$rcmail_config['address_book_type'] = 'sql';
 
// In order to enable public ldap search, configure an array like the Verisign
// example further below. if you would like to test, simply uncomment the example.
//$rcmail_config['ldap_public'] = array();
 
//
// If you are going to use LDAP for individual address books, you will need to 
// set 'user_specific' to true and use the variables to generate the appropriate DNs to access it.
//
// The recommended directory structure for LDAP is to store all the address book entries
// under the users main entry, e.g.:
//
//  o=root
//   ou=people
//    uid=user@domain
//  mail=contact@contactdomain
//
// So the base_dn would be uid=%fu,ou=people,o=root
// The bind_dn would be the same as based_dn or some super user login.
/* 
 * example config for Verisign directory
 *
*/
$rcmail_config['ldap_public']['Example'] = array(
  'name'          => 'Example', // Имя адресной книги
  // Replacement variables supported in host names:
  // %h - user's IMAP hostname
  // %n - http hostname ($_SERVER['SERVER_NAME'])
  // %d - domain (http hostname without the first part)
  // For example %n = mail.domain.tld, %d = domain.tld
  'hosts'         => array('ldap.example.com'), // FQDN имя LDAP сервера, можно использовать IP адрес.
  'port'          => 389, // Порт подключения к LDAP серверу
  'use_tls'         => true, // Активация TLS
  'user_specific' => false,   // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login.
  // %fu - The full username provided, assumes the username is an email
  //       address, uses the username_domain value if not an email address.
  // %u  - The username prior to the '@'.
  // %d  - The domain name after the '@'.
  // %dc - The domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
  'base_dn'       => 'ou=Users,dc=example,dc=com', // Место нахождения пользователей в LDAP
  'bind_dn'       => 'cn=admin,dc=example,dc=com', // Админ LDAP сервера
  'bind_pass'     => 'secret', // Пароль админа LDAP сервера
  'writable'      => false,   // Запрещаем редактирование LDAP записей из RoundCube
  // If writable is true then these fields need to be populated:
  // LDAP_Object_Classes, required_fields, LDAP_rdn
  'LDAP_Object_Classes' => array("top", "inetOrgPerson"), // To create a new contact these are the object classes to specify (or any other classes you wish to use).
  'required_fields'     => array("cn", "sn", "mail"),     // The required fields needed to build a new contact as required by the object classes (can include additional fields not required by the object classes).
  'LDAP_rdn'      => 'mail', // The RDN field that is used for new entries, this field needs to be one of the search_fields, the base of base_dn is appended to the RDN to insert into the LDAP directory.
  'ldap_version'  => 3,       // using LDAPv3
  'search_fields' => array('mail', 'cn'),  // fields to search in
  'name_field'    => 'cn',    // this field represents the contact's name
  'email_field'   => 'mail',  // this field represents the contact's e-mail
  'surname_field' => 'sn',    // this field represents the contact's last name
  'firstname_field' => 'gn',  // this field represents the contact's first name
  'sort'          => 'cn',    // The field to sort the listing by.
  'scope'         => 'sub',   // search mode: sub|base|list
  'filter'        => '(&(mail=*))',      // used for basic listing (if not empty) and will be &'d with search queries. example: status=act
  'fuzzy_search'  => true,     // server allows wildcard search
  'sizelimit'     => '0',     // Enables you to limit the count of entries fetched. Setting this to 0 means no limit. 
  'timelimit'     => '0',     // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit. 
);
// An ordered array of the ids of the addressbooks that should be searched
// when populating address autocomplete fields server-side. ex: array('sql','Verisign');
$rcmail_config['autocomplete_addressbooks'] = array('sql','Example');

Теперь в roundcube, в разделе Контакты должна быть доступна адресная книга Example с пользователями из LDAP

Как добавить другие параметры из LDAP читайте здесь.

Обсудить данную статью можно на форуме.

4. Материалы используемые при написании данной статьи

5. Статьи по теме