Ubuntu搭建简易Postfix邮箱服务器

为什么要搭建自己的邮箱服务器呢?你知道希拉里⋅克林顿曾经使用过一个专用的私人邮箱服务器吗?

搭建自己的私人邮箱服务器可以有效的解决邮件的隐私问题。因为只有你,邮箱服务器的管理员,才能看见服务器上的邮件。但是自己搭建邮箱服务器是一个比较麻烦的过程,因为你需要掌握许多许多的知识,使邮箱服务器正常运转。

所以,我把邮箱服务器的搭建分成几个部分来讲,减少小白的痛苦。这篇文章是第1部分,讲解搭建一个非常简易的Postfix邮箱服务器的步骤。Postifx是一个SMTP服务器。SMTP服务器也被称为MTA(message transfer agent)。完成了这篇教程,你就能拥有一个属于自己域名的邮箱地址,比如我的网站邮箱地址是gnu@linuxdashen.com 。并且能用这个邮箱地址向Gmail,Yahoo,QQ,网易等邮箱发送邮件并从这些邮箱服务提供商接收邮件。这篇教程以Ubuntu 14.04服务器作为示例。

关于Postfix

Postfix是一个顶尖的SMTP服务器,也被称为MTA。Postfix负责从其他SMTP服务器接收邮件,将MUA递交的邮件传递给收件人。MUA(mail user agent)就是我们平常使用的Thunderbird,Foxmail,Outlook等邮箱客户端。Postfix程序采用模块化的设计,每一个模块都尽可能以最低的权限运行。这种设计非常有助于安全。Postfix与Unix的结合度非常高。一台Linux服务器的Postfix可以负责多个域名的邮件发送和接收。这篇文章只介绍单个域名的发送和接收。

安装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 <your-fqdn>

通常邮箱服务器的FQDN主机名为mail.yourdomain.com

设置好系统时间

邮件里都有一个时间戳(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 <IP> +short

或者

host <IP>

因为你是从主机商获得服务器的IP,所以你得在主机商那里设置PTR记录(反向DNS解析),而不是在域名注册商那里设置。

做完了以上准备工作,我们就可以安装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 <your-server-ip>

ubuntu搭建Postfix邮件服务器

从图中可以看见我的服务器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<username>/var/mail/<username>文件中。如果你不知道收件箱保存在哪里,运行这条命令:

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程序,输入qx

如果你按q来退出mail程序,那么已经阅读过的邮件将会从/var/mail/<username>移动到/home/<username>/mbox文件中。这意味着其他邮箱客户端将不能阅读这些邮件。如果你不想移动已经阅读的邮件,输入x退出mail程序。

如果需要自动转发邮件,那么在用户的home目录下新建一个.forward文件,在这个文件里输入转发邮件地址,然后保存就行了。注意:用户邮箱不会保留原始邮件。

文章总结

现在,我们在Ubuntu服务器上搭建了一个很简陋的Postfix邮箱服务器。我们可以在服务器上用命令行来发送和阅读邮件。另外如果这台ubuntu服务器上搭建了一个网站,那么PHPMailer等网站程序就能向外发送邮件了。但是这种方式有很多不方便,比如每次发送或查看邮件都要SSH登录服务器,而且只能查看纯文本的邮件,不能阅读HTML邮件。在接下来的文章中,我将介绍如何在我们的个人电脑上使用Thunderbird,outlook等邮箱客户端来发送和阅读邮件,如何从浏览器中登录邮箱服务器以及如何加密我们的邮件, urhh,还有很多其他的高级设置。

为这篇文章评分
[Total: 27 Average: 3.9]

“Ubuntu搭建简易Postfix邮箱服务器”的2个回复

  1. 大神您好,请教下,我想通过python来用 root@yourdomain.com 给 163邮箱发送邮件。
    smtp的账号 和 密码 是什么?
    账号是root吗?密码是什么呢

  2. set hostname 对于Ubuntu 15.04以下的版本:

    用你自己的hostname替换下面的”example_hostname”

    $ echo “example_hostname” > /etc/hostname

    $ hostname -F /etc/hostname

    检查/etc/default/dhcpcd文件是否存在

    cat /etc/default/dhcpcd | grep SET_HOSTNAME

    如果结果返回SET_HOSTNAME=’yes’, 编辑 /etc/default/dhcpcd文件,注释掉 SET_HOSTNAME:

    /etc/default/dhcpcd

    #SET_HOSTNAME=’yes’

发表评论

电子邮件地址不会被公开。 必填项已用*标注