主要参考资料:《鸟哥的Linux私房菜---服务器架设篇》(第三版)
Postfix使用SMTP协议(默认端口号为25)提供邮件发送功能;Dovecot提供邮件Delivery功能,即邮件账户从Mail服务器获取邮件内容,支持imap,imaps,pop3和pop3s,默认端口分别为:143,993,110,995。
1.服务器域名准备。
现在很少直接用user@ip的方式表示邮箱地址了,而在没有申请公共域名的情况下,可以简单设置Mail Server的host name解决这个问题。例如,我的Mail Server的域名设置为liumail.com,由于域名解析时首先访问本机的hosts文件(linux下路径是/etc/hosts,windows8及其以前版本的路径是WindowsDir/system32/drivers/etc/hosts),在里面添加:
Mail Server IP liumail.com
添加了该行的机器就能解析liumail.com这个域名了。这样,我的Mail Server支持的邮箱地址格式就是:user@liumail.com。
直接用Linux架构的Mail Server中,Linux操作系统的账户就是邮箱用户,所以登录邮箱的user也是其用户名,密码是其登录密码。
2.安装
Fedora 23(Server Edition)没有预装Postfix和Dovecot,需要使用dnf命令安装:
#dnf install postfix
#dnf install dovecot
3.配置postfix
(1)软件结构(from 鸟哥的linux私房菜)
(i)主要配置文件:
(a)/etc/postfix/main.cf :主要的配置文件,几乎所有的设定参数都在该文档内。同时,该文档针对每个参数提供了详细的说明,参考这些说明就能完成设置。修改该文档后,需要重新启动Postfix。
(b)/etc/postfix/master.cf :主要规定了 postfix 每个程序的运行参数,也是很重要的一个配置文件。不过该文档预设已经很 OK 了,通常不需要更改。
(c)/etc/postfix/access (利用 postmap 处理): 可以设定开放 Relay 或拒绝联机的来源或目标地址等信息的外部配置文件,不过这个文档要生效还需要在 /etc/postfix/main.cf 启动这个文档的用途才行。且设定完毕后需要以 postmap 来处理成为数据库文档。
(d)/etc/aliases (利用 postalias 或 newaliases 均可): 做为邮件别名的用途,也可以作为邮件群组的设定。
(ii)常用的执行命令:
(a)/usr/sbin/postconf (查阅 postfix 的设定数据) :列出目前你的 postfix 的详细设定数据,包括系统默认值。如果在 main.cf 里面曾经修改过某些预设参数的话,想要仅列出非默认值的设定数据, 则可以使用『postconf -n』这个选项即可。
(b)/usr/sbin/postfix (主要的 daemon 指令) :为 postfix 的主要执行命令,可以使用它来启动或重新读取配置文件:
#postfix check:检查Postfix相关文档、权限等是否正确。‘
#postfix start:启动Postfix。
#postfix stop:结束Postfix。
#postfix flush:强制将当前的邮件队列的邮件寄出。
#postfix reload:在postfix运行时重新读入main.cf配置文件。
(c)/usr/sbin/postalias :设定别名数据库的指令,因为 Postfix读取数据库格式的文档效率较高,所以我们都会将 ASCII 格式的文档重建为数据库。 这个指令主要是转换 /etc/aliases 成为 /etc/aliases.db。用法为:
#postaliase hash:/etc/aliases
(d)/usr/sbin/postcat :主要用在检查放在 queue (队列) 当中的信件内容。由于队列当中的信件内容是给 MTA 看的, 所以格式并不是一般我们人类看的懂的文字数据。所以这个时候你得要用 postcat 才可以看出该信件的内容。 在 /var/spool/postfix 内有相当多的目录,假设内有一个文件名为 /deferred/abcfile , 那你可以利用底下的方式来查询该文档的内容:
#postcat /var/spool/postfix/deferred/abcfile
(e)/usr/sbin/postmap :该指令的用法与 postalias 类似,不过它主要在转换 access 这个文档的数据库。用法为:
#postmap hash:/etc/postfix/access
(f)/usr/sbin/postqueue :类似 mailq 的输出结果,可以输入『postqueue -p』看看就知道了。
(2)基本配置:能够收发邮件,不考虑Relay,过滤、安全等。
(a)myhostname:设定主机名,需要使用FQDN(Fully Qualified Domain Name,全称域名)。上文提到我的Mail Server名字为liumail.com,故而设置该参数为:liumail.com。以后可以使用$myhostname引用该参数。PS:下面还有一个参数mydomain,默认取myhostname的第一个“.”之后的内容。
(b)mydomain:设置为liumail.com。
(c)myorigin :发信时所显示的『发信源主机』项目,即邮件的mail from。如果本机寄信时忘记加上 Mail from 就以此值为默认。通常设置为: myorigin = $myhostname。
(d)inet_interfaces :设定 postfix 的监听接口 (极重要) 。在预设的情况下,Postfix 只会监听本机(127.0.0.1)。如果你想要监听整个 Internet 的话,要开放成为对外的接口,或者是开放给全部的接口,常见的设定方法为: inet_interfaces = all 。 由于如果有重复设定项目时,会以最晚出现的设定值为准,所以最好只保留一组 inet_interfaces 设置。
(e)inet_protocols :设定 postfix 的监听 IP 协议。默认为all,同时监听ipv4和ipv6。如果网络环境中只有ipv4,可以改为ipv4.
(f)mydestination :设定『能够收信的主机名』,即Mail Server的名字。因为我们的主机有非常多的名字,那么对方填写的 mail to 到底要写哪个主机名字我们才能将该信件收下? 就是在这里规范的!也就是说,你的许多主机名当中,仅有写入这个设定值的名称才能作为 email 的主机地址。 此处可以设定为$myhostname。
(g)mynetworks_style :设定『信任网域』的一项指标。这个设定值在规定『与主机在同一个网域的可信任客户端』的意思。例如,主机 IP 是 192.168.100.254,如果相信整个局域网络内 (192.168.100.0/24) 的用户的话,可规定此设定值为『 subnet 』。不过,一般来说,因为下面的 mynetworks 会取代这个设定值, 所以不设定也没有关系。如果要设定的话,最好设定成为 host 即可 (亦即仅信任这台 主机)。
(h)规定信任的客户端 (极重要) 。Mail Server能不能帮忙进行 Relay 与这个设定值最有关系!举例来说,我要开放本机与内部网域的 IP 时,就可以这样进行设定: mynetworks = 127.0.0.0/8, 192.168.100.0/24。如果你想要以 /etc/postfix/access 这个文档来控制 relay 的用户时,可将上述的数据改写成这样: mynetworks = 127.0.0.0/8, 192.168.100.0/24, hash:/etc/postfix/access ,然后你只要再建立 access 之后重整成数据库后(利用postmap),就能够设定 Relay 的用户。此处设定为192.168.1.0/24。
(i)relay_domains :规范可以帮忙 relay 的下一部 MTA 主机地址。此处取预设定的$mydestination即可。
(j)alias_maps :设定邮件别名。保留默认值即可。
(k)执行:postmap hash:/etc/postfix/access。
(l)执行:postalias hash:/etc/aliases。
(m)home_mailbox = Maildir/ 。此处指定了mailbox文件相对于用户的home目录的路径。缺省的位置是/var/spool/mail/user或/var/mail/user。该处设定是为了与Dovecot配合,因为Dovecot默认到home路径下的Maildir/取邮件。
tips:可以用postconf -n查看做过的配置修改。
(3)启动Postfix。可以用上面提到的Postfix命令,也可以将Postfix作为系统服务,用systemctl启动,或加入到开机启动的服务中。
4.配置Dovecot。
Dovecot的配置相对比较简单。如果只用imap和pop3,不考虑ssl的话,需要做如下工作:
(1)将/etc/dovecot/dovecot.conf中的#protocols = imap pop3 lmtp改为:protocols = imap pop3。
(2)将/etc/dovecot/conf.d/10-ssl.conf中的ssl参数改为ssl = no。
(3)将/etc/dovecot/conf.d/10-auth.conf中的disable_plaintext_auth参数改为disable_plaintext_auth = no。
(4)/etc/dovecot/conf.d/10-mail.conf:mail_location = Maildir:~/Maildir。
5.防火墙设置。firewalld防火墙默认拦截大多数端口和服务,包括邮件相关的。所以,要开放端口25,110和143.
firewall-cmd --set-default-zone=public
firewall-cmd --permanent --zone=public --add-port=25/tcp
firewall-cmd --permanent --zone=public --add-port=110/tcp
firewall-cmd --permanent --zone=public --add-port=143/tcp
firewall-cmd --reload
然后可以用以下命令查看开放的端口:
firewall-cmd --zone=public --list-ports
6.设置完成后,可以用telnet的收发邮件的命令测试,此处不再赘述。
firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp
linux mail命令发送邮件失败的解决:http://www.linuxdiyf.com/linux/14938.html
4个开源的命令行邮件客户端:http://www.linuxdiyf.com/linux/13910.html
如何在Ubuntu中更改默认浏览器和Email客户端:http://www.linuxdiyf.com/linux/12479.html
在Linux中加密邮件:http://www.linuxdiyf.com/linux/10373.html
4个可以发送完整电子邮件的命令行工具:http://www.linuxdiyf.com/linux/12327.html