本教程的先前版本由Justin Ellingwood编写
介绍
Postfix是一种流行的开源邮件传输代理(MTA),可用于在 Linux 系统上路由和传递电子邮件。据估计,互联网上大约 25% 的公共邮件服务器运行 Postfix。
在本指南中,您将学习如何在 Ubuntu 20.04 服务器上安装和配置 Postfix。然后,您将测试后缀能够正确地路由邮件通过安装s-nail
,一个邮件用户代理(MUA),也被称为电子邮件客户端。
请注意,本教程的目标是帮助您使用一些基本的电子邮件功能快速启动和运行 Postfix。到本指南结束时,您将不会拥有功能齐全的电子邮件服务器,但您将拥有此类设置的一些基本组件来帮助您入门。
先决条件
设置和维护您自己的邮件服务器既复杂又耗时。对于大多数用户来说,依赖付费邮件服务更实用。如果您正在考虑运行自己的邮件服务器,我们鼓励您查看这篇文章,了解您可能不想这样做的原因。
如果您确定要按照本指南安装和配置 Postfix,那么您必须首先具备以下条件:
- 运行 Ubuntu 20.04 的服务器作为 Postfix 邮件服务器。该服务器应该有一个具有
sudo
特权的非 root 用户和一个配置有 UFW 的防火墙。您可以按照我们的Ubuntu 20.04 初始服务器设置指南进行设置。 - 一个完全限定域名指向您的 Ubuntu 20.04 服务器。您可以按照我们的域和 DNS 网络文档找到有关使用 DigitalOcean 设置域名的帮助。请注意,如果您计划从外部位置访问邮件,则需要确保您也有指向邮件服务器的 MX 记录。
请注意,本教程假设您正在配置 FQDN 为mail.example.com
. 如有必要,请务必更改example.com
或mail.example.com
反映您自己的 FQDN。
步骤 1 — 安装 Postfix
Postfix 包含在 Ubuntu 的默认存储库中,因此您可以使用 APT 安装它。
首先,更新您的本地apt
包缓存:
- sudo apt update
然后postfix
使用以下命令安装软件包。注意这里我们将DEBIAN_PRIORITY=low
环境变量传入这个安装命令。这将导致安装过程提示您配置一些附加选项:
- sudo DEBIAN_PRIORITY=low apt install postfix
这个安装过程会打开一系列交互提示。出于本教程的目的,请使用以下信息填写您的提示:
- 邮件配置的一般类型?:为此,请选择Internet 站点,因为这符合我们的基础架构需求。
- 系统邮件名称:当仅给出地址的帐户部分时,这是用于构建有效电子邮件地址的基本域。例如,假设您的服务器的主机名是. 您可能希望将系统邮件名称设置为,以便在给定 username 的情况下Postfix 将使用 address 。
mail.example.com
example.com
user1
user1@example.com
- Root 和 postmaster 邮件收件人:这是将邮件转发至
root@
和的 Linux 帐户postmaster@
。为此,请使用您的主帐户。在本例中,sammy。 - 接受邮件的其他目的地:这定义了此 Postfix 实例将接受的邮件目的地。如果您需要添加此服务器将负责接收的任何其他域,请在此处添加。否则,默认值就足够了。
- 强制同步更新邮件队列?:由于您可能使用的是日志文件系统,请在此处接受“否”。
- 本地网络:这是您的邮件服务器配置为中继邮件的网络列表。默认值适用于大多数情况。但是,如果您选择修改它,请确保对网络范围进行非常严格的限制。
- 邮箱大小限制:这可用于限制邮件的大小。将其设置为
0
禁用任何大小限制。 - 本地地址扩展字符:此字符可用于将地址的常规部分与扩展名(用于创建动态别名)分开。默认值
+
适用于本教程。 - 要使用的 Internet 协议:选择是否限制 Postfix 支持的 IP 版本。出于本教程的目的,请选择所有.
明确地说,这些是本指南中使用的设置:
- 邮件配置的一般类型?:网站
- 系统邮件名称:(
example.com
不是mail.example.com
) - Root 和 postmaster 邮件收件人:您的主要 Linux 帐户的用户名(在我们的示例中为sammy)
- 其他接受邮件的目的地:
$myhostname, example.com, mail.example.com, localhost.example.com, localhost
- 强制同步更新邮件队列?:没有
- 本地网络:
127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
- 邮箱大小限制:
0
- 本地地址扩展字符:
+
- 要使用的 Internet 协议:所有
注意:如果您需要返回更改这些设置,您可以键入:
- sudo dpkg-reconfigure postfix
提示将预先填充您之前的回复。
安装过程完成后,您就可以对 Postfix 配置进行一些更新了。
第 2 步 – 更改 Postfix 配置
现在您可以调整软件包安装过程中没有提示您进行的一些设置。Postfix 的许多配置设置都在/etc/postfix/main.cf
文件中定义。您可以使用 Postfix 的postconf
命令来查询或设置配置设置,而不是直接编辑此文件。
首先,设置非 root Ubuntu 用户邮箱的位置。在本指南中,我们将使用Maildir格式,它将消息分成单独的文件,然后根据用户操作在目录之间移动。本指南中未涵盖的替代选项是mbox格式,它将所有消息存储在一个文件中。
将home_mailbox
变量设置为Maildir/
。稍后,您将在用户的主目录中以该名称创建一个目录结构。home_mailbox
键入以下内容进行配置:
- sudo postconf -e 'home_mailbox= Maildir/'
接下来,设置virtual_alias_maps
表的位置,将任意电子邮件帐户映射到 Linux 系统帐户。运行以下命令,将表位置映射到名为 的哈希数据库文件/etc/postfix/virtual
:
- sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'
现在您已经在文件中定义了虚拟地图文件的位置main.cf
,您可以创建文件本身并开始将电子邮件帐户映射到 Linux 系统上的用户帐户。使用您喜欢的文本编辑器创建文件;在这个例子中,我们将使用nano
:
- sudo nano /etc/postfix/virtual
列出您希望接收电子邮件的所有地址,然后是一个空格和您希望将邮件发送到的 Linux 用户。
例如,如果您希望在并且希望将这些电子邮件发送给sammy Linux 用户,您可以像这样设置您的文件:contact@example.com
admin@example.com
contact@example.com sammy
admin@example.com sammy
将所有地址映射到适当的服务器帐户后,保存并关闭文件。如果您使用过nano
,请按CTRL + X
、Y
、 来执行此操作ENTER
。
通过键入以下内容应用映射:
- sudo postmap /etc/postfix/virtual
重新启动 Postfix 进程以确保所有更改都已应用:
- sudo systemctl restart postfix
假设您遵循先决条件 Initial Server Setup guide,您将使用 UFW 配置防火墙。默认情况下,此防火墙将阻止与服务器上服务的外部连接,除非明确允许这些连接,因此您必须添加防火墙规则以允许 Postfix 例外。
您可以通过键入以下内容来允许连接到服务:
- sudo ufw allow Postfix
这样,Postfix 已配置好并准备好接受外部连接。但是,您还没有准备好使用邮件客户端对其进行测试。在安装客户端并使用它与发送到服务器的邮件进行交互之前,您需要对 Ubuntu 服务器的设置进行一些更改。
步骤 3 — 安装邮件客户端并初始化 Maildir 结构
为了与正在发送的邮件进行交互,此步骤将引导您完成安装s-nail
包的过程。这是 BSDxmail
客户端的一个功能丰富的变体,可以正确处理 Maildir 格式。
但是,在安装客户端之前,请务必确保MAIL
正确设置环境变量。 s-nail
将查找此变量以找出为您的用户查找邮件的位置。
为了确保MAIL
无论您如何访问您的帐户(例如,无论是通过ssh
、su
、su -
、 还是 )sudo
都设置了该变量,您需要在/etc/bash.bashrc
文件中设置该变量并将其添加到其中的一个文件中/etc/profile.d
,以确保它被设置为默认所有用户。
要将变量添加到这些文件,请键入:
- echo 'export MAIL=~/Maildir' | sudo tee -a /etc/bash.bashrc | sudo tee -a /etc/profile.d/mail.sh
要将变量读入当前会话,请获取/etc/profile.d/mail.sh
文件:
- source /etc/profile.d/mail.sh
完成后,s-nail
使用 APT安装电子邮件客户端:
- sudo apt install s-nail
在运行客户端之前,您需要调整一些设置。/etc/s-nail.rc
在编辑器中打开文件:
- sudo nano /etc/s-nail.rc
在文件底部,添加以下选项:
. . .
set emptystart
set folder=Maildir
set record=+sent
以下是这些行的作用:
set emptystart
: 即使收件箱为空,也允许客户端打开set folder=Maildir
: 将Maildir
目录设置为内部folder
变量set record=+sent
创建一个sent
mbox 文件,用于在设置为folder
变量的目录中存储已发送的邮件,在本例中Maildir
完成后保存并关闭文件。您现在已准备好初始化系统的 Maildir 结构。
在您的主目录中创建 Maildir 结构的一种快速方法是给自己发送一封带有s-nail
命令的电子邮件。由于该sent
文件仅在创建 Maildir 后才可用,因此您应该禁用此初始电子邮件的写入。通过传递-Snorecord
选项来做到这一点。
通过将字符串管道到s-nail
命令来发送电子邮件。调整命令以将您的 Linux 用户标记为收件人:
- echo 'init' | s-nail -s 'init' -Snorecord sammy
注意:您可能会收到以下响应:
OutputCan't canonicalize "/home/sammy/Maildir"
这是正常现象,可能仅在发送第一条消息时出现。
您可以通过查找您的~/Maildir
目录来检查以确保该目录已创建:
- ls -R ~/Maildir
您将看到目录结构已创建,并且目录中包含一个新消息文件~/Maildir/new
:
Output/home/sammy/Maildir/:
cur new tmp
/home/sammy/Maildir/cur:
/home/sammy/Maildir/new:
1463177269.Vfd01I40e4dM691221.mail.example.com
/home/sammy/Maildir/tmp:
现在已经创建了目录结构,您可以s-nail
通过查看init
您发送的消息并向外部电子邮件地址发送消息来测试客户端。
第 4 步 – 测试客户端
要打开客户端,请运行以下s-nail
命令:
- s-nail
在您的控制台中,您将看到一个带有init
等待消息的基本收件箱:
Outputs-nail version v14.9.15. Type `?' for help
"/home/sammy/Maildir": 1 message 1 new
>N 1 [email protected] 2020-05-19 15:40 14/392 init
按ENTER
显示消息:
Output[-- Message 1 -- 14 lines, 369 bytes --]:
From [email protected] Tue May 19 15:40:48 2020
Date: Tue, 19 May 2020 15:40:48 +0000
To: [email protected]
Subject: init
Message-Id: <[email protected]>
From: [email protected]
init
您可以通过键入h
,然后 返回到消息列表ENTER
:
- h
Output>R 1 [email protected] 2020-05-19 15:40 14/392 init
请注意,消息现在的状态为R
,表明它已被阅读。
由于此消息不是很有用,您可以按d
,然后按 删除它ENTER
:
- d
要返回终端,请输入q
然后ENTER
:
- q
作为最后的测试,检查是否s-nail
能够正确发送电子邮件。为此,您可以将文本文件的内容通过管道传输到s-nail
进程中,就像您init
在上一步中发送的消息一样。
首先在文本编辑器中编写测试消息:
- nano ~/test_message
在里面,输入一些你想发送的文本:
Hello,
This is a test. Please confirm receipt!
写完消息后保存并关闭文件。
然后,使用该cat
命令将消息通过管道传送到s-nail
进程。您可以使用以下示例执行此操作,该示例使用这些选项:
-s
:这定义了电子邮件的主题行-r
:对电子邮件“发件人:”字段的可选更改。默认情况下,您登录的 Linux 用户将用于填充此字段。该-r
选项允许您使用有效地址覆盖它,例如您在/etc/postfix/virtual
文件中定义的地址之一。为了说明,以下命令使用[email protected]
此外,请务必更改为您有权访问的有效电子邮件地址:user@email.com
- cat ~/test_message | s-nail -s 'Test email subject line' -r [email protected] user@email.com
然后,导航到您向其发送邮件的电子邮件地址的收件箱。您几乎会立即看到您的消息在那里等待。
注意:如果邮件不在您的收件箱中,则它可能已发送到您的垃圾邮件文件夹。
您可以在s-nail
客户端中查看已发送的消息。再次启动交互式客户端:
- s-nail
在电子邮件客户端中,键入以下内容查看您发送的消息:
- file +sent
你会看到这样的输出:
Output+[/home/sammy/Maildir/]sent: 1 message 1 new
▸N 1 [email protected] 2020-05-19 15:47 12/297 Test email subject line
您可以使用与接收邮件相同的命令来管理发送的邮件。
结论
您现在已经在 Ubuntu 20.04 服务器上配置了 Postfix。对于新的系统管理员来说,管理电子邮件服务器可能是一项艰巨的任务,但是通过这种配置,您应该有足够的 MTA 电子邮件功能来开始使用。