自建邮件服务器 postfix+dovecot+mysql

================================================
准备DNS

1. 添加域名的MX记录解析
2. 添加postfixadmin的二级域名A记录解析,部署postfixadmin用于邮件用户管理(添加、删除、禁用用户、修改用户密码等);
3. 添加webmail的二级域名A记录解析,部署roundcute作为Web mail界面
================================================

更改hostname为解析地址为当前服务器IP的域名
方法:
step1(重启有效).
vi /etc/sysconfig/network
改:HOSTNAME=你的域名
step2(立即生效)
hostname 你的域名

==================================================
安装php
yum install php*
php需要的扩展等根据安装过程中的需要安装即可

安装mysql
yum install mysql
yum install mysql-server
yum install mysql-devel
service mysqld start
mysql_secure_installation(用于初始化密码等一系列安全设置)

安装apache
yum install httpd

==================================================
安装postfix

yum install postfix

查看postfix是否支持dovecot和mysql
postconf -a
找到结果中的dovecot
postconf -m
找到结果中的mysql

=================================================

安装dovecot

yum install dovecot
yum install dovecot-mysql

=================================================
为安装Postfixadmin准备数据库
mysql -uroot -p

mysql>CREATE DATABASE postfix;
mysql>CREATE USER ‘postfix’@’localhost’ IDENTIFIED BY ‘postfixadmin’;
mysql>GRANT ALL PRIVILEGES ON `postfix` . * TO ‘postfix’@’localhost’;
mysql>FLUSH PRIVILEGES;
mysql>quit

==================================================

安装postfixadmin

wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.6/postfixadmin-2.3.6.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpostfixadmin%2Ffiles%2Fpostfixadmin%2Fpostfixadmin-2.3.6%2F&ts=1374647407&use_mirror=nchc
ar xzf postfixadmin-2.3.6.tar.gz -C /var/www
mv mv /var/www/postfixadmin-2.3.6 /var/www/postfixadmin

修改postfixadmin配置文件
vi config.inc.php
根据上一步创建的数据库修改一下参数:
$CONF[‘configured’] = true;
$CONF[‘default_language’] = ‘cn’;
$CONF[‘database_type’] = ‘mysql’;
$CONF[‘database_host’] = ‘localhost’;
$CONF[‘database_user’] = ‘postfix’;
$CONF[‘database_password’] = ‘postfixadmin’;
$CONF[‘database_name’] = ‘postfix’;

$CONF[‘used_quotas’] = ‘YES’;
$CONF[‘quota’] = ‘YES’;

修改/etc/httpd/conf/httpd.conf
增加ServerName为上面设置的postfixadmin二级域名的虚拟主机;重启httpd服务;

浏览器输入postfixadmin.域名/setup.php,自动创建需要的表结构;
在页面下方两个输入框输入两遍Setup password,点击“Generate password hash”,
把生成的一个配置项$CONF[‘setup_password’] = …… 添加到config.inc.php中;
在页面下方的表单中输入刚才的Setup password,管理员邮件地址(如:master@域名)和管理员密码;
点击“新增”,看到提示新增成功后,即可转入”postfixadmin.域名”,用管理员邮箱地址和密码登录;

点击域名清单菜单下“新建域”,输入域名描述等信息后点击“新增”;看到提示新增成功。

===================================================================
配置 Postfix

/etc/postfix/main.cf的内容如下:

smtpd_banner = $myhostname ESMTP $mail_name
biff = no

# appending .domain is the MUA’s job.
append_dot_mydomain = no

readme_directory = no

#Enabling SMTP for authenticated users, and handing off authentication to Dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination

myhostname = 域名
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost
relayhost =
mynetworks = 127.0.0.1(在这里把服务器的所有IP地址列出来,用空格分开)
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

#Handing off local delivery to Dovecot’s LMTP, and telling it where to store mail
virtual_transport = lmtp:unix:private/dovecot-lmtp

#Virtual domains, users, and aliases
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

========================
/etc/postfix/mysql-virtual-alias-maps.cf文件内容如下:

user = postfix
password = postfixadmin
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address=’%s’ AND active = ‘1’

========================
/etc/postfix/mysql-virtual-mailbox-domains.cf文件内容如下:

user = postfix
password = postfixadmin
hosts = localhost
dbname = postfix
query          = SELECT 1 FROM domain WHERE domain=’%s’ AND active = ‘1’

========================
/etc/postfix/mysql-virtual-mailbox-maps.cf文件内容如下:

user = postfix
password = postfixadmin
hosts = localhost
dbname = postfix
query  = SELECT maildir FROM mailbox WHERE username=’%s’ AND active = ‘1’

==================================================================================
配置Dovecot

/etc/dovecot/dovecot.conf内容如下:
==================================
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp

dict {
#quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
#expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
}

!include conf.d/*.conf

!include_try local.conf
==================================
/etc/dovecot/dovecot-sql.conf内容如下:
=====================================
driver=mysql
connect = host=localhost dbname=postfix user=postfix password=postfixadmin
default_pass_scheme = MD5

password_query = SELECT username as user, password FROM mailbox WHERE username = ‘%u’ and active=’1′
=====================
/etc/dovecot/conf.d/10-master.conf内容:

service imap-login {
inet_listener imap {
}
inet_listener imaps {
}
}

service pop3-login {
inet_listener pop3 {
}
inet_listener pop3s {
}
}

service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}

service imap {
}

service pop3 {
}

service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}

unix_listener auth-userdb {
mode = 0600
user = vmail
#group = vmail
}
# Auth process is run as this user.
user = dovecot
}

service auth-worker {
user = vmail
}

service dict {
unix_listener dict {
}
}

====================
/etc/dovecot/conf.d/auth-sql.conf.ext

passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf
}

userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

====================
/etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth=no
auth_mechanisms = plain login
!include auth-sql.conf.ext

===========================
/etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:/var/mail/vhosts/%d/%n

mail_privileged_group = mail

注释掉10-ssl.conf文件中的全部内容

==============================
创建邮件域所需的文件夹并设置权限

mkdir -p /var/mail/vhosts/域名
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail
chown -R vmail:vmail /var/mail
chown -R vmail:vmail /var/mail/vhosts

========================================
重启postfix和dovecot
登录postfixadmin,添加虚拟邮件用户

至此已经可以用outlook或Foxmail之类的MUA访问邮箱了。

========================================
安装Roundcube Webmail

下载

wget http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/0.9.2/roundcubemail-0.9.2.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Froundcubemail%2Ffiles%2Froundcubemail%2F0.9.2%2F&ts=1374656368&use_mirror=garr

tar zxvf roundcubemail-0.9.2.tar.gz -C /var/www
cd /var/www
mv roundcubemail-0.9.2 webmail
chmod -R root:root webmail

在/etc/httpd/conf/httpd.conf中配置指向roundcubemail的虚拟主机mail.域名,重启httpd服务。

浏览器打开:mail.域名/installer/开始安装配置;

$rcmail_config[‘default_host’]设置缺省域名后,登录界面不需要输入域名。
$rcmail_config[‘username_domain’]设置域名后,登录界面的用户名处不需要输入@及其后的域名(输入完整邮箱地址同样可以登录)。

缺少的php扩展需要安装,可以到http://rpm.pbone.net/下载。
intl可以用yum install php-intl安装;
mcrypt扩展需要下载php源码,whereis php-config命令找到php-config路径,然后:
进入mcrypt扩展源码目录:
./configure –with-php-config=/usr/bin/php-config
make
make install
然后在php.ini中增加一行
extension=mcrypt.so

另外,PHP.ini需要指明时区
date.timezone = Asia/Shanghai

重启httpd服务。

==================
配置Roundcube插件

password:更改密码插件

在config/main.inc.php中配置:
$rcmail_config[‘plugins’] = array(‘password’);
复制plugins/password目录中的config.inc.php.dist为config.inc.php
修改两行内容:
$rcmail_config[‘password_db_dsn’] = ‘mysql://postfix:postfixadmin@localhost/postfix’;
$rcmail_config[‘password_query’] = ‘UPDATE `mailbox` SET `password` = %c, modified=now() WHERE `username` = %u LIMIT 1’;
保存即可。