zoukankan      html  css  js  c++  java
  • Linux 邮件服务器 之跟我一步一步来实现一个邮件系统【转】

    转自:http://tchuairen.blog.51cto.com/3848118/1686875/

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://tchuairen.blog.51cto.com/3848118/1686875

    上一篇介绍了邮件服务器的各组件功能和原理,这次来由浅的入深来一步步实现一个邮件系统。

    实验环境:

    操作系统 CentOS release 5.11 64位
    postfix-2.11.6
    courier-authlib-0.64.0
    cyrus-sasl-2.1.22-7.el5_8.1
    cyrus-sasl-plain-2.1.22-7.el5_8.1
    dovecot.x86_64 0:1.0.7-8.el5_9.1
    extman-1.1
    extmail-1.2
    Unix-Syslog-1.1

    一、安装postfix,建立基本配置

    postfix安装过程(略)详细可见上一篇博文

    http://tchuairen.blog.51cto.com/3848118/1684872

    1、编辑配置文件" /etc/postfix/main.cf " 定义如下内容:

    1
    2
    3
    4
    5
    myhostname = mail.qupeiyin.net
    myorigin = $mydomain
    mydomain = qupeiyin.net
    mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain
    mynetworks = 127.0.0.0/8,mynetworks

    参数说明:

    myhostname 主机名,与host那么相同。
    myorigin 发件人地址域
    mydomain   所在域
    mydestination 目标收件地址
    mynetworks  可以被中继的客户端网段
    alias_map = hash:/etc/aliases 别名查找表

    2、安装dovecot实现邮件接收

    yum install dovecot -y

    编辑配置文件 /etc/dovecot/dovecot.conf 

    启用协议

    protocols = imap pop3

    启动dovecot服务

    /etc/init.d/dovecot start

    启动成功后会监听端口:imap4:143/tcp,pop3:110/tcp 以明文方式工作;

    3、postfix + SASL 用户认证

    saslauthd -v  显示当前主机saslauthd服务所支持的验证方式

    修改验证方式

    vim /etc/sysconfig/saslauthd

    wKioL1XW0dyhUPUwAAC5iR3uOhs552.jpg

    启动saslauthd服务

    /etc/init.d/saslauthd start

    设置开机启动

    chkconfig saslauthd on

    测试验证机制是否可用,出现OK表示正常;

    testsaslauthd -u username-p pass

    0: OK "Success."

    邮箱格式:

    mbox:一个文件存储所有邮件

    maildir:一个文件存储一封邮件,所有邮件存储在一个目录中;

    #home_mailbox = Mailbox  定义邮箱格式

    #home_mailbox = Maildir/

    #mail_spool_directory = /var/mail   定义maildir格式邮箱文件的保存路径

    4、让postfix支持sasl认证功能

    编辑配置文件 /etc/postfix/main.cf 添加如下内容:

    1
    2
    3
    4
    5
    6
    7
    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_sasl_path = smtpd
    smtpd_banner = Welcome to our Server !

    参数说明:

    broken_sasl_auth_clients  是否要通过SASL验证客户端身份
    smtpd_recipient_restrictions  定义收件人限制
    smtpd_sasl_auth_enable = yes 启用SASL认证功能
    smtpd_sasl_local_domain = $myhostname  基于SASL认证的时候指定本地的域
    smtpd_sasl_security_options SASL认证的安全选项,noanonymous表示不支持匿名用户
    smtpd_sasl_path = smtpd 指定使用SASL的服务器程序
    smtpd_banner  定义登陆时候的欢迎信息
     
     

    参数说明(二):

    permit_mynetworks 允许本地网络
    permit_sasl_authenticated 允许SASL验证通过的用户
    reject_invalid_hostname 拒绝不合法的主机名的主机来收发邮件
    reject_non_fqdn_hostname 拒绝不是fqdn格式主机名的主机
    reject_unknown_sender_domain 拒绝无法识别的发件人域
    reject_non_fqdn_sender 拒绝没有fqdn的发件人
    reject_non_fqdn_recipient 拒绝没有fqdn的收件人
    reject_unknown_recipient_domain 拒绝无法识别的收件人域
    reject_unauth_pipelining 无法验证的管道
    reject_unauth_destination 拒绝无法验证的目标地址

    编辑配置文件/usr/lib64/sasl2/smtpd.conf 添加如下内容:

    pwcheck_method:saslauthd

    mech_list:PLAIN LOGIN

    log_level:3

    当需要调试的时候,打开log_level可以输出更为详细的信息。

    5、实现postfix基于客户端的访问控制

    在配置文件"/etc/postfix/main.cf"使用如下参数控制:

    1
    2
    3
    4
    5
    smtpd_client_restrictions= 
    smtpd_data_restrictions= 
    smtpd_helo_restrictions=  
    smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination
    smtpd_sender_restrictions=

    参数说明:

    smtpd_client_restrictions 用于限定符合条件的才允许连接服务器
    smtpd_data_restrictions 用于限定符合条件的用户才允许发送data指令
    smtpd_helo_restrictions 用于限定符合条件的用户才允许发送helo指令
    smtpd_recipient_restrictions 用于限定符合条件的用户才允许发送rcpt to指令
    smtpd_sender_restrictions 用于限定符合条件的用户才允许发送mail from指令

    内置限制条件:(更多参考postfix手册)

    reject_unauth_destination-拒绝未经认证的目标

    permit_mynetworks-该网段的主机可以被中继

    编辑配置文件 /usr/lib64/sasl2/smtpd.conf 添加以下内容:

    pwcheck_method:saslauthd

    mech_list:PLAIN LOGIN

    访问控制文件

        /etc/postfix/access

        python@admin.com reject

        microsoft.com ok

    规则编写格式:

    pattern  action

    邮件地址的pattern格式如下:

    user@domain 用于匹配指定邮件地址
    domain.tld 用于匹配以此域名作为邮件地址中的域名部分的所有邮件地址
    user@ 用于匹配以此作为邮件地址中用户名部分的所有邮件地址

    主机名称/地址 pattern格式如下:

    ip    用于匹配特定的IP地址或网络内的所有主机

    network /mask  CIDR格式,匹配指定网络内的所有主机

    关于action

    ok 接受其pattern匹配的邮件地址或主机名称/地址

    拒绝部分:

    4NN text

    5NN text

        其中4NN类表示过一会重试,5NN类表示严重错误。

    REJECT optional text  拒绝;text为可选信息

    DEFER  optional text  拒绝;text为可选信息

    自定义访问表的条件通常使用check_client_access,check_helo_access,check_sender_access,check_recipient_access 进行,他们后面通常跟上type:mapname格式的访问类型和名称。其中,check_sender_access,check_recipient_access 用来检查客户端提供的邮件地址,其访问表中可以使用完整的邮件地址,如admin@tuchao.com;也可以只使用域名,如果tuchao.com,还可以只有用户名的部分,如hadoop@。

    实例演示(一):

    拒绝ip:115.204.89.87  windows 客户端发送邮件

    1、编辑 /etc/postfix/access 作为客户端检查控制文件,添加如下一行:

    115.204.89.87 REJECT

    2、将此文件转换为hash格式

    postmap  /etc/postfix/access

    wKiom1XW146AjWNGAACrfxHNbIQ692.jpg

    3、配置postfix使用此文件对客户端进行检查

    编辑配置文件 vim /etc/postfix/main.cf 加入一行:

    smtpd_client_restrictions = check_client_access hash:/etc/postfix/access

    注:这里的hash类型就代表了.db的文件,所以这里不要写后缀。

     

    4、让postfix重新载入配置文件

    /etc/init.d/postfix reload

    现在使用windows上的客户端发邮件,就会看到被拒绝了;

    wKioL1XW2gvBlVDlAAD_peWG3l8581.jpg

    实例演示(二):

    拒绝所在域为 huairen.com 的发件人发送邮件。

    1、编辑 /etc/postfix/access 作为客户端检查控制文件,添加如下一行:

    huairen.com REJECT

     

    2、将此文件转换为hash格式

    postmap  /etc/postfix/access

     

    3、配置postfix使用此文件对客户端进行检查

    编辑配置文件 vim /etc/postfix/main.cf 加入一行:

    smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/access

     

    4、让postfix重新载入配置文件

    /etc/init.d/postfix reload

    修改客户端的发件人地址,我这里使用的Outlook。 文件—账户设置—找到自己的邮箱地址—更改;

    wKiom1XW2caxnmybAACGobaeYLk257.jpg

    然后尝试发一封邮件出去

    wKioL1XW2-TCArFGAAEPircNzhQ948.jpg

    可以明显看到拒绝信息,Sender address rejected:Access denied

    实例演示(三):

    拒绝所有邮件头部用户名为tuchao的地址发邮件

    1、添加一个访问控制文件 /etc/postfix/mailhostdeny 作为客户端检查控制文件,添加如下一行:

    tuchao@ REJECT

     

    2、将此文件转换为hash格式

    postmap  /etc/postfix/mailhostdeny 

     

    3、配置postfix使用此文件对客户端进行检查

    编辑配置文件 vim /etc/postfix/main.cf 加入一行:

    smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/mailhostdeny,permit_mynetworks,reject_unauth_destination

    注:在smtpd_recipient_restrictions配置中,必须要有两个内置参数permit_mynetworks,reject_unauth_destination,如果需要加入其他参数,这两个内置参数放到最后。

     

    4、让postfix重新载入配置文件

    /etc/init.d/postfix reload

    尝试给tuchao@qupeiyin.net发送邮件

    wKiom1XW2k6QnJWzAADmcX2X-94712.jpg

    可以看到收件人不符合要求被拒绝了

    邮件别名的使用

    编辑别名配置文件 /etc/aliases 加入如下两行:

    a:    python 

    tuchao:  1183710107@qq.com

    newaliases  执行此命令用于生成别名文件的hash格式,便于查找,每次修改过aliases文件都要执行。

    说明:a:表示把所有发给本地a用户的邮件,全部转发给本地的python用户,这里a用户不存在也没关系服务器能识别到别名就可以了。  把所有发给本地tuchao用户的邮件。全部转发至1183710107@qq.com。

     

    给a用户发送邮件测试

    wKiom1XW2tDg7Q2_AACNZkgBllg945.jpg

    给tuchao用户发邮件

    wKiom1XW2uSRvLwfAAF7xWxS5S4458.jpg

    过程中遇到的错误记录

    错误一、-ERR Plaintext authentication disallowed on non-secure (SSL/TLS) connections.

    RHEL5的dovecot都是不需要做任何修改,默认就可以使用的。
    RHEL6对dovecot做了比较严格的默认配置,如果使用默认配置,客户端出现错:

    -ERR Plaintext authentication disallowed on non-secure (SSL/TLS) connections.

    需要修改dovecot主配置文件/etc/dovecot/dovecot.conf:
    protocols = imap pop3 lmtp
    login_trusted_networks = 0.0.0.0/0

    设置/etc/dovecot/conf.d/10-mail.conf配置文件如下:
    mail_location = mbox:~/mail:INBOX=/var/mail/%u

    设置完mail_location值后,需要重启dovecot服务,同时需要创建相关的目录,否则还会出现如下错误:

    freebsd# telnet 192.168.50.24 110
    Trying 192.168.50.24...
    Connected to 192.168.50.24.
    Escape character is '^]'.
    +OK Dovecot ready. <2781.1.4d106bc3.JFuUEG+bO68ixpY2W1zihg==@rhel6.766.com>
    user oracle
    +OK
    pass oracle
    -ERR [IN-USE] Couldn't open INBOX: Internal error occurred. Refer to server log for more information. [2010-12-21 16:56:40]
    Connection closed by foreign host.

    [root@rhel6 ~]# tail -f /var/log/maillog
    Dec 21 16:56:40 rhel6 dovecot: pop3-login: Login: user=<oracle>, method=PLAIN, rip=192.168.50.211, lip=192.168.50.24, mpid=10115, secured
    Dec 21 16:56:41 rhel6 dovecot: pop3(oracle): Error: chown(/u01/oracle/mail/.imap/INBOX, -1, 12(mail)) failed: Operation not permitted (egid=501(dba), group based on

    /var/mail/oracle)
    Dec 21 16:56:41 rhel6 dovecot: pop3(oracle): Error: mkdir(/u01/oracle/mail/.imap/INBOX) failed: Operation not permitted
    Dec 21 16:56:41 rhel6 dovecot: pop3(oracle): Error: Couldn't open INBOX: Internal error occurred. Refer to server log for more information. [2010-12-21 16:56:40]
    Dec 21 16:56:41 rhel6 dovecot: pop3(oracle): Couldn't open INBOX top=0/0, retr=0/0, del=0/0, size=0

    在该用户家目录下创建相应的目录:

    su - tuchao

    mkdir -p mail/.imap/INBOX

    错误二、Temporary lookup failure

    通过查看日志发现是没有aliase文件导致的,所以果断的添加的这么个文件,然后postmap一下就可以了。

    postmap /etc/aliases

    二、构建基于虚拟用户的虚拟域邮件系统架构

    wKioL1XbIXGhkBo0AAM0oVnsDBk639.jpg

    1、编译安装courier-authlib

    官网:http://www.courier-mta.org/download.html#authlib

    安装依赖的程序包,如果使用MySQL认证的话,需要安装MySQL。

    yum install libtool openssl-devel tcl tcl-devel libart-lgpl libart-lgpl-devel expect libtool-ltdl libtool-ltdl-devel -y

    编译参数

     ./configure 
    --prefix=/usr/local/courier-authlib 
    --sysconfdir=/etc 
    --without-authpam 
    --without-authvchkpw 
    --without-authpgsql 
    --with-authmysql 
    --with-mysql-libs=/alidata/server/mysql/lib/ 
    --with-mysql-includes=/alidata/server/mysql/include/ 
    --with-redhat 
    --with-authmysqlrc=/etc/authmysqlrc 
    --with-authdaemonrc=/etc/authdaemonrc 
    --with-mailuser=postfix 
    --with-mailgroup=postfix 
    --with-ltdl-lib=/usr/lib 
    --with-ltdl-include=/usr/include/ 

    LDFLAGS="-L/usr/lib64 -L/lib64"

     

    --sysconfdir 配置文件的安装目录

    --without-authpam 不支持pam认证

    --with-redhat 实现基于redhat系统的优化,如果不是redhat系统不用加此参数;

    --with-authmysqlrc 存放courier-authlib给mysql的配置文件路径

    --with-authdaemonrc 存放该服务的配置文件路径

    make && make install 

    可以使用 --with-authdaemonvar=/var/spool/authdaemon 选项来指定进程套接字目录路径

    编译过程中遇到的错误:

    1、在./configure的时候出现错误 configure: error: invalid ltdl library directory: `/usr/lib64/'

    笔者在centos6.5 64位的系统上试了多次,也确保安装了libtool-ltdl libtool-ltdl-devel,依旧不行。

    思路:当什么依赖的库和程序都安装了后,还是提示找不到,这时候就要考虑依赖的库与程序的版本不对应。

    怀疑是courier-authlib 版本太新和系统库不匹配,于是将courier-authlib0.66.3 降低版本到 0.66.1 , 0.65.0,0.64.0

    这时候应该不是软件版本问题,怀疑系统版本的库与该程序不兼容。

    尝试将centos6替换为centos5.11 X86_64 ,编译courier-authlib0.64.0 没有再出现此错误。

     

    2、编译出现错误 configure:error The Courier Unicode Library 1.2 appears not to be installed 

    提示Courier Unicode Library 没有安装,需要下载courier-unicode-1.2.tar.bz2 安装即可。

    ./configure

    make && make install

     

    3、./configure 出现错误 configure: error: –with-authmysql specified but no mysqlclient.so

    是因为本机上有两个MySQL,卸载原来的MySQL就可以了。

     

    4、编译出现错误 libltdl.so: could not read symbols: File in wrong format

    是由于64位机器的原因,解决办法在configure的选项中加上  LDFLAGS="-L/usr/lib64 -L/lib64"

    参考文档:http://wuliangxx.iteye.com/blog/656856

    配置courier-authlib

    建立配置文件,和configure  参数定义的名称一致

    --with-authmysqlrc=/etc/authmysqlrc 

    --with-authdaemonrc=/etc/authdaemonrc 
    cp /etc/authdaemonrc.dist  /etc/authdaemonrc

    cp /etc/authmysqlrc.dist /etc/authmysqlrc

    编辑配置文件"/etc/authdaemonrc"  修改以下参数:

    authmodulelist="authmysql"

    authmodulelistorig="auauthmysql"

    daemons=10

    authdaemonvar=/usr/local/courier-authlib/var/spool/authdaemon

    DEBUG_LOGIN=0

    参数说明:

    authmodulelist  指定支持认证的模块列表

    authmodulelistorig  指定源模块列表

    daemons 开启的进程数,根据负载合理设置。

    authdaemonvar 指定进程套接字目录路径

    DEBUG_LOGIN 是否启动DEBUG模式记录日志,0表示不启用,2表示启用。

    编辑配置文件 /etc/authmysqlrc 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    MYSQL_SERVER           localhost
    MYSQL_USERNAME         root
    MYSQL_PASSWORD         redhat
    MYSQL_SOCKET          /tmp/mysql.sock  连接MySQL的套接字文件
    MYSQL_DATABASE         extmail  指定数据库名
    MYSQL_USER_TABLE       mailbox  指定用户表
    MYSQL_CRYPT_PWFIELD    password  指定保存密码的表字段名
    MYSQL_UID_FIELD        2525  指定postfix的Uid
    MYSQL_GID_FIELD        2525  指定postfix的Gid
    MYSQL_LOGIN_FIELD      username  指定保存用户名的表字段名
    MYSQL_HOME_FIELD       concat('/var/mailbox',homedir)  指定用户的邮筒位置
    MYSQL_NAME_FIELD       name  指定用户的全名保存在哪个字段上
    MYSQL_MAILDIR_FIELD    concat('/var/mailbox/',maildir)  创建和用户同名的邮件目录

    提供服务启动脚本

    cp courier-authlib-0.64.0/courier-authlib.sysvinit /etc/init.d/courier-authlib

    chmod +x /etc/init.d/courier-authlib

    chkconfig --add courier-authlib

    chkconfig courier-authlib on

    启动服务

    service courier-authlib start

    2、配置postfix支持虚拟域和虚拟用户

    1、编辑配置文件 /etc/postfix/main.cf 添加以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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_uid_maps = static:2525
    virtual_gid_maps = static:2525
    virtual_transport = virtual
    mydestination =
    local_recipient_maps =

    virtual_transport  指定用户的投递代理

    maiildrop_destination_recipient_limit  = 1  定义限制,一次只投递一封邮件到一个用户邮箱。

    maildrop_destination_concurrency_limit  =1 一次并发只投递一封邮件

    配额限制

    message_size_limit = 14336000

    virtual_mailbox_limit = 20971520

    message_size_limit  定义单个邮件的最大大小

    virtual_mailbox_limit  每个用户的邮箱最大可用空间

     

    配置postfix和courier-authlib

    新建虚拟用户邮箱所在的目录,并将权限赋予postfix用户。

    mkdir  /var/mailbox

    chown -R postfix /var/mailbox

    修改配置文件 /usr/lib/sasl2/smtpd.conf  没有则建立,加入以下内容:

    pwcheck_method:authdaemond

    log_level:3

    mech_list:PLAIN LOGIN

    authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket

    authdaemond_path 此参数指定的路径,是和/etc/authdaemonrc文件中authdaemonvar参数定义的路径相对应。

    下载extman源码,使用其doc目录下的extmail.sql和init.sql建立数据库:

    tar xf extman-1.1.tar.gz

    cd extman-1.1/docs

    mysql <extmail.sql

    mysql <init.sql

    复制需要的配置文件

    cp mysql* /etc/postfix/

    并且将复制过去的5个配置文件,根据实际mysql的帐号配置做相应的修改。

    对于MySQL5.1以后的版本,需要将脚本extmail.sql使用如下命令进行语法修改:

    sed -i 's/TYPE=MyISAM/ENGINE=InnoDB/g' extmail.sql 

    如果还出现错误 BLOB/TEXT column 'question' can't have a default value 则进入脚本修改SQL语句,将text字段的default参数删除即可。

     

    授权用户extmail访问extmail数据库的权限

    GRANT ALL PRIVILEGES ON extmail.* TO 'extmail'@'localhost' IDENTIFIED BY 'extmail123';

    GRANT ALL PRIVILEGES ON extmail.* TO 'extmail'@'127.0.0.1' IDENTIFIED BY 'extmail123';

    启用虚拟域以后,需要取消中心域,即注释掉配置文件“/etc/postfix/main.cf”的几个参数:myhostname,myorigin,mydomain,mydestination; 也可以把mydestination 改成自己需要的;

    重启postfix

    service postfix restart

    这是会发现无法给之前配置的域收发邮件了,因为之前的参数我们已经注释了。 这时域的配置保存在exmail库中的domain表中。

    配置dovecot

    vim /etc/dovecot.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    auth default {
        mechanisms = plain
        passdb sql {
            args = /etc/dovecot-mysql.conf
    userdb sql {
        args = /etc/dovecot-mysql.conf

    wKiom1XbOmGTjxU_AAClMWIrQY0163.jpg

    参数说明:

    mail_location = maildir:/var/mailbox/%d/%n/Maildir

    这两个为dovecot支持的两个弘:

    %d  表示域名

    %n  表示用户名

    建立配置文件:vim /etc/dovecot-mysql.conf 

    1
    2
    3
    4
    5
    6
    mail_location = maildir:/var/mailbox/%d/%n/Maildir
    driver = mysql
    connect = host=localhost dbname=extmail user=extmail password=extmail123
    default_pass_scheme = CRYPT
    password_query = SELECT username AS user,password AS password FROM mailbox WHERE username = '%u'
    user_query = SELECT maildir,uidnumber AS uid,gidnumber AS gid FROM mailbox WHERE username = '%u'

    注:如果mysql服务器是本地主机,如果mysql.sock文件路径不是默认的/var/lib/mysql/mysql.sock,可以使用host="socket" 来指定新位置:

    connect = host=/tmp/mysql.sock dbname=extmail user=extmail password=extmail123 

    重启dovecot服务

    service dovecot restart

    安装Extmail-1.2

    tar zxvf extmail-1.2.tar.gz 

    cd extmail-1.2

    mkdir -pv /var/www/extsuite

    mv extmail-1.2 /var/www/extsuite/extmail

    cp /var/www/extsuite/extmail/webmail.cf.default  /var/www/extsuite/extmail/webmail.cf

    修改主配置文件 /var/www/extsuit/extmail/webmail.cf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SYS_CONFIG = /var/www/extsuite/extmail/
    SYS_LANGDIR = /var/www/extsuite/extmail/lang
    SYS_TEMPLDIR = /var/www/extsuite/extmail/html
    SYS_HTTP_CACHE = 0
    SYS_SMTP_HOST = 127.0.0.1
    SYS_SMTP_PORT = 25
    SYS_SMTP_TIMEOUT = 5
    SYS_SPAM_REPORT_ON = 0
    SYS_USER_LANG = zh_CN
    SYS_MAILDIR_BASE = /var/mailbox
    SYS_MYSQL_USER = extmail
    SYS_MYSQL_PASS = extmail123
    SYS_MYSQL_DB = extmail
    SYS_MYSQL_HOST = localhost
    SYS_MYSQL_SOCKET = /tmp/mysql.sock
    SYS_MYSQL_TABLE = mailbox
    SYS_MYSQL_ATTR_USERNAME = username
    SYS_MYSQL_ATTR_DOMAIN = domain
    SYS_MYSQL_ATTR_PASSWD = password
    SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket

    SYS_CONFIG 指定程序目录

    SYS_LANGDIR 指定语言字符集的目录

    SYS_TEMPLDIR 指定临时文件的目录

    SYS_HTTP_CACHE http是否要缓存

    SYS_SMTP_HOST 指定smtp服务器

    SYS_SMTP_PORT smtp服务端口号

    SYS_SMTP_TIMEOUT 指定超时时间

    SYS_SPAM_REPORT_ON 发现垃圾邮件是否报告

    SYS_USER_LANG 指定语言支持

    SYS_MAILDIR_BASE 指定用户的邮筒文件夹

    SYS_MYSQL_TABLE 指定在mysql中对应的表

    SYS_MYSQL_ATTR_USERNAME 用户名对应的字段属性

    SYS_MYSQL_ATTR_DOMAIN 域对应的字段属性

    SYS_MYSQL_ATTR_PASSWD 用户密码对应的字段属性

    SYS_AUTHLIB_SOCKET 指定courier-authlib socket文件位置

    配置httpd

    由于extmail要进行本地邮件的投递操作,故必须将运行httpd服务器用户的身份修改为你的邮件投递代理的用户,如果打开apache的suexec功能,可以实现虚拟主机运行身份的指定。 此例中的MDA为postfix自带,所以指定为postfix用户。

    1
    2
    3
    4
    5
    6
    7
    <VirtualHost *:8081>
        ServerName mail.qupeiyin.net
        DocumentRoot /var/www/extsuite/extmail/html/
        ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
        Alias /extmail /var/www/extsuite/extmail/html/
        CustomLog logs/mail.qupeiyin.net.log common
    </VirtualHost>

    如果不打开apache的suexec功能,也可以让整个apache用postfix用户跑

    User postfix

    Group postfix

     

    修改cgi执行文件属主为apache服务运行的身份用户

    chown -R postfix.postfix /var/www/extsuite/extmail/cgi/

     

    安装Unix-Syslog解决依赖关系

    可以去http://search.cpan.org/搜索下载源码包

    tar xf Unix-Syslog-1.1.tar.gz

    cd Unix-Syslog-1.1

    perl Makefile.PL

    make && make install

     

    配置extman

    tar xf 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

     

    编辑配置文件 /var/www/extsuite/extman/webman.cf

    SYS_MAILDIR_BASE = /var/mailbox

    SYS_SESS_DIR = /tmp/extman/

    SYS_CAPTCHA_ON = 0

    SYS_DEFAULT_UID = 2525

    SYS_DEFAULT_GID = 2525

    SYS_MYSQL_USER = root

    SYS_MYSQL_PASS = redhat

    SYS_MYSQL_DB = extmail

    SYS_MYSQL_HOST = localhost

    SYS_MYSQL_SOCKET = /var/lib/mysql/mysql.sock

    创建用于保存session的目录

    mkdir /tmp/extman

    chown postfix /tmp/extman/

    修改cgi目录属主

    chown -R postfix.postfix /var/www/extsuite/extman/cgi/

    在httpd主配置文件中Extmail的虚拟主机部分,添加如下两行:

        ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi
        Alias /extman /var/www/extsuite/extman/html

    重启httpd服务器

    service httpd restart

    功能测试:

    现在来访问我们的extmail

    wKiom1XbRxeD3VejAAKegFrRfbM739.jpg

    选择登陆邮箱管理,空密码帐号,直接点登陆跳到下一个界面:

    wKioL1XbSYeyJ_weAAFTbQSkGns486.jpg

    初始密码为:extmail*123*

    登陆之后可进入邮箱控制台

    wKioL1XbShvyB-PFAAEPcP-h5Jc895.jpg

    现在登陆一个用户来发送邮件

    wKiom1XbSFfz-eNcAAGopL30lEo404.jpg

    点击发送后,QQ邮箱立马就收到了。

    wKiom1XbSNziCIxFAACUB0xk0AI661.jpg

    一套邮件系统就基本实现了,这里还没加上反垃圾邮件功能和SSL加密功能。

    这些功能可参考:

    extmail官网:http://www.extmail.org/

    本文出自 “突破舒适区” 博客,请务必保留此出处http://tchuairen.blog.51cto.com/3848118/1686875

  • 相关阅读:
    laravel 解决保存Emoji 表情问题
    下载微信头像下载不了
    微信公众号开发遇到simplexml_load_string 未定义
    部署php的正确姿势
    ubuntu 安装 mysql 的正确姿势
    laravel 部署 前后端分离
    nwjs 解决手指可滑动问题
    Java8新特性Optional、接口中的默认方法与静态方法
    Java设计模式百例
    一位资深程序员大牛给予Java初学者的学习路线建议
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/7127658.html
Copyright © 2011-2022 走看看