postfixの設定についてのメモ
dovecot+PostgreSQL 設定メモ では、メール受信時のユーザーの管理を
PostgreSQLで行うための設定を記述したが、
今回は、メール送信・サーバーがメールを保管する、postfixの設定についてのメモである。
postmap /etc/postfix/vmailbox
などで、通常データを扱うが、dovecotの設定同様、ユーザーの管理をPostgreSQLで行う。
virtual_mailbox を使用して、メール専用アカウントを可能にする。
FC4のバイナリでは、MySQLやPostgreSQLは、使用できない設定でコンパイルされている
MySQLを利用するには、FC4よりソース(SRPMS)をダウンロードして
postfix.spec の
%define MYSQL 0
を
%define MYSQL 1
に変えるだけで行えるようであるが、PostgreSQLの場合その設定がないため修正が必要である。
%define PGSQL 1
を追加
また、
%if %{PGSQL}
CCARGS="${CCARGS} -DHAS_PGSQL -I/usr/local/include/pgsql"
AUXLIBS="${AUXLIBS} -lpq"
%endif
の様なコードをを追加する(PostgreSQLの導入によりパスは、適当に変更すること)
rpmbuild -ba postfix.spec
にて、コンパイル
rpm -ivh postfix.??????.i386.rpm
にて、導入
main.cfの主な変更箇所
myhostname = mail.example.net
mydomain = example.net
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost.$mydomain
virtual_mailbox_domains = $mydomain
virtual_mailbox_base = /home/
virtual_mailbox_maps = pgsql:/etc/postfix/pgsql-virtual-mailbox-maps.cf
virtual_uid_maps = pgsql:/etc/postfix/pgsql-virtual-uid-maps.cf
virtual_gid_maps = pgsql:/etc/postfix/pgsql-virtual-gid-maps.cf
virtual_minimum_uid = 100
home_mailbox = Maildir/
/etc/postfix/pgsql-virtual-mailbox-maps.cf のサンプル
hosts = localhost
user = databaseuser
password = password
dbname = databasename
select_field = maildir
table = users
where_field = mail
additional_conditions = AND active = 'Y'
/etc/postfix/pgsql-virtual-uid-maps.cf のサンプル
hosts = localhost
user = databaseuser
password = password
dbname = databasename
select_field = uid
table = users
where_field = mail
additional_conditions = AND active = 'Y'
/etc/postfix/pgsql-virtual-gid-maps.cf のサンプル
hosts = localhost
user = databaseuser
password = password
dbname = databasename
select_field = gid
table = users
where_field = mail
additional_conditions = AND active = 'Y'
テーブルは、dovecot設定メモを参照のこと
FCの場合、sendmailが、デフォルトであるため、sendmailからpostfixに切り替える。
sendmailからpostfixへの切り替えには、
alternatives --config mta
で、行うことができる。
補足)2006-12-06
FC6では、postfix2.3になっている。
warning: dict_pgsql: cannot set the encoding to LATIN1
のエラーが発生し、受信が行えない。そのため、ソースを修正。
修正するのは、postfix-2.3.3/src/global/dict_pgsql.c
// if (PQsetClientEncoding(host->db, "LATIN1") != 0) {
// msg_warn("dict_pgsql: cannot set the encoding to LATIN1, skipping %s",
// host->hostname);
// plpgsql_down_host(host);
// return;
// }
とする。