extmail的核心部分是postfix,是一种web页面,可以创建账号,可以收发邮件。extman可以账号注册。账号存放在mysql里面。postfix发信件,dovecot收信件。利用outlook收信件(docecot)和发信件(postfix)都要通过mysql查询。发信件(postfix)要提取mysql账号信息要通过courier-authlib。是基于虚拟帐号的邮件系统。
下图是extmail的原理图
1.修改主机名
[root@mail~]# vim /etc/sysconfig/network
HOSTNAME=mail.sh.com
关闭防火墙和selinux
[root@mail~]# service iptables stop
[root@mail~]# setenforce 0
[root@mail~]# vim /etc/sysconfig/selinux
SELINUX=disabled //改为disabled,永久关闭selinux
init6 //重启系统
2.安装所需的rpm包
[root@mail~]# mount /dev/cdrom /media/cdrom //挂载
[root@mail~]# yum install httpd mysql mysql-server mysql-devel openssl-devel dovecot perl-DBD-MySQL tcl tcl-devel libart_lgpl libart_lgpl-devellibtool-ltdl libtool-ltdl-devel expect
3.安装开发组
查看所有开发组
[root@mail~]# yum grouplist |less
安装下面4个开发组
DevelopmentLibraries
DevelopmentTools
LegacySoftware Development
SoftwareDevelopment
安装方法:
# yumgroupinstall "packge_group_name"
4. 启动httpd和mysqld服务
[root@mail~]# vim /etc/httpd/conf/httpd.conf
ServerNamewww.example.com:80 //打开这一行(276行)
servicehttpd start
servicemysqld start
[root@mail~]# chkconfig mysqld on
5.创建mysql管理账号
[root@mail~]# mysqladmin-u root -p password '123' //创建mysql管理账号
Enterpassword: 直接回车就行了
6、关闭sendmail,并将它的随系统自动启动功能关闭:
#service sendmail stop
#chkconfig sendmail off
7.启动saslauthd服务,并将其加入到自动启动队列:
# service saslauthd start
# chkconfig saslauthd on
1.把软件包传到/root目录下
需要的软件包如下图所示
2.创建postfix和postdrop用户和组
[root@mailextmail]# groupadd -g 2525 postfix
[root@mailextmail]# useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
创建postdrop用户和组
[root@mail~]# groupadd -g 2526 postdrop
[root@mail~]# useradd -g postdrop -u 2526 -s /bin/false -M postdrop
3.解压
[root@mail]#tar -zxvf postfix-2.8.2.tar.gz -C /usr/local/src/
root@mail]#cd /usr/local/src/postfix-2.8.2
由下图可看到已经有了makefile文件,不需要./configure了。
[[email protected]]# vim INSTALL //查看帮助
4.配置编译并安装
[[email protected]]# make makefiles'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL-I/usr/include/sasl -DUSE_TLS ''AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'
make
makeinstall
按照以下的提示输入相关的路径([]号中的是缺省值,”]”后的是输入值,省略的表示采用默认值)
install_root:[/] /
tempdir:[/usr/local/src/ postfix-2.6.5] /tmp
config_directory:[/etc/postfix] /etc/postfix
daemon_directory:[/usr/libexec/postfix]
command_directory:[/usr/sbin]
queue_directory:[/var/spool/postfix]
sendmail_path:[/usr/sbin/sendmail]
newaliases_path:[/usr/bin/newaliases]
mailq_path:[/usr/bin/mailq]
mail_owner:[postfix]
setgid_group:[postdrop]
html_directory: [no] /var/www/postfix_html
manpages: [/usr/local/man]
readme_directory: [no]
生成别名二进制文件,这个步骤如果忽略,会造成postfix效率极低:
[[email protected]]# newaliases
5.postfix控制脚本
创建临时目录,把光盘上的postfix rpm软件包拷到临时目录下,这个包里面有postfix的控制脚本
[root@mail postfix-2.8.2]# mkdir /tmp/abc
[[email protected]]# cp /mnt/cdrom/Server/postfix-2.3.3-2.1.el5_2.i386.rpm /tmp/abc
进入/tmp/abc目录中
[[email protected]]# cd /tmp/abc/
把rpm包转换成cpio格式,再用cpio进行拆解
[root@mailabc]# rpm2cpio postfix-2.3.3-2.1.el5_2.i386.rpm |cpio -id
拆解后的包
[root@mailabc]# ll
total3664
drwxr-xr-x5 root root 4096 Jun 29 19:24 etc
-r--r--r--1 root root 3734257 Jun 29 19:21 postfix-2.3.3-2.1.el5_2.i386.rpm
drwxr-xr-x7 root root 4096 Jun 29 19:24 usr
drwxr-xr-x3 root root 4096 Jun 29 19:24 var
[root@mailabc]# cd etc/rc.d/init.d/
[[email protected]]# ll
total4
-rwxr-xr-x1 root root 2404 Jun 29 19:24 postfix
[[email protected]]# cp -p postfix /etc/init.d/
[[email protected]]# service postfix start
[[email protected]]# netstat -tupln |grep 25
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 9544/master
[[email protected]]# chkconfig --add postfix
[[email protected]]# chkconfig postfix on
6.postfix配置
编辑postfix的主配置文件
[[email protected]]# vim /etc/postfix/main.cf
75myhostname = mail.cj.com
83mydomain = cj.com
98myorigin = $myhostname
99myorigin = $mydomain
113inet_interfaces = all
161mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
260mynetworks = 168.100.30.0/24, 127.0.0.0/8
启动postfix服务
[[email protected]]# service postfix restart
[[email protected]]# useradd user1
Youhave new mail in /var/spool/mail/root
7.测试
[[email protected]]# mail user1 //给user1写邮件
Subject:1
aaaaaaaaaaaa
.
Cc: q
[[email protected]]# useradd user1
Youhave new mail in /var/spool/mail/root
[[email protected]]# mail user1
Subject:1
aaaaaaaaaaaa
[root@mail~]# cd /var/spool/mail/
vimuser1
看到的结果如下
查询已经安装的和sasl有关的软件包
[root@mailmail]# rpm -qa |grep sasl
cyrus-sasl-plain-2.1.22-5.el5
cyrus-sasl-devel-2.1.22-5.el5
cyrus-sasl-2.1.22-5.el5
cyrus-sasl-lib-2.1.22-5.el5
查询光盘上所有与sasl有关的软件包
[root@mailmail]# ll /mnt/cdrom/Server/ |grep sasl
下面的软件包是和md5认证的
cyrus-sasl-md5-2.1.22-5.el5.i386.rpm
进行安装
[root@mailmail]# yum install cyrus-sasl-md5
[[email protected]]# service postfix restart
[root@mail mail]# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to xiaoxizi (127.0.0.1).
Escape character is '^]'.
220 mail.cj.com ESMTP Postfix
EHLO mail.a.com
250-mail.cj.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
[root@mail ~]#postconf -a
cyrus
dovecot
#vi/etc/postfix/main.cf 添加以下内容:
############################CYRUS-SASL############################
broken_sasl_auth_clients= yes smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
smtpd_sasl_auth_enable= yes
smtpd_sasl_local_domain= $myhostname
smtpd_sasl_security_options= noanonymous
smtpd_banner =Welcome to our $myhostname ESMTP,Warning: Version not Available!
[[email protected]]# service postfix restart
telnet 127.0.0.125
250-AUTH PLAINLOGIN DIGEST-MD5 CRAM-MD5
250-AUTH=PLAINLOGIN DIGEST-MD5 CRAM-MD5
[root@mail ~]#mkdir /usr/local/lib/sasl2
[root@mail ~]#vim /usr/local/lib/sasl2/smtpd.conf
pwcheck_method:saslauthd
mech_list: PLAINLOGIN
[root@mail ~]#service saslauthd start
[root@mail ~]#chkconfig saslauthd on
[root@mail ~]#tar -jxvf courier-authlib-0.63.0.tar.bz2 -C /usr/local/src
cd/usr/local/src/courier-authlib-0.63.0/
./configure --prefix=/usr/local/courier-authlib--sysconfdir=/etc --with-authmysql --with-mysql-libs=/usr/lib/mysql--with-mysql-includes=/usr/include/mysql --with-redhat --with-authmysqlrc=/etc/authmysqlrc--with-authdaemonrc=/etc/authdaemonrc --with-ltdl-lib=/usr/lib--with-ltdl-include=/usr/include
make &&make install
chmod 755/usr/local/courier-authlib/var/spool/authdaemon
cp/etc/authdaemonrc.dist /etc/authdaemonrc
cp/etc/authmysqlrc.dist /etc/authmysqlrc
修改/etc/authdaemonrc文件
authmodulelist="authmysql"
authmodulelistorig="authmysql"
daemons=10
编辑/etc/authmysqlrc为以下内容,其中2525,2525 为postfix用户的UID和GID。
MYSQL_SERVERlocalhost
MYSQL_PORT 3306 (指定你的mysql监听的端口,这里使用默认的3306)
MYSQL_USERNAME extmail (这时为后文要用的数据库的所有者的用户名)
MYSQL_PASSWORDextmail (密码)
MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_DATABASE extmail
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD '2525'
MYSQL_GID_FIELD '2525'
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD concat('/var/mailbox/',homedir)
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD concat('/var/mailbox/',maildir)
# cpcourier-authlib.sysvinit /etc/init.d/courier-authlib
# chmod 755/etc/init.d/courier-authlib
# chkconfig--add courier-authlib
# chkconfig--level 2345 courier-authlib on
#echo"/usr/local/courier-authlib/lib/courier-authlib" >>/etc/ld.so.conf.d/courier-authlib.conf
# ldconfig -v
# servicecourier-authlib start (启动服务)
新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户:
#mkdir -pv/var/mailbox
#chown �CRpostfix /var/mailbox
接下来重新配置SMTP 认证,编辑/usr/local/lib/sasl2/smtpd.conf ,确保其为以下内容:
1、编辑/etc/postfix/main.cf,添加如下内容:
########################VirtualMailbox Settings########################
virtual_mailbox_base= /var/mailbox
virtual_mailbox_maps= mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains= mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_domains=
virtual_alias_maps= mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_uid_maps= static:2525
virtual_gid_maps= static:2525
virtual_transport= virtual
maildrop_destination_recipient_limit= 1
maildrop_destination_concurrency_limit= 1
##########################QUOTASettings########################
message_size_limit= 14336000
virtual_mailbox_limit= 20971520
virtual_create_maildirsize= yes
virtual_mailbox_extended= yes
virtual_mailbox_limit_maps= mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override= yes
virtual_maildir_limit_message= Sorry, the user's maildir has overdrawn his diskspace quota, please Tidy yourmailbox and try again later.
virtual_overquota_bounce= yes
tar -zxvfextman-1.1.tar.gz -C /usr/local/src/
cd/usr/local/src/extman-1.1/docs/
[root@maildocs]# cp mysql_virtual_* /etc/postfix
[root@maildocs]# mysql -u root -p <extmail.sql
Enter password: 123
[root@maildocs]# mysql -u root -p <init.sql
3、授予用户extmail访问extmail数据库的权限
mysql> GRANT allprivileges on extmail.* TO extmail@localhost IDENTIFIED BY 'extmail';
mysql> GRANT allprivileges on extmail.* TO [email protected] IDENTIFIED BY 'extmail';
mysql>FLUSHPRIVILEGES; 让设置的内容生效
cp mysql_virtual_*/etc/postfix/
service postfix restart
说明:启用虚拟域以后,需要取消中心域,即注释掉myhostname,mydestination, mydomain, myorigin几个指令;当然,你也可以把mydestionation的值改为你自己需要的。
# vi/etc/dovecot.conf
mail_location =maildir:/var/mailbox/%d/%n/Maildir
……
auth default {
mechanisms =plain
passdb sql {
args =/etc/dovecot-mysql.conf
}
userdb sql {
args =/etc/dovecot-mysql.conf
}
……
把userdb的其他相关禁用
vim /etc/postfix/main.cf
#postfix的配置文件也要该
vim /etc/postfix/main.cf
home_mailbox =Maildir/
# vi /etc/dovecot-mysql.conf
driver = mysql
connect =host=localhost dbname=extmail user=extmail password=extmail (如mysql源码安装,host=/tmp/mysql.sock)
default_pass_scheme= CRYPT
password_query =SELECT username AS user,password AS password FROM mailbox WHERE username ='%u'
user_query = SELECTmaildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'
接下来启动dovecot服务:
# service dovecotstart
# chkconfig dovecoton
1.[root@mail ~]#mkdir -pv /var/www/extsuite
[root@mail ~]#tar -zxvf extmail-1.2.tar.gz -C /var/www/extsuite/
[root@mail ~]#tar -zxvf extman-1.1.tar.gz -C/var/www/extsuite/
[root@mail ~]#cd /var/www/extsuite/
[root@mailextsuite]# mv extmail-1.2/ extmail
[root@mailextsuite]# mv extman-1.1/ extman
[root@mailextmail]# cp /var/www/extsuite/extmail/webmail.cf.default /var/www/extsuite/extmail/webmail.cf
2、修改主配置文件
#vi/var/www/extsuite/extmail/webmail.cf
部分修改选项的说明:
SYS_MESSAGE_SIZE_LIMIT= 5242880
用户可以发送的最大邮件
SYS_USER_LANG =en_US
语言选项,可改作:
SYS_USER_LANG =zh_CN
SYS_MAILDIR_BASE= /home/domains
此处即为您在前文所设置的用户邮件的存放目录,可改作:
SYS_MAILDIR_BASE= /var/mailbox
SYS_MYSQL_USER =db_user
SYS_MYSQL_PASS =db_pass
以上两句句用来设置连接数据库服务器所使用用户名、密码和邮件服务器用到的数据库,这里修改为:
SYS_MYSQL_USER =extmail
SYS_MYSQL_PASS =extmail
SYS_MYSQL_HOST =localhost
指明数据库服务器主机名,这里默认即可
SYS_MYSQL_TABLE= mailbox
SYS_MYSQL_ATTR_USERNAME= username
SYS_MYSQL_ATTR_DOMAIN= domain
SYS_MYSQL_ATTR_PASSWD= password
以上用来指定验正用户登录里所用到的表,以及用户名、域名和用户密码分别对应的表中列的名称;这里默认即可
SYS_AUTHLIB_SOCKET= /var/spool/authdaemon/socket
此句用来指明authdaemo socket文件的位置,这里修改为:
SYS_AUTHLIB_SOCKET= /usr/local/courier-authlib/var/spool/authdaemon/socket
3、apache相关配置
由于extmail要进行本地邮件的投递操作,故必须将运行apache服务器用户的身份修改为您的邮件投递代理的用户;本例中打开了apache服务器的suexec功能,故使用以下方法来实现虚拟主机运行身份的指定。此例中的MDA为postfix自带,因此将指定为postfix用户:
<VirtualHost*:80>
ServerNamemail.test.com
DocumentRoot/var/www/extsuite/extmail/html/
ScriptAlias/extmail/cgi /var/www/extsuite/extmail/cgi
Alias /extmail/var/www/extsuite/extmail/html
SuexecUserGrouppostfix postfix
</VirtualHost>
修改 cgi执行文件属主为apache运行身份用户:
# chown -Rpostfix.postfix /var/www/extsuite/extmail/cgi/
如果您没有打开apache服务器的suexec功能,也可以使用以下方法解决:
# vi /etc/httpd/httpd.conf
User postfix
Group postfix
<VirtualHost*:80>
ServerNamemail.test.com
DocumentRoot/var/www/extsuite/extmail/html/
ScriptAlias/extmail/cgi /var/www/extsuite/extmail/cgi
Alias /extmail/var/www/extsuite/extmail/html
</VirtualHost>
4、依赖关系的解决
extmail将会用到perl的Unix::syslogd功能,您可以去http://search.cpan.org搜索下载原码包进行安装。
# tar zxvfUnix-Syslog-0.100.tar.gz
# cdUnix-Syslog-0.100
# perlMakefile.PL
# make
# make install
5、启动apache服务
# service httpdstart
# chkconfighttpd on
1、安装及基本配置
# tar zxvf extman-1.1.tar.gz
# mv extman-1.1/var/www/extsuite/extman
修改配置文件以符合本例的需要:
# cp/var/www/extsuite/extman/webman.cf.default /var/www/extsuite/extman/webman.cf
# vi/var/www/extsuite/extman/webman.cf
SYS_MAILDIR_BASE= /home/domains
此处即为您在前文所设置的用户邮件的存放目录,可改作:
SYS_MAILDIR_BASE= /var/mailbox
修改
SYS_CAPTCHA_ON =1
为
SYS_CAPTCHA_ON =0
修改cgi目录的属主:
# chown -Rpostfix.postfix /var/www/extsuite/extman/cgi/
在apache的主配置文件中Extmail的虚拟主机部分,添加如下两行:
ScriptAlias/extman/cgi /var/www/extsuite/extman/cgi
Alias /extman/var/www/extsuite/extman/html
创建其运行时所需的临时目录,并修改其相应的权限:
#mkdir -pv /tmp/extman
#chownpostfix.postfix /tmp/extman
好了,到此为止,重新启动apache服务器后,您的Webmail和Extman已经可以使用了,可以在浏览器中输入指定的虚拟主机的名称进行访问,如下:
http://192.168.30.99/extmail/cgi/
选择管理即可登入extman进行后台管理了。默认管理帐号为:[email protected] 密码为:extmail*123*
使用user5登陆
给自己写封信,
b.com上注册用户user6
user6给user5发信