Собственно рецепт. Я все настраивал на Gentoo.
Предположим, что имеем 2 домена domain1.ru и domain2.ru
/etc/postfix/main.cf
Цитата:
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
default_privs = nobody
myhostname = mail.domain1.ru
inet_interfaces = all
mydestination =
unknow_local_recipients_reject_code = 550
mynetworks_style = subnet
mynetworks = 127.0.0.0/8, 10.0.0.0/24
mail_spool_directory = /var/spool/mail
sendmail_path = /usr/sbin/sendmail
message_size_limit = 10240000
bounce_size_limit = 65536
header_size_limit = 32768
allow_untrusted_routing = no
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
relay_domains =
relay_host =
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_transport = maildrop
virtual_mailbox_domains = domain1.ru domain2.ru
#virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = mysql:/etc/postfix/mysqlvirtual.cf
local_recipient_maps = $virtual_mailbox_maps
virtual_uid_maps = static:207
virtual_gid_maps = static:207
virtual_minimum_uid = 207
maildrop_destination_recipient_limit = 1
disable_vrfy_command = yes
Теперь самое интересное:
/etc/postfix/mysqlvirtual.cf
Цитата:
hosts = 127.0.0.1
dbname = bgbilling
user = логин
password = пароль
query = SELECT CONCAT(account,IF(did=1,'@domain1.ru',IF(did=2,'@domain2.ru','@unknown_domain'))) FROM email_account_3 WHERE account='%u' AND status = '0'
Postfix, делая запрос в базу, передает только username, а ожидает username@domain. Т.к. в таблице в явном виде не хранится такое значение, надо его создать искуственно, а т.к. доменов несколько, используем поле did, в котором число указывает на номер домена (тот, что вы указывали в конфигурации модуля)
/etc/postfix/master.cf
Цитата:
maildrop unix - n n - - pipe
flags=DRhu user=mail argv=/etc/postfix/maildropplus ${recipient} ${user}
Это взято из вики и немного подправлено:
/etc/postfix/maildropplus
Цитата:
#!/bin/bash
if ! cd /var/mail/$1; then
/usr/bin/maildirmake /var/mail/$1;
chown -R mail:mail /var/mail/$1;
chmod -R 700 /var/mail/$1;
/usr/bin/maildrop -w 90 -d $2;
else
/usr/bin/maildrop -w 90 -d $2;
fi
exit $?
/etc/courier/authlib/authdaemonrc
Цитата:
authmodulelist="authmysql"
authmodulelistorig="authmysql"
/etc/courier/authlib/authmysqlrc
Цитата:
MYSQL_SERVER 127.0.0.1
MYSQL_USERNAME логин
MYSQL_PASSWORD пароль
MYSQL_SOCKET /var/run/mysqld/mysqld.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE bgbilling
MYSQL_USER_TABLE email_account_3
MYSQL_CLEAR_PWFIELD email_account_3.password
#uid и gid взяты для юзера и группы mail
MYSQL_UID_FIELD 8
MYSQL_GID_FIELD 12
MYSQL_LOGIN_FIELD email_account_3.account
MYSQL_HOME_FIELD '/var/mail/'
MYSQL_MAILDIR_FIELD CONCAT("/var/mail/",email_account_3.account,IF(did=1,'@domain1.ru',IF(did=2,'@domain2.ru','@unknown_domain')),"/")
MYSQL_QUOTA_FIELD CONCAT(email_account_3.quota,"000S")
MYSQL_WHERE_CLAUSE email_account_3.status='0'
Вот и все. Не забыть только запустить postfix и courier-authdaemon и добавить их в автозагрузку.