简介
Postfix 是一个邮件传输代理(MTA),用于发送和接收电子邮件的应用程序。在本教程中,我们将安装和配置 Postfix,以便它只能被本地应用程序使用 — 也就是说,只能被安装在与 Postfix 相同服务器上的应用程序使用。
为什么要这样做呢?
如果你已经在使用第三方电子邮件提供商来发送和接收邮件,你就不需要运行自己的邮件服务器。但是,如果你管理一台云服务器,安装了需要发送电子邮件通知的应用程序,运行一个本地的、仅用于发送的 SMTP 服务器是使用第三方电子邮件服务提供商或运行完整的 SMTP 服务器的一个很好的替代方案。
在本教程中,你将学习如何安装和配置 Postfix 作为一个仅用于发送的 SMTP 服务器。
先决条件
要完成本教程,你需要:
- 一个已经按照 Ubuntu 16.04 初始设置指南设置好的 Ubuntu 16.04 Droplet,包括创建一个 sudo 非根用户
- 一个有效的域名,比如
example.com
,指向你的服务器。你可以按照这个主机名教程来设置。
请注意,你服务器的主机名应该与这个域名或子域名匹配。你可以通过在命令提示符下输入 hostname
来验证服务器的主机名。输出应该与你在创建 Droplet 时给出的名称匹配。
步骤 1 — 安装 Postfix
在这一步中,你将学习如何安装 Postfix。安装 Postfix 和其他用于测试电子邮件的程序的最有效方法是安装 mailutils
软件包。
首先,更新软件包数据库:
sudo apt-get update
最后,安装 Postfix。安装 mailtuils
将同时安装 Postfix 以及一些其他 Postfix 运行所需的程序。
sudo apt install mailutils
在安装过程的最后,你将看到一个窗口,看起来与下面的图片一模一样。默认选项是 Internet Site。这是本教程推荐的选项,所以按 TAB
键,然后按 ENTER
键。
!从菜单中选择 Internet Site,然后按 TAB 键选择 ,然后按 ENTER 键
之后,你将看到另一个窗口,看起来与下面的图片一样。System mail name 应该与你在创建服务器时分配的名称相同。如果显示的是一个子域名,比如 subdomain.example.com
,将其改为 example.com
。完成后,按 TAB
键,然后按 ENTER
键。
!输入你的域名,然后按 TAB 键选择 ,然后按 ENTER 键
安装成功后,继续进行第二步。
步骤 2 — 配置 Postfix
在这一步中,你将学习如何配置 Postfix,以便它只能处理来自运行它的服务器的发送邮件请求,也就是来自 localhost。
为了实现这一点,Postfix 需要被配置为只监听 loopback 接口,即服务器用于内部通信的虚拟网络接口。要进行更改,使用 nano
或你喜欢的文本编辑器打开主 Postfix 配置文件。
sudo nano /etc/postfix/main.cf
打开文件后,向下滚动直到看到以下部分。
. . . mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all . . .
将 inet_interfaces = all
这一行更改为 inet_interfaces = loopback-only
。
. . . mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = loopback-only . . .
另一个你需要修改的指令是 mydestination
,它用于指定通过 local_transport
邮件传递传输所传递的域的列表。默认情况下,值类似于以下内容:
[secondary_label /etc/postfix/main.cf] . . . mydestination = $myhostname, example.com, localhost.com, , localhost . . .
对于这种情况,推荐的默认值如下所示,所以修改你的值以匹配:
[secondary_label /etc/postfix/main.cf] . . . mydestination = $myhostname, localhost.$mydomain, $mydomain . . .
保存并关闭文件。
最后,重新启动 Postfix。
sudo systemctl restart postfix
步骤 3 — 测试 SMTP 服务器
在这一步中,你将测试 Postfix 是否能够使用 mail
命令向外部电子邮件账户发送邮件,mail
命令是 Step 1 中安装的 mailutils
软件包的一部分。
要发送一个测试邮件,输入:
echo "This is the body of the email" | mail -s "This is the subject line" your_email_address
在进行你自己的测试时,你可以使用原样的正文和主题行文本,也可以根据自己的喜好进行更改。但是,在 your_email_address
的位置,使用一个有效的电子邮件地址。域部分可以是 gmail.com
、fastmail.com
、yahoo.com
或者你使用的任何其他电子邮件服务提供商。
现在检查你发送测试消息的电子邮件地址。你应该在收件箱中看到这条消息。如果没有,检查你的垃圾邮件文件夹。
请注意,使用这个配置,你发送的测试邮件中 From 字段的地址将是 sammy@example.com
,其中 sammy 是你的 Linux 用户名,域部分是服务器的主机名。如果你更改了你的用户名,From 地址也会改变。
步骤 4 —— 转发系统邮件
我们要设置的最后一件事是转发系统发送给 root 用户的邮件到你的个人外部邮箱地址。
要配置 Postfix,使系统生成的邮件发送到你的邮箱地址,你需要编辑 /etc/aliases
文件。
sudo nano /etc/aliases
在默认安装的 Ubuntu 16.04 上,文件的完整内容如下:
# 查看 man 5 aliases 了解格式 postmaster: root
通过这个设置,系统生成的邮件会发送到 root 用户。你需要编辑文件,将这些邮件重定向到你的邮箱地址。为了实现这一点,编辑文件使其如下所示:
[secondary_label /etc/aliases] # 查看 man 5 aliases 了解格式 postmaster: root root: 你的邮箱地址
将 your_email_address
替换为你的个人邮箱地址。完成后,保存并关闭文件。为使更改生效,运行以下命令:
sudo newaliases
你现在可以通过以下命令测试是否生效,发送邮件到 root 用户:
echo "这是邮件的正文" | mail -s "这是主题行" root
你应该会在你的邮箱地址收到邮件。如果没有收到,检查你的垃圾邮件文件夹。
结论
这就是使用 Postfix 设置发送邮件服务器所需的全部步骤。你可能需要采取一些额外步骤来保护你的域名免受垃圾邮件的影响。
如果你的使用场景是在单个地址接收服务器通知,邮件被标记为垃圾邮件是一个主要问题,因为你可以将其列入白名单。然而,如果你的使用场景是向潜在的站点用户发送邮件(例如消息板注册的确认邮件),你应该绝对设置 SPF 记录和 DKIM,以便你的服务器邮件更有可能被视为合法。
- 如何使用 SPF 记录防止欺骗和提高电子邮件可靠性
- 如何在 Debian Wheezy 上安装和配置 DKIM 与 Postfix 尽管该文章是针对 Debian Wheezy 编写的,但相同的步骤适用于 Ubuntu 16.04。
如果配置正确,这将使使用你域名伪造发送垃圾邮件变得困难。进行这些额外的配置步骤还将使常见的邮件提供商更有可能将来自你服务器的邮件视为合法。