Ключевые слова:xmail, mail, imap, dovecot, (найти похожие документы)
From: Dmitry A. Vinogradov <vshekun@mail.ru.>
Newsgroups: email
Date: Mon, 12 Oct 2008 17:02:14 +0000 (UTC)
Subject: Dovecot IMAP для XMail
Введение
--------
Появилась задача прикрутить WEB-интерефейс к XMail. После недолгих
поисков, был найден PHP-скрипт,
позволяющий вытаскивать данные об учетных записях из XMail.
Устанавливаем dovecot
# wget http://dovecot.org/releases/1.1/dovecot-1.1.3.tar.gz
# tar -xzf dovecot-1.1.3.tar.gz
# cd dovecot-1.1.3
Т.к. мне не нужно ни чего кроме обычного IMAP, то отказываюсь от лишнего
балласта.
# ./configure --enable-static \
--disable-ipv6 \
--without-pam \
--without-shadow \
--without-pop3d \
--without-ssl
# make
# make install
Конфиг /usr/local/etc/dovecot.conf
base_dir = /var/run/dovecot/
login_dir = /var/run/dovecot/login
protocols = imap
disable_plaintext_auth = no
ssl_disable = yes
info_log_path = /var/MailRoot/logs/dovecot-info.log
log_path = /var/MailRoot/logs/dovecot.log
log_timestamp = "%b %d %H:%M:%S "
mail_debug = no
auth_debug = no
auth_debug_passwords = no
login_chroot = yes
login_user = dovecot
# mail_uid не должен быть определен в passwd. Рекомендуется использовать "нереальные" uid от 30000 и выше.
mail_uid=50000
mail_gid=dovecot
# Приводит имя пользователя к нижнему регистру
auth_username_format = %Lu
mail_location = maildir:/var/MailRoot/domains/%d/%n/Maildir
protocol imap {
login_executable = /usr/local/libexec/dovecot/imap-login
mail_executable = /usr/local/libexec/dovecot/imap
}
auth default {
verbose = yes
mechanisms = plain
passdb passwd-file {
args = username_format=%u /var/MailRoot/dovecotusers.tab
}
userdb passwd-file {
args = username_format=%u /var/MailRoot/dovecotusers.tab
}
user = root
}
Подготавливаем XMail
Т.к. XMail хранит папки учетных записей MailBox в том же регистре, что и
имя пользователя, то мы получаем регистрозависимость dovecot. Я
переконвертил в mailusers.tab имена пользователей и их папки в нижний
регистр. Ниже привожу скрипт конвертации. Запускать его надо из каталога
XMail (/var/MailRoot).
Скрипт conv_mailusers.sh:
#!/bin/sh
# 1. Convert mailusers.tab
cp mailusers.tab mailusers.tab.backup
cat mailusers.tab.backup | sed 's/\([^\t]*\t"\)\([^\t]*\)\("\t[^\t]*\t[^\t]*\t"\)\([^"]*\)/\L\1\2\E\3\L\4\E/' > mailusers.tab
# 2. Convert domain folder structure
cd domains
for domain in `cat ../domains.tab | sed 's/\"//g'`
do
cd $domain
for dir in `ls -1`
do
ddir=`echo $dir | tr A-Z a-z`
test -e $ddir || mv $dir $ddir
done
cd ..
done
xmail2dovecot
Мне было удобнее работать с открытыми паролями учетных записей, поэтому
я внес некоторые коррективы в скрипт. Так же исправил некоторые ошибки,
кот. выдавал PHP4:
diff orig/xmail2dovecot.php xmail2dovecot.php
31,33c31,33
< $XMAILADMINUSERNAME = '';
< $XMAILADMINPASSWORD = ''; //put your xmail admin pwd
< $CONFIGURED = ''; //Set this to "YES" when done configuration
---
> $XMAILADMINUSERNAME = 'XMailAdmin';
> $XMAILADMINPASSWORD = 'XMailPassword'; //put your xmail admin pwd
> $CONFIGURED = 'YES'; //Set this to "YES" when done configuration
36,37d35
<
<
101a100
> global $l_domain, $l_editname;
194a194,195
> $addr1="";
>
207c208
< if ($addr1 == "??") $addr1 = "";
---
> if ( $addr1 == "??") $addr1 = "";
209c210,211
< print "$var[1]@$var[0]:".shadow($var[2])."\n";
---
> # print "$var[1]@$var[0]:".shadow($var[2])."\n";
> print "$var[1]@$var[0]:{plain}".$var[2]."\n";
Создаем базу данных учетных записей для dovecot (редактируем переменные
$XMAILADMINUSERNAME и $XMAILADMINPASSWORD и запускаем):
# /var/MailRoot/xmail2dovecot.php > /var/MailRoot/dovecotusers.tab
Заключение
Проверяем работу:
# dovecot
# telnet127.0.0.1 143
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
* OK Dovecot ready.
a login AdMiN@ExaMple.ru xxxxxx
a OK Logged in.
a logout
* BYE Logging out
a OK Logout completed.
Connection closed by foreign host.