邮件服务器搭建安装部署文档

邮件协议简述

SMTP

SMTP全称是Simple Mail Transfer Protocol,直译过来就是简单邮件传输协议, 由RFC5321定义.主要的工作就是把邮件信息从发件人的邮件服务器中传送到接收人的邮件服务器中,偶尔我们使用MUA来发送邮件的话,也承载传输用户邮件到发件服务器的功能, 因而也称作协议,顺带提一下,SMTP协议的出现是比HTTP还早的,最早在1982年中发布第一版的RFC.
因而因为提出的年代久远,所以在当时有许多问题都考虑不全面并且也有这许多的限制,例如SMTP要求信息内容需要是7位的ASCII来承载,因而我们在发送以及接受的时候,都需要将其编码解码.
另外,SMTP还存在一个问题就是没有对发送方进行一个身份验证,虽然在早期的互联网环境没有很大问题,但是在垃圾邮件满天飞的今天,这却是一个明显的短板.因而衍生出了SPFDKIMDMARC等一系列用来验证发件人身份的方法.

POP3

POP3,Post Office Protocol Version 3,直译就是邮局协议第三版,由RFC1939进行定义.这个协议的主要服务于用户管理邮件服务器上面的电子邮件.具体过程是:当外来邮件发送到收件人的邮件服务器上时,收件人可以使用邮件客户端连接邮件服务器,把未阅读的邮件服务器以及部分信息拉取回本地进行处理.在拉取的过程中,我们可以选择拉取完删除以及拉取完不删除两种方式,不过现在默认一般都是拉取完不删除,方便我们在其他的地方也能对邮件进行阅读以及管理.

IMAP

IMAP, Internet Message Access Protocol, 直译过来就是网络信息访问协议,可能和现在主流的翻译不太一致,不过能理解其意思就好.相对于pop3协议所有邮件的管理都需要下载下来进而管理,IMAP提供了用户远程访问邮件服务器的途径,因而通过IMAP,用户可以直接管理邮件服务器上的邮件.

概念解释

SPF

Sender Policy Framework,直译过来就是发件人保证框架.出现的主要原因是SMTP协议的缺陷.XMTP中,发件人的邮箱地址是可以伪造的,因而SPF的出现就是防止伪造发件人.SPF的记录实际上就是DNS服务器上面的一个记录.如果邮件服务器收到了一封邮件,来自主机的IP是45.76.210.63并且生成发件人为yusengy@info.邮件服务器会去查询yusengy@info的SPF记录.如果SPF记录的IP为45.76.210.63,那么就认为是合法的,否则通常都会被退信.

DKIM

DomainKeys Identified Mail.功能目的与SPF相似,主要是让收件人可以通过加密解密的方式来得知发件人是否是真实的.原理就是在电子邮件的开头插入一段签名,然后接收方通过从DNS查询得到公钥以后,以进行验证,与SSH的公钥和密钥类似.

PTR

反向域名解析,可以通过发件人的IP地址反向得知域名,也是一种用以判断发件人是否正常的方式.

MUA

Mail User Agent.用户邮件代理,用户通过MUA接收发送邮件.例如Outlook, formail等.

MTA

Mail Transfer Protocol.邮件传输代理,是SMTP的一种实现.常用的MTA有sendmail,Postfix.本例中使用Postfix.MTA仅仅负责邮件的传输,MDA负责把接收到的邮件保存在硬盘中.

MDA

Mail Deliver Agent,邮件分发代理.负责将接收到的邮件保存在邮件服务器上.sendmail以及Postfix默认使用的MDA是procmail.

MRA

Mail Receive Agent,邮件接收代理,用来实现IMAP,POP3协议,负责与MUA交互,将服务器上的邮件通过IMAP以及POP3传输给客户端.本例中使用的MRA是Dovecot.

LMTP

Local Mail Transfer Protocol.本地邮件传输协议,是SMTP协议的扩展.本例中用与同一主机内邮件传输.

Postfix

一个开源的MTA服务器,负责通过SMTP协议管理发送到本机的邮件以及由本机向外发送的邮件.与sendMail相似.现今流行的服务器套件例如Zimbra,IRedMail内部都采用Postfix作为MTA.

Dovecot

一个开源的IMAP以及POP3服务器.通常工作是验证用户身份以及邮件的处理.

MySQL

存取用户信息,监听的域名信息,用户邮箱地址以及登录密码等.

postfix:实现SMTP协议,用于发件
dovecot:实现POP3和IMAP协议,用于收件
Cyrus-SASL函数库:用于用户认证
courier-authlib:使用MySQL数据库中的表进行身份验证
extmail和extman:提供webmail

工作原理

电子邮件架构

邮件原理

这里我们使用的MTA是Postfix, MRA是Dovecot.我们可以绘制出邮件服务器接受邮件,用户查收邮件以及用户发送邮件的过程.

邮件服务器接受收件

假设yusen@Foxmail.com发送一封邮件到yusen@yusengy.info中.

邮件服务器接受邮件

foxmail.com服务器会通过DNS查询到yusengy.info的MX记录,然后找到Postfix所在的服务器所在.

邮件通过SMTP协议发送给Postfix.

Postfix通过MySQL查询,yusengy.info是否是本机需要处理的域名.

MySQL通过查询返回确认信息给Postfix.

Postfix得到确认信息,把邮件传送给Dovecot,由Dovecot的LMTP服务来说投递工作.

Dovecot把邮件的内容保存在对应的路径中.

用户查收邮件过程

 

用户查收邮件过程

MUA向Dovecot请求IMAP连接.

Dovecot发送自己的SSL证书.

MUA发送用户的账号密码.

Dovecot得到账号密码向MySQL查询.

MySQL返回查询结果.

如果账号密码正确,Dovecot读取在改用户路径下的信息.

得到最新的邮件以及其他的一些统计信息.

通过IMAP协议发送给MUA.

用户发送邮件的过程

 

用户发送邮件过程

MUA请求Postfix建立SMTP连接

Postfix发送SSL证书给MUA

MUA发送账号密码给Postfix,请求验证

Postfix请求Dovecot验证账号密码.

Dovecot请求MySQL查询结果

MySQL返回查询结果.

Dovecot返回Postfix账号密码验证结果.

Postfix返回MUA账号密码验证结果.

MUA使用SMTP协议发送邮件到Postfix.

Postfix把邮件进行发送.接下来的步骤参考前面服务器查收邮件的过程.

结构

 

主机名:mail.insigmail.com

域名:insigmail.com

1.准备工作

关闭selinux

[root@localhost ~]# setenforce 0

[root@localhost ~]# getenforce

Permissive

[root@localhost ~]#

关闭firewalld

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# iptables -F

[root@localhost ~]# iptables -X

[root@localhost ~]# iptables -nvL

2.安装postfix

安装wget、mysql、epel

yum install -y wget

wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

rpm -ivh mysql-community-release-el7-5.noarch.rpm

wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

rpm -ivh epel-release-latest-7.noarch.rpm

yum install nginx vim gcc gcc-c++ openssl openssl-devel db4-devel ntpdate mysql mysql-devel mysql-server bzip2 php-mysql cyrus-sasl-md5 perl-GD perl-DBD-MySQL perl-GD perl-CPAN perl-CGI perl-CGI-Session cyrus-sasl-lib cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel libtool-ltdl-devel telnet mail libicu-devel  -y

1.卸载系统自带的postfix,并删除postfix用户,重新指定uit gid创建新用户postfix,postdrop

yum remove postfix -y

userdel postfix

groupdel postdrop

groupadd -g 2525 postfix

useradd -g postfix -u 2525 -s /sbin/nologin -M postfix

groupadd -g 2526 postdrop

useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop

2.下载源码包并解压编译

cd /usr/local/src/ 

wget http://cdn.postfix.johnriley.me/mirrors/postfix-release/official/postfix-3.2.5.tar.gz

tar -zxvf postfix-3.2.5.tar.gz

cd postfix-3.2.5.tar.gz 

make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl -DUSE_TLS ' 'AUXLIBS=-L/usr/lib64/mysql -lmysqlclient -lz -lrt -lm -L/usr/lib64/sasl2 -lsasl2 -lssl -lcrypto' 

make && make install 

更改第二项临时文件目录为:/tmp/extmail,其他一路回车

3.更改目录的属主和属组:

chown -R postfix:postdrop /var/spool/postfix

chown -R postfix:postdrop /var/lib/postfix/

chown root /var/spool/postfix

chown -R root /var/spool/postfix/pid

4.修改postfix的配置文件:

[root@localhost ~]# vim /etc/postfix/main.cf

myhostname = mail.bk.sh        //设置主机名

mydomain = bk.sh        //指定域名

myorigin = $mydomain        //指明发件人所在的域名

inet_interfaces =    all    //指定postfix系统监听的网络接口

mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain        //指定postfix接收邮件时收件人的域名 [使用虚拟域需要禁用]

mynetworks_style = host        //指定信任网段类型

mynetworks = 192.168.77.1/24, 127.0.0.0/8        //指定信任的客户端

relay_domains = $mydestination        //指定允许中转邮件的域名

alias_maps = hash:/etc/aliases        //设置邮件的别名

5.在/etc/init.d/目录下创建脚本,控制postfix

[root@localhost /var/www/extsuite/extman]# vim /etc/init.d/postfix

#!/bin/bash

#

# postfix      Postfix Mail Transfer Agent

#

# chkconfig: 2345 80 30

# description: Postfix is a Mail Transport Agent, which is the program \

#              that moves mail from one machine to another.

# processname: master

# pidfile: /var/spool/postfix/pid/master.pid

# config: /etc/postfix/main.cf

# config: /etc/postfix/master.cf

 ​​

# Source function library.

. /etc/rc.d/init.d/functions

 ​​​​​

# Source networking configuration.

. /etc/sysconfig/network

 ​​​​​​​

# Check that networking is up.​​​​​​​

[ $NETWORKING = "no" ] && exit 3​​​​​​​

 ​​​​​​

[ -x /usr/sbin/postfix ] || exit 4​​​​​​​

[ -d /etc/postfix ] || exit 5​​​​​​​

[ -d /var/spool/postfix ] || exit 6​​​​​​​

 ​​​​​​​

RETVAL=0​​​​​​​

prog="postfix"​​​​​​​

 ​​​​​​​

start() {​​​​​​​

     # Start daemons.​​​​​​​

     echo -n $"Starting postfix: "​​​​​​​

        /usr/bin/newaliases >/dev/null 2>&1​​​​​​​

     /usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $"$prog start"​​​​​​​

     RETVAL=$?​​​​​​​

     [ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfix​​​​​​​

        echo​​​​​​​

     return $RETVAL​​​​​​​

}​​​​​​​

 ​​​​​​​

stop() {​​​​​​​

  # Stop daemons.​​​​​​​

     echo -n $"Shutting down postfix: "​​​​​​​

     /usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure $"$prog stop"​​​​​​​

     RETVAL=$?​​​​​​​

     [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfix​​​​​​​

     echo​​​​​​​

     return $RETVAL​​​​​​​

}​​​​​​​

 ​​​​​​​

reload() {​​​​​​​

     echo -n $"Reloading postfix: "​​​​​​​

     /usr/sbin/postfix reload 2>/dev/null 1>&2 && success || failure $"$prog reload"​​​​​​​

     RETVAL=$?​​​​​​​

     echo​​​​​​​

     return $RETVAL​​​​​​​

}​​​​​​​

 ​​​​​​

abort() {​​​​​​​

     /usr/sbin/postfix abort 2>/dev/null 1>&2 && success || failure $"$prog abort"​​​​​​​

     return $?​​​​​​​

}​​​​​​​

 ​​​​​​​

flush() {​​​​​​​

     /usr/sbin/postfix flush 2>/dev/null 1>&2 && success || failure $"$prog flush"​​​​​​​

     return $?​​​​​​​

}​​​​​​​

 ​​​​​​​

check() {​​​​​​​

     /usr/sbin/postfix check 2>/dev/null 1>&2 && success || failure $"$prog check"​​​​​​​

     return $?​​​​​​​

}​​​​​​​

 ​​​​​​​

restart() {​​​​​​​

     stop​​​​​​​

     start​​​​​​​

}​​​​​​​

 ​​​​​​​

# See how we were called.​​​​​​​

case "$1" in​​​​​​​

  start)​​​​​​​

     start​​​​​​​

     ;;​​​​​​​

  stop)​​​​​​​

     stop​​​​​​​

     ;;​​​​​​​

  restart)​​​​​​​

     stop​​​​​​​

     start​​​​​​​

     ;;​​​​​​​

  reload)​​​​​​​

     reload​​​​​​​

     ;;​​​​​​​

  abort)​​​​​​​

     abort​​​​​​​

     ;;​​​​​​​

  flush)​​​​​​​

     flush​​​​​​​

     ;;​​​​​​​

  check)​​​​​​​

     check​​​​​​​

     ;;​​​​​​​

  status)​​​​​​​

       status master​​​​​​​

     ;;​​​​​​​

  condrestart)​​​​​​​

     [ -f /var/lock/subsys/postfix ] && restart || :​​​​​​​

     ;;​​​​​​​

  *)​​​​​​​

     echo $"Usage: $0 {start|stop|restart|reload|abort|flush|check|status|condrestart}"​​​​​​​

     exit 1​​​​​​​

esac​​​​​​​

 ​​​​​​​​​​​​​​

exit $?

6.为脚本添加权限并添加到开机启动项中

[root@localhost /var/www/extsuite/extman]# chmod +x /etc/init.d/postfix​​​​​​​

[root@localhost /var/www/extsuite/extman]# chkconfig --add postfix​​​​​​​

[root@localhost /var/www/extsuite/extman]# chkconfig postfix on​​​​​​​

[root@localhost /var/www/extsuite/extman]# chown postfix.postfix -R /var/lib/postfix/​​​​​​​

[root@localhost /var/www/extsuite/extman]# chown postfix.postfix /var/spool/ -R

3.安装dovecot

yum安装

[root@localhost ~]# yum install -y dovecot dovecot-mysql

配置dovecot:

[root@localhost ~]# cd /etc/dovecot/​​​​​​​

[root@localhost dovecot]# vim dovecot.conf     //直接在配置文件最后添加即可​​​​​​​

protocols = imap pop3​​​​​​​

!include conf.d/*.conf​​​​​​​

listen = *

base_dir = /var/run/dovecot/​​​​​​​

[root@localhost dovecot]# cd conf.d/​​​​​​​

[root@localhost conf.d]# vim 10-auth.conf​​​​​​​

disable_plaintext_auth = no​​​​​​​

[root@localhost conf.d]# vim 10-mail.conf​​​​​​​

mail_location = maildir:~/Maildir​​​​​​​

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

mail_privileged_group = mail​​​​​​​

[root@localhost conf.d]# vim 10-ssl.conf​​​​​​​

ssl = no​​​​​​​

[root@localhost conf.d]# vim 10-logging.conf ​​​​​​​

log_path = /var/log/dovecot.log​​​​​​​

info_log_path = /var/log/dovecot.info​​​​​​​

log_timestamp = "%Y-%m-%d %H:%M:%S "​​​​​​​

[root@localhost conf.d]# cp auth-sql.conf.ext auth-sql.conf​​​​​​​

[root@localhost conf.d]# vim auth-sql.conf​​​​​​​

passdb {  ​​​​​​​

    driver = sql        ​​​​​​​

 ​​​​​​​

    # Path for SQL configuration file, see example-config/dovecot-sql.conf.ext  ​​​​​​​

    args = /etc/dovecot/dovecot-sql.conf.ext​​​​​​​

}​​​​​​​

 ​​​​​​​

userdb {  ​​​​​​​

    driver = sql  ​​​​​​​

    args = /etc/dovecot/dovecot-sql.conf.ext​​​​​​​

}

编辑dovecot通过mysql认证的配置文件:

[root@localhost conf.d]# vim /etc/dovecot/dovecot-mysql.conf

driver = mysql​​​​​​​

connect = host=localhost dbname=extmail user=extmail password=extmail​​​​​​​

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'

4.安装courier-authlib

下载解压并编译

[root@localhost ~]# cd /usr/local/src/​​​​​​​

[root@localhost /usr/local/src]#  wget https://sourceforge.net/projects/courier/files/authlib/0.69.0/courier-authlib-0.69.0.tar.bz2​​​​​​​

[root@localhost /usr/local/src]# tar xf courier-authlib-0.69.0.tar.bz2

下载courier-unicode-1.2编译安装

[root@localhost ~]# wget https://sourceforge.net/projects/courier/files/courier-unicode/2.1/courier-unicode-2.1.tar.bz2​​​​​​​

[root@localhost ~]# tar jxvf courier-unicode-2.1.tar.bz2 ​​​​​​​

[root@localhost ~]# cd courier-unicode-2.1

[root@localhost courier-unicode-1.2]# ./configure​​​​​​​

[root@localhost courier-unicode-1.2]# make && make install

编译courier-anthlib

[root@localhost /usr/local/src]# cd courier-authlib-0.69.0/

[root@localhost /usr/local/src/courier-authlib-0.66.2]# ./configure --prefix=/usr/local/courier-authlib     --sysconfdir=/etc     --without-authpam     --without-authshadow     --without-authvchkpw     --without-authpgsql     --with-authmysql     --with-mysql-libs=/usr/lib64/mysql     --with-mysql-includes=/usr/include/mysql     --with-redhat     --with-authmysqlrc=/etc/authmysqlrc     --with-authdaemonrc=/etc/authdaemonrc     --with-mailuser=postfix --with-mailgroup=postfix     

[root@localhost /usr/local/src/courier-authlib-0.66.2]# make && make install

配置courier-authlib:

[root@localhost courier-authlib-0.66.2]# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon​​​​​​​

[root@localhost courier-authlib-0.66.2]# cp /etc/authdaemonrc.dist /etc/authdaemonrc​​​​​​​

[root@localhost courier-authlib-0.66.2]# cp /etc/authmysqlrc.dist /etc/authmysqlrc​​​​​​​

[root@localhost courier-authlib-0.66.2]# vim /etc/authdaemonrc //配置文件里的验证方法比较多,我们这里只使用authmysql​​​​​​​

authmodulelist="authmysql"​​​​​​​

authmodulelistorig="authmysql"​​​​​​​

[root@localhost courier-authlib-0.66.2]# vim /etc/authmysqlrc //直接添加到配置文件尾部,然后去上面将响应系统默认的注视掉,或者删除即可​​​​​​​

MYSQL_SERVER localhost​​​​​​​

MYSQL_USERNAME extmail​​​​​​​

MYSQL_PASSWORD extmail​​​​​​​

MYSQL_SOCKET /var/lib/mysql/mysql.sock​​​​​​​

MYSQL_PORT 3306​​​​​​​

MYSQL_DATABASE extmail​​​​​​​

MYSQL_USER_TABLE mailbox​​​​​​​

MYSQL_CRYPT_PWFIELD password​​​​​​​

DEFAULT_DOMAIN test.com​​​​​​​

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)

courier-authlib添加启动脚本及其他:

[root@localhost  courier-authlib-0.66.2]# cp courier-authlib.sysvinit /etc/init.d/courier-authlib​​​​​​​

[root@localhost  courier-authlib-0.66.2]# chmod +x /etc/init.d/courier-authlib​​​​​​​

[root@localhost  courier-authlib-0.66.2]# chkconfig --add courier-authlib​​​​​​​

[root@localhost  courier-authlib-0.66.2]# chkconfig courier-authlib on​​​​​​​

[root@localhost  courier-authlib-0.66.2]# echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf​​​​​​​

[root@localhost  courier-authlib-0.66.1]# ldconfig​​​​​​​

[root@localhost  courier-authlib-0.66.1]# service courier-authlib start​​​​​​​

Starting Courier authentication services: authdaemond

smtp以及虚拟用户相关的设置:

[root@localhost ~]# vim /usr/lib64/sasl2/smtpd.conf    //文件不存在,要自己创建​​​​​​​

pwcheck_method: authdaemond​​​​​​​

log_level: 3​​​​​​​

mech_list: PLAIN LOGIN​​​​​​​

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

[root@localhost ~]# vim /etc/postfix/main.cf​​​​​​​

##postfix支持SMTP##​​​​​​​

smtpd_sasl_auth_enable = yes​​​​​​​

smtpd_sasl_local_domain = ''​​​​​​​

smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination​​​​​​​

broken_sasl_auth_clients=yes​​​​​​​

smtpd_client_restrictions = permit_sasl_authenticated​​​​​​​

smtpd_sasl_security_options = noanonymous​​​​​​​

##postfix支持虚拟用户##​​​​​​​

virtual_mailbox_base = /var/mailbox​​​​​​​

virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf   //这里的配置文件需在后面extman​​​​​​​

里复制过来​​​​​​​

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

5.安装extmail

下载extmail和extman:
[root@localhost ~]# cd /usr/local/src/​​​​​​​

从百度网盘下载extmail-1.2.tar.gzextman-1.1.tar.gz​​​​​​​

创建站点目录并解压、重命名extmail包

[root@localhost /usr/local/src]# mkdir -p /var/www/extsuite​​​​​​​

[root@localhost /usr/local/src]# tar -zxvf extmail-1.2.tar.gz -C /var/www/extsuite/​​​​​​​

[root@localhost /usr/local/src]# mv /var/www/extsuite/extmail-1.2/ /var/www/extsuite/extmail

更改extmail的配置文件:

[root@localhost ~]# cd /var/www/extsuite/extmail​​​​​​​

[root@localhost extmail]# cp webmail.cf.default webmail.cf​​​​​​​

[root@localhost extmail]# vim webmail.cf​​​​​​​

SYS_SESS_DIR = /tmp/extmail​​​​​​​

SYS_UPLOAD_TMPDIR = /tmp/extmail/upload​​​​​​​

SYS_USER_LANG = zh_CN​​​​​​​

SYS_MIN_PASS_LEN = 8​​​​​​​

SYS_MAILDIR_BASE = /var/mailbox​​​​​​​

SYS_MYSQL_USER = extmail​​​​​​​

SYS_MYSQL_PASS = extmail​​​​​​​

SYS_MYSQL_DB = extmail​​​​​​​

SYS_MYSQL_HOST = localhost​​​​​​​

SYS_MYSQL_SOCKET = /var/lib/mysql/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

建立临时文件目录与session目录,并更改权限:

[root@localhost extmail]# mkdir -p /tmp/extmail/upload​​​​​​​

[root@localhost extmail]# chown -R postfix.postfix /tmp/extmail/

6.extman

到extmail的下载目录下,解压extman包:

[root@localhost ~]# cd /usr/local/src/​​​​​​​

[root@localhost /usr/local/src]# tar -zxvf extman-1.1.tar.gz -C /var/www/extsuite/​​​​​​​

[root@localhost /usr/local/src]# cd /var/www/extsuite/​​​​​​​

[root@localhost /var/www/extsuite]# mv extman-1.1/ extman

拷贝extman的配置文件:

[root@localhost /var/www/extsuite]# cd extman/​​​​​​​

[root@localhost /var/www/extsuite/extman]# cp webman.cf.default webman.cf

更改cgi目录的属主属组:

[root@localhost /var/www/extsuite/extman]# chown -R postfix.postfix /var/www/extsuite/extman/cgi/​​​​​​​

[root@localhost /var/www/extsuite/extman]# chown -R postfix.postfix /var/www/extsuite/extmail/cgi/

加载数据到数据库中,同时修改TYPE为ENGINE 数据库的文件是

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

启动mysql

service mysql restart

导入数据库

mysql -uroot  < extmail.sql

mysql -uroot  < init.sql

创建一个mysql用户并授予权限:

[root@localhost /var/www/extsuite/extman]# mysql -uroot​​​​​​​

mysql> GRANT ALL ON extmail.* to extmail@'%' identified by 'extmail';      //我这里是直接授予全部权限在任意的IP地址上了,实际情况根据需求而定​​​​​​​

Query OK, 0 rows affected (0.00 sec)​​​​​​​

 ​​​​​​

mysql> FLUSH PRIVILEGES;​​​​​​​

Query OK, 0 rows affected (0.00 sec)

复制之前的配置文件:

[root@localhost ~]# cd /var/www/extsuite/extman/docs/​​​​​​​

[root@localhost /var/www/extsuite/extman/docs]# cp mysql_virtual_* /etc/postfix/

为extman创建临时目录:

[root@localhost /var/www/extsuite/extman/docs]# mkdir /tmp/extman

[root@localhost /var/www/extsuite/extman/docs]# chown -R postfix.postfix /tmp/extman/

启动postfix、dovecot、saslauthd服务,并查看进程是否正常:

[root@localhost /var/www/extsuite/extman]# service postfix start​​​​​​​

Starting postfix (via systemctl):                          [  确定  ]​​​​​​​

[root@localhost /var/www/extsuite/extman]# ps aux |grep postfix​​​​​​​

root      63586  0.0  0.1  95392  2160 ?        Ss   01:29   0:00 /usr/libexec/postfix/master -w​​​​​​​

postfix   63587  0.0  0.2  95448  3808 ?        S    01:29   0:00 pickup -l -t unix -u​​​​​​​

postfix   63588  0.0  0.2  95496  3816 ?        S    01:29   0:00 qmgr -l -t unix -u​​​​​​​

root      63592  0.0  0.0 112680   976 pts/0    S+   01:33   0:00 grep --color=auto postfix​​​​​​​

[root@localhost /var/www/extsuite/extman]#  ss -tnluo | grep :25​​​​​​​

tcp    LISTEN     0      100       *:25                    *:*  ​​​​​​​

[root@localhost /var/www/extsuite/extman]# service dovecot start​​​​​​​

Redirecting to /bin/systemctl start  dovecot.service​​​​​​​

[root@localhost /var/www/extsuite/extman]# ps aux |grep dovecot​​​​​​​

root      63834  0.3  0.0  15652  1484 ?        Ss   02:15   0:00 /usr/sbin/dovecot -F​​​​​​​

dovecot   63837  0.0  0.0   9320  1012 ?        S    02:15   0:00 dovecot/anvil​​​​​​​

root      63838  0.0  0.0   9448  1164 ?        S    02:15   0:00 dovecot/log​​​​​​​

root      63840  0.0  0.1  12464  2196 ?        S    02:15   0:00 dovecot/config​​​​​​​

root      63842  0.0  0.0 112680   972 pts/0    S+   02:15   0:00 grep --color=auto dovecot  

  

[root@localhost /var/www/extsuite/extman]# systemctl start saslauthd

[root@localhost /var/www/extsuite/extman]# ps aux |grep saslauthd​​​​​​​

root      63131  0.0  0.0  69648   916 ?        Ss   01:19   0:00 /usr/sbin/saslauthd -m /run/saslauthd -a pam​​​​​​​

root      63132  0.0  0.0  69648   676 ?        S    01:19   0:00 /usr/sbin/saslauthd -m /run/saslauthd -a pam​​​​​​​

root      63133  0.0  0.0  69648   676 ?        S    01:19   0:00 /usr/sbin/saslauthd -m /run/saslauthd -a pam​​​​​​​

root      63134  0.0  0.0  69648   676 ?        S    01:19   0:00 /usr/sbin/saslauthd -m /run/saslauthd -a pam​​​​​​​

root      63135  0.0  0.0  69648   676 ?        S    01:19   0:00 /usr/sbin/saslauthd -m /run/saslauthd -a pam​​​​​​​

root      63144  0.0  0.0 112680   972 pts/0    S+   01:20   0:00 grep --color=auto saslauthd​​​​​​​

[root@localhost /var/www/extsuite/extman]# ps aux |grep courier-authlib​​​​​​​

root      61661  0.0  0.0   4316   444 ?        S    00:07   0:00 /usr/local/courier-authlib/sbin/courierlogger -pid=/usr/local/courier-authlib/var/spool/authdaemon/pid -start /usr/local/courier-authlib/libexec/courier-authlib/authdaemond​​​​​​​

root      61662  0.0  0.0  35512  1796 ?        S    00:07   0:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond​​​​​​​

root      61663  0.0  0.0  35512   468 ?        S    00:07   0:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond​​​​​​​

root      61664  0.0  0.0  35512   468 ?        S    00:07   0:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond​​​​​​​

root      61665  0.0  0.0  35512   468 ?        S    00:07   0:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond​​​​​​​

root      61666  0.0  0.0  35512   468 ?        S    00:07   0:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond​​​​​​​

root      61667  0.0  0.0  35512   468 ?        S    00:07   0:00 /usr/local/courier-authlib/libexec/courier-authlib/authdaemond​​​​​​​

root      63660  0.0  0.0 112680   980 pts/0    S+   02:00   0:00 grep --color=auto courier-authlib

7.测试

测试虚拟用户:

[root@localhost courier-authlib-0.66.2]# /usr/local/courier-authlib/sbin/authtest -s login postmaster@extmail.org extmail​​​​​​​

Authentication succeeded.                //显示这个表示成功,测试时使用的是postmaster@extmail.org,因为我们导入的数据库init.sql里面自带了这个。​​​​​​​

Authenticated: postmaster@extmail.org  (uid 2525, gid 2525)​​​​​​​

Home Directory: /var/mailbox/extmail.org/postmaster  //这里需要注意/var/mailbox这个目录现在我们还没有创建,后面web访问的时候如果没有会报错,所以提前创建。​​​​​​​

                    Maildir: /var/mailbox/extmail.org/postmaster/Maildir/​​​​​​​

                    Quota: (none)​​​​​​​

            Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0​​​​​​​

                Cleartext Password: extmail​​​​​​​

                    Options: (none)

[root@localhost courier-authlib-0.66.2]# mkdir /var/mailbox

[root@localhost courier-authlib-0.66.2]# chown -R postfix.postfix /var/mailbox/

测试smtp发信:

[root@localhost ~]# printf   "postmaster@extmail.org" | openssl base64​​​​​​​

cG9zdG1hc3RlckBleHRtYWlsLm9yZw==​​​​​​​

[root@localhost ~]#  printf   "extmail" | openssl base64​​​​​​​

ZXh0bWFpbA==​​​​​​​

[root@localhost ~]# telnet localhost 25​​​​​​​

Trying ::1...​​​​​​​

telnet: connect to address ::1: Connection refused​​​​​​​

Trying 127.0.0.1...​​​​​​​

Connected to localhost.​​​​​​​

Escape character is '^]'.​​​​​​​

220 mail.daen.com ESMTP Postfix​​​​​​​

auth login​​​​​​​

334 VXNlcm5hbWU6​​​​​​​

cG9zdG1hc3RlckBleHRtYWlsLm9yZw==​​​​​​​

334 UGFzc3dvcmQ6​​​​​​​

ZXh0bWFpbA==​​​​​​​

235 2.7.0 Authentication successful     //成功​​​​​​​

quit​​​​​​​

221 2.0.0 Bye​​​​​​​​​​​​​​

Connection closed by foreign host.

8.配置apache

8.1、修改httpd主配置文件

vim /etc/httpd/conf/httpd.conf ​​​​​​​

#第119行,注释中心主机​​​​​​​

#DocumentRoot "/var/www/html"​​​​​​​

#修改用户与组为postfix​​​​​​​

User postfix​​​​​​​

Group postfix​​​​​​​

 ​​​​​​

结尾加上虚拟主机配置​​​​​​​

<VirtualHost *:80>​​​​​​​

ServerName mail.zhongdianjizhi.com​​​​​​​

DocumentRoot /var/www/extsuite/extmail/html/​​​​​​​

ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi​​​​​​​

Alias /extmail /var/www/extsuite/extmail/html​​​​​​​

ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi​​​​​​​

Alias /extman /var/www/extsuite/extman/html​​​​​​​

</VirtualHost>

8.2、修改cgi目录的属主

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

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

8.3、配置文件语法检查

httpd -t

8.4、编译安装Unix-Syslog

tar xf Unix-Syslog-1.1.tar.gz ​​​​​​​

cd Unix-Syslog-1.1/​​​​​​​

perl Makefile.PL ​​​​​​​

make && make install

8.5、启动httpd

systemctl start httpd

9.登陆webmail管理

 

默认用户名:root@extmail.org
默认密码:extmail*123*

9.1、邮箱管理--添加域与用户

9.2、登陆邮箱

 9.3、测试收发邮件

10.域名解析配置

 

说明MX记录值的最后有一个点,代表主机名结束。在有些域名服务商网站设置的时候不会自动帮您加上,如果漏掉的话 DNS 服务器在解析的时候,会自动并上你的域名,这样会引起解析错误如果 MX 记录设置的值为主机名或是域名,则需要增加对应的 A 记录。例如我们MX记录的值设置的是 mail.insigmail.com 则需要增加一条相应的 A 记录

10.1、SPF

SPF 记录是一种域名服务 (DNS) 记录,可确定允许哪些邮件服务器代表您的域来发送电子邮件。

SPF的设置选项可以参考:http://www.openspf.org/SPFRecordSyntax

这里说几个常用的:

  1. a:所有该域名的A记录都为通过,a不指定的情况下为当前域名
  2. ip4:指定通过的IP
  3. mx:mx记录域名的A记录IP可以发邮件
  4. all:结束标志,“-”表示只允许设置的记录为通过,“~”表示失败,通常用于测试,“+”表示忽略SPF

例如:v=spf1 a mx -all,则表示允许A记录和MX记录IP收发邮件。添加的方法是在域名DNS解析设置一个txt记录,主机记录为空或者@,记录值为v=spf1 a mx -all,其他可以忽略。我这里设置的是:v=spf1 ip4:220.191.249.136 -all 

10.2、DKIM

DomainKeys Identified Mail的缩写,域名密钥识别邮件标准。

向你的 CentOS 添加 EPEL 库 , Extra Packages for Enterprise Linux (EPEL) :: Fedora Docs 可以在这里寻找适合你操作系统的库

下载安装EPEL:

wget install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 

rpm -Uvh epel-release-latest-7.noarch.rpm

安装opendkim:

yum install opendkim

生成DKIM key (修改红色部分域名)

# 请替换下面的域名export domain=insigmail.com

mkdir /etc/opendkim/keys/$domain

cd /etc/opendkim/keys/$domain

opendkim-genkey -d $domain -s default

chown -R opendkim:opendkim /etc/opendkim/keys/$domain

echo "default._domainkey.$domain $domain:default:/etc/opendkim/keys/$domain/default.private" >> /etc/opendkim/KeyTable

echo "*@$domain default._domainkey.$domain" >> /etc/opendkim/SigningTable

生成之后打开/etc/opendkim/keys/domain.com/default.txt,里面就是DKIM key,需要添加到DNS,主机记录为default._domainkey,记录值为括号里面的(去掉引号)。

 

将这段填入域名记录值v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDnY13M6hQgOH+3MAQ8/d/7weJSlq0AYaqx6ZtmCHezteHR84Q93pqhlDuBCWDNIqL4MZh7KqJuSqxtFNgWEXaEp/Lv9myUbbJQAChgy7ELS/cr37bF0Hi0kzOO9qkbTDb9NFr2LBj8JivbogLG91eA9E3Q4kpgWRinHRtR25Kc3QIDAQAB

修改openDKIM设置

vi /etc/opendkim.conf

1. 将Mode 改为 Mode sv 2. 将Domain 改为 Domain lomu.me(lomu.me是之前设置的域名) 3. 将所有变量前面的#去掉,但是KeyFileStatistics加上# 4. 再把SigningTable /etc/opendkim/SigningTable改成SigningTable refile:/etc/opendkim/SigningTable,KeyTable                /etc/opendkim/KeyTable改成KeyTable   refile:/etc/opendkim/KeyTable

设置Postfix

vi /etc/postfix/main.cf

加上下面幾行# opendkim setup

smtpd_milters = inet:127.0.0.1:8891

non_smtpd_milters = inet:127.0.0.1:8891

milter_default_action = accept

重启服务

service opendkim restart

service postfix restart

chkconfig opendkim on

PS: 第一次启动如果出现 Generating default DKIM keys: hostname: Unknown host 可以在 /etc/hosts 上面加上域名,例如:

127.0.0.1 lomu.me localhost localhost.localdomain localhost4 localhost4.localdomain4

10.3、DMARC

DMARC协议是有效解决信头From伪造而诞生的一种新的邮件来源验证手段,为邮件发件人地址提供强大保护,并在邮件收发双方之间建立起一个数据反馈机制。

具体信息可以看这里:Overview – dmarc.org

DMARC记录中常用的参数解释

p:用于告知收件方,当检测到某邮件存在伪造我(发件人)的情况,收件方要做出什么处理,处理方式从轻到重依次为:none为不作任何处理;quarantine为将邮件标记为垃圾邮件;reject为拒绝该邮件。初期建议设置为none。

rua:用于在收件方检测后,将一段时间的汇总报告,发送到哪个邮箱地址。

ruf:用于当检测到伪造邮件时,收件方须将该伪造信息的报告发送到哪个邮箱地址。

例如v=DMARC1;p=reject;rua=jinxm@insigmail.com,意思是拒绝伪造邮件,并且将一段时间的汇总报告发送给我。

添加到DNS

添加TXT记录,主机名:_dmarc,记录值:v=DMARC1;p=quarantine;rua=jinxm@insigmail.com

10.4、PTR

PTR记录,是电子邮件系统中的邮件交换记录的一种;另一种邮件交换记录是A记录(在IPv4协议中)或AAAA记录(在IPv6协议中)。PTR记录常被用于反向地址解析。

PTR记录也就是IP反向解析,我们常见的解析都是将域名A记录解析到IP,PTR则是将IP反向解析到对应的域名,通过设置PTR可以提高发信方的信誉,从而提高到达率。

PTR设置

通过观察,一般国外的VPS都会直接将购买的时候的hostname设置为PTR记录值,但是我买的阿里云的并没有,所以这个需要提交售后工单要求客服帮你添加的,添加的值为安装postfix的时候设置的myhostname,例如我的是mail.insigmail.com

添加好了以后可以通过以下命令查看

dig -x IP

如果看到了PTR记录为你的域名那就说明成功了

到这里,基本上只要不发垃圾邮件,邮件的到达率应该就没啥问题了。

这里给大家推荐一个测试工具:Newsletters spam test by mail-tester.com,只要给页面上的邮箱随便发一封邮件,然后点击按钮提交就可以看到测试结果,里面会有一些优化建议,非常好用。

11.遇到的问题

1.登陆报错

Can't open /tmp/extman/xxxxxxxx, No such file or directory

超找原因,是因为系统因为自动清理了/tmp下的extman文件,找不到文件,

两种办法。

1.在tmp下创建一个extman,并修改权限为777即可,这种办法是临时的。

2.还有一种永久解决这个问题

修改vi /var/www/extsuite/extman/webman.cf

里面的SYS_SESS_DIR即可

SYS_SESS_DIR = /var/www/extsuite/extman/session

同时记得修改权限

[root@localhost ~]# chmod 777 /var/www/extsuite/extman/session

如果是extmail登陆报错,修改/var/www/extsuite/extmail/webmail.cf里面的

SYS_SESS_DIR即可

2.登陆webmail界面时提示如下错误信息

nsecure dependency in sprintf while running with -T switch at /usr/local/lib/perl5/site_perl/5.14.2/mach/Unix/Syslog.pm line 59.

修改/你的webmail路径/cgi/index.cgi中把第一行的T参数去掉就可以了:
如:
#!/usr/bin/perl -wT

修改为:

#!/usr/bin/perl -w

然后重新登陆WEBMAIL界面,问题解决!

3.点击“图形日志”报错

Can't locate RRDs.pm in @INC (@INC contains: /var/www/extsuite/extman/libs /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /var/www/extsuite/extman/libs/Ext/GraphLog.pm line 23. BEGIN failed--compilation aborted at /var/www/extsuite/extman/libs/Ext/GraphLog.pm line 23. Compilation failed in require at /var/www/extsuite/extman/libs/Ext/MgrApp/ViewLog.pm line 22. BEGIN failed--compilation aborted at /var/www/extsuite/extman/libs/Ext/MgrApp/ViewLog.pm line 22. Compilation failed in require at /var/www/extsuite/extman/cgi/viewlog.cgi line 18.

4.Recipient address rejected: User unknown in local recipient table

解决办法:

根据日志分析,出现上述问题主要原因在于mydestination和virtual_mailbox_domains冲突所致!

那么我们将mydestination字段留空!

[root@centos58 courier-authlib]# vim /etc/postfix/main.cf

mydestination = $mydomain

改为

mydestination =

[root@centos58 courier-authlib]# /etc/init.d/postfix restart

5./Maildir/cur failed:Permission denied

1.查看日志

[root@insigam119 cur]# tail -f /var/log/dovecot.log

2020-12-17 15:12:33 pop3(jinxm@insigmail.com): Error: open(/var/mailbox/insigmail.com/jinxm/Maildir/cur/1608188628.Vfd01I1e03dfM37704.insigam119:2,AS) failed: Permission denied (euid=1000(publish) egid=1000(publish) missing +r perm: /var/mailbox/insigmail.com/jinxm/Maildir/cur/1608188628.Vfd01I1e03dfM37704.insigam119:2,AS, dir owned by 2525:2525 mode=0777)

2.查看postfix用户的用户ID和组ID为2525

[root@insigam119 cur]# cat /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin

polkitd:x:999:998:User for polkitd:/:/sbin/nologin

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

chrony:x:998:996::/var/lib/chrony:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

tcpdump:x:72:72::/:/sbin/nologin

nscd:x:28:28:NSCD Daemon:/:/sbin/nologin

publish:x:1000:1000::/home/publish:/bin/bash

front:x:1001:1001::/home/front:/bin/bash

project:x:1002:1002::/home/project:/bin/bash

nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin

zabbix:x:996:994:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin

saslauth:x:995:76:Saslauthd user:/run/saslauthd:/sbin/nologin

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

postfix:x:2525:2525::/home/postfix:/sbin/nologin

postdrop:x:2526:2526::/home/postdrop:/sbin/nologin

dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin

dovenull:x:994:993:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin

apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

3.用管理员账号登录修改用户的用户ID和组ID

6.发送邮件用户认证失败

Dec 17 22:27:12 insigam119 authdaemond: received auth request, service=smtp, authtype=login

Dec 17 22:27:12 insigam119 authdaemond: authmysql: trying this module

Dec 17 22:27:12 insigam119 authdaemond: authmysqllib: connected. Versions: header 50650, client 50650, server 50650

Dec 17 22:27:12 insigam119 authdaemond: SQL query: SELECT id, crypt, '', uid, gid, home, concat('/var/mailbox/',maildir), '', name, '' FROM mailbox WHERE id = 'jinxm@insigmail.com' AND (1=1)

Dec 17 22:27:12 insigam119 authdaemond: mysql_query failed: SELECT command denied to user 'extmail'@'localhost' for table 'mailbox'

Dec 17 22:27:12 insigam119 authdaemond: authmysqllib: connected. Versions: header 50650, client 50650, server 50650

Dec 17 22:27:12 insigam119 authdaemond: mysql_query failed second time, giving up: SELECT command denied to user 'extmail'@'localhost' for table 'mailbox'

Dec 17 22:27:12 insigam119 authdaemond: authmysql: REJECT - try next module

Dec 17 22:27:12 insigam119 authdaemond: FAIL, all modules rejected

Dec 17 22:27:12 insigam119 postfix/smtpd[7205]: warning: maven.insigma.com[10.85.159.202]: SASL LOGIN authentication failed: authentication failure

总结:sql查询语句不正确,就是/etc/authmysqlrc文件配置不正确由于配置是拷贝过来的,将重复的配置注释掉。

7.550 Domain may not exist or DNS check failed

退信内容:550 Domain may not exist or DNS check failed [NX9WKUWGGZoEdpKuMBJbEmXcZnp1+GoEt62NhQ65bRw2iEld1x+go68= IP: xx.xx.xx.xx]
退信原因:域名SPF问题。

8.图形日志不显示

如果想使用需要安装图形日志的运行所需要的软件包Time::HiRes、File::Tail和rrdtool。

其中前两个包您可以去http://search.cpan.org搜索并下载获得。

安装依赖包

[root@localhost ~]# yum install tcl tcl-devel libart_lgpl libart_lgpl-devel

安装Time::HiRes

[root@localhost ~]# tar xvf Time-HiRes-1.9721.tar.gz

[root@localhost ~]# cd Time-HiRes-1.9721

[root@localhost Time-HiRes-1.9721]# perl Makefile.PL

[root@localhost Time-HiRes-1.9721]# make

[root@localhost Time-HiRes-1.9721]# make test

[root@localhost Time-HiRes-1.9721]# make install

安装File::Tail

[root@localhost ~]# tar xvf File-Tail-0.99.3.tar.gz

[root@localhost ~]# cd File-Tail-0.99.3

[root@localhost File-Tail-0.99.3]# perl Makefile.PL

[root@localhost File-Tail-0.99.3]# make

[root@localhost File-Tail-0.99.3]# make test

[root@localhost File-Tail-0.99.3]# make install

安装rrdtool-1.2.23

rpm  -qa | grep rrdtool

如果没有安装,安装即可!

[root@localhost ~]# yum install rrdtool rrdtool-perl

cp -r /var/www/extsuite/extman/addon/mailgraph_ext/ /usr/local

/var/www/extsuite/extman/addon/mailgraph_ext/mailgraph-init start

/var/www/extsuite/extman/addon/mailgraph_ext/qmonitor.pl start & 

9.Extmail登录界面设置默认域名

使Extmail Webmail过程中,发现登陆时,因为使用IP访问,所以域名老是显示为IP,而不是默认域名,很麻烦,现在解决这个问题,让Webmail默认显示域名,而不再是IP

#vi /var/www/extsuite/extmail/html/default/index.html

主要修改162行,增加如下红字部分(value=“你的默认登陆域名”)如下:

<TR>

     <TD><%domain%></TD>

     <TD><INPUT TYPE="text" class="input_n" NAME="domain" value="insigmail.com"></TD>

</TR>

再次登陆,就搞定了

12.Postfix常用命令

1.查看邮件队列 # postqueue -p 或 mailq

2.停止postfix # service postfix stop

3.清除所有发送队列 # postsuper -d ALL

4.刪除所有正在 deferred 队列中的邮件 (删除曾经发送失败的邮件 )

postsuper -d ALL deferred

5.启动postfix # service postfix start

13.参考文章


1.邮件概念解释

https://www.imooc.com/article/277274

2.基于CentOS7平台搭建邮件服务器 

https://blog.csdn.net/qq_29891615/article/details/79495320
https://blog.csdn.net/fish_study_csdn/article/details/103945578
https://www.cnblogs.com/kevingrace/p/9383993.html
https://www.sohu.com/a/292545854_100094647 

3.extman登陆报错Can't open /tmp/extman/, No such file or directory 

 ​​​​​​​https://blog.51cto.com/weiruoyu/1017823​​​​​​​

4.postfix+extmail服务器搭建过程中遇到的问题

http://blog.chinaunix.net/uid-20776139-id-3331697.html

5.图形日志不显示

https://www.sohu.com/a/292545854_100094647
https://blog.csdn.net/weixin_34186128/article/details/92497283 

6.自建邮件服务器域名解析设置 

https://www.cnblogs.com/lichongbing/p/12069567.html

7.添加SPF、DKIM、DMARC、PTR提高送达率 

http://lomu.me/post/SPF-DKIM-DMARC-PTR
http://blog.sina.com.cn/s/blog_a8192bdd0102vrxo.html 

8.postfix 发送邮件延迟 阻塞 被接收方拒绝等问题 

https://www.cnblogs.com/zdz8207/p/Linux-postfix-sendmail2.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值