extmail的实现

一.原理

extmail的核心部分是postfix,是一种web页面,可以创建账号,可以收发邮件。extman可以账号注册。账号存放在mysql里面。postfix发信件,dovecot收信件。利用outlook收信件(docecot)和发信件(postfix都要通过mysql查询。发信件(postfix)要提取mysql账号信息要通过courier-authlib。是基于虚拟帐号的邮件系统。

二.原理图

下图是extmail的原理图

wKioL1O6VV7zSeYGAAJYaRIF9qQ388.jpg


三.实现

3.1安装前准备工作

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. 启动httpdmysqld服务

[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

3.2安装postfix

1.把软件包传到/root目录下

  需要的软件包如下图所示

wKiom1O6VeCQ_3MIAADwsgKOCwg062.jpg


2.创建postfixpostdrop用户和组

[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了。

wKioL1O6Ve7RmBDmAAHR0coE18Y855.jpgwKiom1O6Vj7S9KRjAAHR0coE18Y053.jpgwKioL1O6ViDSYaBSAAHR0coE18Y232.jpg


[[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

看到的结果如下

wKioL1O6VkazuQBuAAEzdkVrXgs212.jpg


3.3 postfix 开启sasl验证功能

查询已经安装的和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

 

3.4安装courier-authlib

[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为以下内容,其中25252525 postfix用户的UIDGID

                            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 ,确保其为以下内容:

wKioL1O6Vo2CgDNQAACNYMDOdD0923.jpg

3.5postfix支持虚拟域和虚拟用户

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的值改为你自己需要的。

3.7配置dovecot

# 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

3.8安装extmail(先安装httpd

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

 

 

3apache相关配置

 

由于extmail要进行本地邮件的投递操作,故必须将运行apache服务器用户的身份修改为您的邮件投递代理的用户;本例中打开了apache服务器的suexec功能,故使用以下方法来实现虚拟主机运行身份的指定。此例中的MDApostfix自带,因此将指定为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将会用到perlUnix::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

3.9.安装extman-1.1

 

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服务器后,您的WebmailExtman已经可以使用了,可以在浏览器中输入指定的虚拟主机的名称进行访问,如下:

http://192.168.30.99/extmail/cgi/

             

选择管理即可登入extman进行后台管理了。默认管理帐号为:[email protected]  密码为:extmail*123*

3.10测试

wKiom1O6VyGj6wJZAAFxBhvgaZs629.jpg














wKioL1O6V1KR3WezAAGPvEM8W2s110.jpg


wKioL1O6V3LgYPaoAAEAaoJbmFo256.jpg



使用user5登陆

wKiom1O6V82yZ7dCAAGRk9Cz5mI954.jpgwKiom1O6V9ujvIQaAAGuQh4ldc4461.jpg


给自己写封信,

wKiom1O6V_2hAN8zAADBoF3fhkA546.jpg


b.com上注册用户user6

wKiom1O6WBqwjvxhAAC6KXoU2Ik714.jpg

user6user5发信

wKioL1O6WB3xmCs2AAEM1HLVsQc569.jpg

你可能感兴趣的:(邮件,ExtMail)