Open yc09od opened 7 years ago
安装Postfix之前的准备工作
Postfix的原作者是Wietse Venema,他可是一位Unix专家。对于Unix已经提供的功能,Postfix都尽可能不再重复提供。所以,要让Postfix发挥最大功效,我们需要合理地配置好Unix/Linux服务器。
设置正确的主机名(hostname)
一般情况下,Postfix与其他SMTP服务器通信的时候会使用Unix/Linux服务器的主机名来表明自己的身份。主机名可以有两种形式,单个名字和FQDN.
通常,个人电脑使用单个名字来作为主机名。比如,你的Linux系统的主机名可能是linux,Debian, Ubuntu等。FQDN (Fully Qualified Domain Name) 由两个部分组成,节点名和域名。例如,
mail.linuxdashen.com 就是FQDN形式的主机名。mail是节点名,linuxdashen.com是域名。面向互联网的服务器一般使用FQDN形式的主机名。邮箱服务器也应该使用FQDN形式的主机名。FQDN将会出现在smtpd横幅中(smtpd banner),这是Postfix向其他SMTP服务器表明自己身份的方式。
如果你的SMTP服务器不用FQDN来表明自己的身份,那么收件人的SMTP服务器可能会拒收邮件。有些SMTP服务器甚至会查询DNS,验证FQDN是否真的解析为你的服务器IP。不过,在这垃圾邮件漫天飞的年代,这种做法是可以理解的。所以我们必须得正确设置好邮箱服务器的FQDN主机名。
输入下面的命令查看当前的主机名。
hostname -f 如果你的Ubuntu服务器还没有设置好主机名,可以使用hostnamectl来设置。
sudo hostnamectl set-hostname
设置好系统时间
邮件里都有一个时间戳(timestamp),这个时间戳就是Postfix根据当前系统时间设置的。这个时间戳也会出现在Postfix的日志里。所以调整好系统时间是非常必要的。
使用date命令查看时区设置以及当前的系统时间。
user@mail:~$ date Thu Mar 31 06:37:19 BST 2016 在Ubuntu系统上可以使用
sudo dpkg-reconfigure tzdata 命令来调整时区。时区调整后系统时间基本就没问题了。如果你需要保持非常精确的时间,可以使用NTP协议与远程时间服务器保持同步,具体请看这篇文章。
linux系统用命令配置时区并同步系统时间
为邮箱服务器设置好DNS记录
MX记录
MX记录的作用是告诉全世界的SMTP服务器,你的邮箱服务器mail.yourdomain.com负责yourdomain.com的邮件发送和接收。
MX记录 @ mail.linuxdashen.com 邮箱服务器的常见DNS名字是mail.yourdomain.com。如果一个域名有多个邮箱服务器,那么可以设置多个MX记录,并设置优先级。优先级用数字表示,数字越小表示优先级越高。
A记录
当其他SMTP服务器知道mail.yourdomain.com负责yourdomain.com的邮件发送和接收后,还必须要知道mail.yourdomain.com这台主机的IP才能建立连接并发送邮件。A记录就是将主机名解析成IP地址的一个记录。
mail.linuxdashen.com <IP地址> PTR记录
PTR记录也叫做pointer记录,它将IP地址转换成主机名,与A记录刚好相反。这种解析被称为反向DNS解析(rDNS)。
PTR记录可以帮助我们过滤垃圾邮件。很多SMTP服务器会查找对方SMTP服务器的PTR记录,得到一个主机名,然后与对方SMTP声称的主机名作比较,如果两者一致,就接收邮件,反之不接收邮件或放进垃圾箱。为了不让你的邮件被拒收或放进垃圾箱,你应该为你的服务器IP设置PTR记录。
查找一个IP地址的PTR记录的命令为:
dig -x
host
做完了以上准备工作,我们就可以安装Postfix了。
安装Postfix
在ubuntu服务器上运行下面的命令:
sudo apt-get update
sudo apt-get install postfix -y 安装过程中会让你选择一种Postfix配置类型。一般情况下,我们需要选择第二种类型:Internet Site。
ubuntu搭建Postfix邮件服务器
No configuration 表示不要做任何配置; Internet Site 表示直接使用本地SMTP服务器发送和接收邮件; Internet with smarthost 表示使用本地SMTP服务器接收邮件,但发送邮件时不直接使用本地SMTP服务器,而是使用第三方smart host来转发邮件; Satellite system 表示邮件的发送和接收都是由第三方smarthost来完成。 Local only 表示邮件只能在本机用户之间发送和接收。
在第二个页面System mail name中填入你的域名,也就是邮箱地址@符号后面的域名,比如,我的邮箱地址是gnu@linuxdashen.com,所以我填的是linuxdashen.com。当发件人的域名地址没有指定时,Postfix会自动将这个域名添加到发件人的地址中。
Postfix在安装过程中会生成/etc/postfix/main.cf配置文件。安装完成后Postfix会自动运行。我们可以用下面的命令查看Postfix的版本。
user@mail:~$ sudo postconf mail_version mail_version = 2.11.0 使用netstat来查看Postfix的监听情况:
sudo netstat -lnpt Postfix的master进程监听TCP 25号端口。
ubuntu搭建Postfix邮件服务器
在发送测试邮件之前,我们最好是查看25号端口是否被防火墙或主机商屏蔽。nmap可以帮助我们扫描服务器的开放端口。在你的个人电脑上运行下面的命令。
sudo nmap
从图中可以看见我的服务器TCP 25号端口是开放的。如果的输出结果显示25端口被过滤,请查看iptables防火墙设置。如果你的主机商屏蔽了25号端口,给你的主机商提交工单,要求打开25号端口。
发送测试邮件
实际上,现在我们就能用命令行发送和接收邮件了。如果你的服务器有一个用户名是user1,那么这个用户的邮箱地址就是user1@yourdomain.com。你可以发送一封邮件给root用户: root@yourdomain.com。也可以向Gmail,Yahoo,QQ,网易等邮箱用户发送邮件。不过现在我们只能在服务器上用命令行发送和查看邮件。
Postfix在安装时,会同时安装一个sendmail的程序(/usr/sbin/sendmail)。你可以用这个sendmail二进制程序向你的Gmail邮箱发送一封测试邮件。在服务器上输入下面的命令:
echo "test email" | sendmail your-account@gmail.com 这是一条很简单的命令, sendmail从标准输入读取到test email,将test email作为邮件正文,然后发送到Gmail邮箱。现在你可以查看你的Gmail邮箱,应该会看见你的测试邮件。尽管我们没有指明发件人地址,但Postfix会自动将你的域名添加到发送人地址中。你也可以在Gmail中回复这封测试邮件,然后在邮箱服务器上查看是否可以收到Gmail发来的邮件。
每个用户的邮件保存在/var/spool/mail
postconf mail_spool_directory Postfix的收发日志保存在/var/log/mail.log文件中。Postfix本身的运行错误日志保存在/var/log/mail.err文件中。
使用mail程序来发送邮件,查看收件箱
sendmail的功能非常有限,现在让我们来安装一个命令行邮箱客户端。
sudo apt-get install mailutils 使用mail发送邮件的命令为
mail username@gmail.com user@mail:~$ mail username@gmail.com Cc: Subject: 2nd test email I'm sending this email using the mail program. 输入主题和正文后,按Ctrl+D来发送邮件。
要查看收件箱,输入mail就行了。
mail 以下是用mail管理收件箱的操作方法。
要查看第一封邮件,输入数字1。如果邮件只显示了一半,按Enter键来显示剩下的消息。
将所有邮件从第一封排序,输入h。
要显示最后一屏邮件,输入h$或z。
阅读下一封邮件,输入n。
删除第一封邮件,输入d 1。
删除第一封,第二封和第四封邮件,输入d 1 2 4。
删除前10封邮件,输入d 1-10。
回复第1封邮件,输入reply 1。
退出mail程序,输入q或x。
如果你按q来退出mail程序,那么已经阅读过的邮件将会从/var/mail/
如果需要自动转发邮件,那么在用户的home目录下新建一个.forward文件,在这个文件里输入转发邮件地址,然后保存就行了。注意:用户邮箱不会保留原始邮件。
1: learn how to send mail server 2: set mail server