文章目录

一、设置域名

如果先把域名设置好,则postfix会自动根据当前设定的域名作为配置,后面会省事很多。当然,也可以不用设置域名,而使用系统默认的localhost.localdomain域名。这里假设我们设定的域名为mail.abc.com

1echo 'mail.abc.com' > /etc/hostname
2hostname -F /etc/hostname

注意,这种方法只是临时设置,重启系统后会被还原。可以使用后面介绍的setup指令进行永久设置。

二、搭建DNS环境域名解析,用于解析postfix地址

1yum install -y bind
2yum install -y bind-utils
3vim /etc/named.conf

修改/etc/named.conf下面两行内容:

listen-on port 53 { 127.0.0.1;192.168.8.8; }; //添加自己本的IP到列表中 allow-query { any; }; // 把这个值设置为any

修改子配置文件

vim /etc/named.rfc1912.zones

在文件末尾添加两行如下内容(需要注意,type与file前面的一定是tab制表符,不能是空格):

1zone "abc.com" IN {
2       type master;
3       file "abc.com.zone";
4};
5zone "8.168.192.in-addr.arpa" {
6       type master;
7       file "abc.com.local";
8};

其中第一个为正向解析区域,第二个为反向解析区域。

1cd /var/named
2cp -p named.localhost abc.com.zone
3cp -p named.localhost abc.com.local
4vim abc.com.zone
5vim abc.com.local

编辑正向区域配置文件abc.com.zone,内容如下(IP配置根据情况填写):

 1$TTL 1D
 2@       IN SOA  @ rname.invalid. (
 3                                        0       ; serial
 4                                        1D      ; refresh
 5                                        1H      ; retry
 6                                        1W      ; expire
 7                                        3H )    ; minimum
 8        NS      @
 9        A       127.0.0.1
10        AAAA    ::1
11        A       192.168.8.8
12        MX 10   mail.abc.com
13mail    A       192.168.8.8

编辑反向区域配置文件abc.com.local,内容如下(IP配置根据情况填写):

 1$TTL 1D
 2@       IN SOA  abc.com rname.invalid. (
 3                                        0       ; serial
 4                                        1D      ; refresh
 5                                        1H      ; retry
 6                                        1W      ; expire
 7                                        3H )    ; minimum
 8        NS      @
 9        A       127.0.0.1
10        AAAA    ::1
11        A       192.168.8.8
12        MX 10   mail.abc.com
13181     PTR     mail.abc.com

添加DNS解析配置:

1vim /etc/resolv.conf

添加内容:

nameserver 192.168.8.8

注意:这种方法只是临时添加的,DNS在重启网络服务后会被NetworkManager重新生成,如果想要永久添加DNS解析,可以修改/etc/sysconfig/network-scripts/ifcfg-eth0文件,在其后添加:

DNS1=192.168.8.8

或者使用setup命令在网络配置中选择DNS配置进行添加或者修改:

这里可以直接修改主机名、DNS以及DNS搜寻路径,把主机名设置为mail.abc.com,主DNS设置为本机IP,第二DNS设置为网关IP。 配置好后重启named服务,并进行测试:

1service named restart
2nslookup mail.abc.com

如果nslookup mail.abc.com后出现:

1Server:		192.168.8.8
2Address:	192.168.8.8#53
3
4Name:	mail.abc.com
5Address: 192.168.8.8

则表示成功。

三、安装postfix服务器并进行配置

可能postfix在系统安装过程中已经安装了此服务,可以使用下面的命令查询

1rpm -q postfix

如果没有可以手动安装:

1yum install -y postfix

使用命令:

1postconf -a

查询是否支持cyrus与dovecot,如果不支持需要重新安装新的版本。笔者使用的Centos 6.10,系统中安装的是postfix-2.6.6-8.el6.x86_64,是支持cyrus与dovecot。

编辑postfix的配置文件:

1vim /etc/postfix/main.cf

如果在安装postfix之前设置好了hostname就可以不用修改hostname,否则需要修改下面两项:

myhostname = mail.abc.com mydomail = abc.com

还需要修改以下内容:

1inet_interfaces = 192.168.8.8, 127.0.0.1, localhost        #监听接口
2inet_protocols = ipv4
3mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
4home_mailbox = Maildir/                    #邮件目录,在用户目录下

home_mailbox有两个选项,一个是Mailbox,另一个就是Maildir。

  • Mailbox 同一个用户的所有邮件内容存储为单个文件,通常保存在/var/spool/mail/目录下文件名与用户名相同,这是Postfix默认使用的方式。
  • Maildir 使用目录结构来存储用户的邮件内容每一个用户使用一个文件夹,每封邮件都作为一个独立的文件存放。这种方式的存取速度和效率要好一些,对于管理邮件内容页也更加方便。

配置完成后可以使用下面的命令进行语法检测:

1postfix check

如果想要查看postfix非默认配置,可以使用命令:

1postconf -n

如果没有错误则可以启动postfix服务了:

1service postfix start

四、安装配置dovecot

1yum install -y dovecot

编辑/etc/dovecot/dovecot.conf文件,打开:

1protocols = imap pop3 lmtp
2listen = *, ::

编辑/etc/dovecot/conf.d/10-auth.conf文件,设置:

1disable_plaintext_auth = no

编辑/etc/dovecot/conf.d/10-mail.conf文件,设置:

1mail_location = maildir:~/Maildir

五、测试

在进行测试之前,我们需要添加一些测试账号:

1groupadd mailusers
2useradd -g mailusers -s /sbin/nologin jack
3passwd jack
4useradd -g mailusers -s /sbin/nologin tom
5passwd tom

上面先添加了一个邮件组mailusers,然后添加了mailusers组的两个用户jack和tom,但这两个用户并不能登录系统。

为了保障测试顺利,建议先把防火墙关闭,同时把SELinux防火墙也关闭:

1vim /etc/selinux/config

设置SELINUX为disabled:

SELINUX=disabled

然后重启系统:

1reboot now

1.使用mail命令进行简单测试

1echo "您好,这是邮件内容" | mail -s "hello" tom@abc.com

可以在用户目录的Maildir/new中查看到新邮件:

2.使用telnet进行测试

连接端口25发邮件:

1telnet mail.abc.com 25

然后写邮件,依次输入下面红框中的命令或者字符即可。

 1Trying 192.168.8.8...
 2Connected to mail.abc.com.
 3Escape character is '^]'.
 4220 mail.abc.com ESMTP Postfix
 5helo mail.abc.com 	// 设置发邮件的主机
 6250 mail.abc.com   // 250表明命令执行成功
 7mail from: jack@mail.abc.com  // 设置发件人地址
 8250 2.1.0 Ok
 9rcpt to:tom@mail.abc.com // 设置收件人地址
10250 2.1.5 Ok
11data // 开始写邮件正文
12354 End data with <CR><LF>.<CR><LF>
13hello tom, I am Jack! 这是一封测试邮件!
14
15. 	// 标点符号“.“结束正文书写
16250 2.0.0 Ok: queued as 09F21E0973
17quit // 退出telnet
18221 2.0.0 Bye
19Connection closed by foreign host.

连接端口110收邮件:

1telnet mail.abc.com 110

依次输入红框中的命令,即可查看邮件:

1user tom // 使用tom用户登录
2pass tom // 输入tom的密码
3list // 列出邮件列表,可以看到有一封邮件
4retr 1 // 读取1号邮件
5quit //退出telnet

从上面的示例可以看到,控制台方式使用中英文混合可能会有一些问题。

3.使用第三方邮件工具收发邮件

这里我们以Foxmail为例,Foxmail运行在Windows平台,我们的邮件服务器运行在Linux平台,为了方便测试,需要把两台电脑部署在同一局域网内。并且注意Linux的防火墙是否有打开相应的端口,为了方便测试可以直接关闭防火墙。 安装好Foxmail后,添加邮箱账号:

/var/log/maillog

目前配置的邮件系统,可以在内网进行邮件收发,也可以向外发送,比如网易,QQ,新浪等等(如果没有被对方视为垃圾邮件的话),但很快估计就会发不成功,会被退回,可以参考退回原因。 比如网易邮箱退回信息:

1host 163mx03.mxmail.netease.com[220.181.14.158] said: 554
2    DT:SPM 163 mx41,W8CowACXax2qMa1e1h2ZJg--.2949S2 1588408748,please see
3http://mail.163.com/help/help_spam_16.htm?ip=171.212.195.205&hostid=mx41&time=1588408748
4    (in reply to end of DATA command)

错误码:554 DT:SPM 可能被视为垃圾邮件了,参见 http://mail.163.com/help/help_spam_16.htm?ip=171.212.195.205&hostid=mx41&time=1588408748

QQ邮箱退回信息:

1host mx3.qq.com[58.251.110.111] said: 550 Domain may not
2    exist or DNS check failed

错误码:550 Domain may not exist or DNS check failed 即域名不存在或者DNS检查失败。有些邮箱会在收到邮件时,验证是否可以向该地址发送邮件,如果不能发送则会拒收,以防止垃圾邮件。

出现这些问题有一个重要原因是因为我们并未在公网注册我们的域名,所以对方无法反向查找。不过到目前为止内部使用是完全没有问题了。