简介
Postfix 是一个流行的开源邮件传输代理(MTA),可用于在 Linux 系统上路由和传递电子邮件。据估计,全球约 25% 的公共邮件服务器运行的是 Postfix。
在本指南中,我们将教你如何在 Ubuntu 16.04 服务器上快速启动和运行 Postfix。
先决条件
为了遵循本指南,你应该拥有一个具有 sudo
权限的非 root 用户。你可以按照我们的 Ubuntu 16.04 初始服务器设置指南来创建必要的用户。
为了正确配置 Postfix,你需要一个指向你的 Ubuntu 16.04 服务器的完全合格的域名。你可以按照本指南来获取有关如何在 DigitalOcean 上设置你的域名的帮助。如果你打算接收邮件,你需要确保有一个 MX 记录指向你的邮件服务器。
在本教程中,我们将假设你正在配置一个具有 FQDN 为 mail.example.com
的主机。
步骤 1:安装 Postfix
Postfix 包含在 Ubuntu 的默认软件仓库中,因此安装非常简单。
首先,更新本地的 apt
软件包缓存,然后安装软件。我们将在安装命令中传入 DEBIAN_PRIORITY=low
环境变量,以回答一些额外的提示:
sudo apt-get update sudo DEBIAN_PRIORITY=low apt-get install postfix
使用以下信息正确填写你的提示,以适应你的环境:
- 邮件配置的一般类型?:对于此项,我们将选择 Internet Site,因为这符合我们的基础设施需求。
- 系统邮件名称:这是用于构建有效电子邮件地址的基本域,当只给出地址部分时。例如,我们服务器的主机名是
mail.example.com
,但我们可能希望将系统邮件名称设置为example.com
,这样给定用户名user1
,Postfix 将使用地址user1@example.com
。 - Root 和 postmaster 邮件接收者:这是将邮件转发到
root@
和postmaster@
的 Linux 帐户。使用你的主帐户。在我们的情况下,sammy。 - 其他接受邮件的目的地:这定义了此 Postfix 实例将接受的邮件目的地。如果需要添加此服务器负责接收的任何其他域,请在此处添加,否则默认设置应该可以正常工作。
- 强制邮件队列上的同步更新?:由于你可能使用了日志文件系统,这里选择 No。
- 本地网络:这是你的邮件服务器配置为中继消息的网络列表。默认设置对大多数情况都适用。如果选择修改它,请确保在网络范围方面非常严格。
- 邮箱大小限制:这可用于限制消息的大小。将其设置为 “0” 可禁用任何大小限制。
- 本地地址扩展字符:这是用于将地址的常规部分与扩展(用于创建动态别名)分开的字符。
- 要使用的 Internet 协议:选择是否限制 Postfix 支持的 IP 版本。我们将为我们的目的选择 “all”。
明确地说,这些是我们将在本指南中使用的设置:
- 邮件配置的一般类型?:Internet Site
- 系统邮件名称:example.com(不是 mail.example.com)
- Root 和 postmaster 邮件接收者:sammy
- 其他接受邮件的目的地:$myhostname, example.com, mail.example.com, localhost.example.com, localhost
- 强制邮件队列上的同步更新?:No
- 本地网络:127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
- 邮箱大小限制:0
- 本地地址扩展字符:+
- 要使用的 Internet 协议:all
如果你需要返回以重新调整这些设置,可以通过输入以下命令来执行:
sudo dpkg-reconfigure postfix
提示将预填充你之前的响应。
完成后,我们现在可以进行更多配置,以便按照我们的喜好设置系统。
步骤 2:调整 Postfix 配置
接下来,我们可以调整一些软件包未提示我们的设置。
首先,我们可以设置邮箱。我们将使用 Maildir 格式,它将消息分成单独的文件,然后根据用户操作移动到不同的目录中。另一个选项是 mbox 格式(我们将不在此处介绍),它将所有消息存储在单个文件中。
我们将将 home_mailbox
变量设置为 Maildir/
,这将在用户的主目录下创建一个以该名称命名的目录结构。可以使用 postconf
命令来查询或设置配置设置。通过输入以下命令来配置 home_mailbox
:
sudo postconf -e 'home_mailbox= Maildir/'
接下来,我们可以设置 virtual_alias_maps
表的位置。此表将任意电子邮件帐户映射到 Linux 系统帐户。我们将在 /etc/postfix/virtual
创建此表。同样,我们可以使用 postconf
命令:
sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'
步骤 3:将邮件地址映射到 Linux 账户
接下来,我们可以设置虚拟映射文件。在文本编辑器中打开文件:
sudo nano /etc/postfix/virtual
虚拟别名映射表使用非常简单的格式。在左侧,您可以列出您希望接收邮件的任何地址。然后,用空格分隔,输入您希望将该邮件发送到的 Linux 用户。
例如,如果您希望在 contact@example.com
和 admin@example.com
接收邮件,并希望将这些邮件发送到 sammy
Linux 用户,您可以像这样设置文件:
contact@example.com sammy admin@example.com sammy
在将所有地址映射到适当的服务器账户之后,保存并关闭文件。
我们可以通过输入以下命令应用映射:
sudo postmap /etc/postfix/virtual
重新启动 Postfix 进程,以确保我们的所有更改已被应用:
sudo systemctl restart postfix
步骤 4:调整防火墙
如果您正在运行 UFW 防火墙,如在初始服务器设置指南中配置的那样,我们需要为 Postfix 允许一个例外。
您可以通过输入以下命令允许对该服务的连接:
sudo ufw allow Postfix
Postfix 服务器组件已安装并准备就绪。接下来,我们将设置一个可以处理 Postfix 处理的邮件的客户端。
步骤 5:设置环境以匹配邮件位置
在安装客户端之前,我们应该确保我们的 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
步骤 6:安装和配置邮件客户端
为了与传递的邮件交互,我们将安装 s-nail
软件包。这是 BSD xmail
客户端的一个变种,功能丰富,可以正确处理 Maildir 格式,并且在很大程度上向后兼容。GNU 版本的 mail
有一些令人沮丧的限制,例如无论源格式如何,它总是将已读邮件保存为 mbox 格式。
要安装 s-nail
软件包,请输入:
sudo apt-get install s-nail
我们应该调整一些设置。在编辑器中打开 /etc/s-nail.rc
文件:
sudo nano /etc/s-nail.rc
在文件底部添加以下选项:
. . . set emptystart set folder=Maildir set record=+sent
完成后保存并关闭文件。
步骤 7:初始化 Maildir 并测试客户端
现在,我们可以测试客户端。
初始化目录结构
在我们的主目录中创建 Maildir 结构的最简单方法是给自己发送一封电子邮件。我们可以使用 mail
命令来实现这一点。因为只有在创建 Maildir 后才能使用 sent
文件,所以我们应该在我们的初始电子邮件中禁用写入。我们可以通过传递 -Snorecord
选项来实现这一点。
通过将字符串传递给 mail
命令来发送邮件。调整命令以将您的 Linux 用户标记为接收者:
echo 'init' | mail -s 'init' -Snorecord sammy
您应该会收到以下响应:
Can't canonicalize "/home/sammy/Maildir"
这是正常的,只会在第一条消息中显示。我们可以通过查找我们的 ~/Maildir
目录来检查目录是否已创建:
ls -R ~/Maildir
您应该会看到目录结构已创建,并且 ~/Maildir/new
目录中有一个新的消息文件:
/home/sammy/Maildir/: cur new tmp /home/sammy/Maildir/cur: /home/sammy/Maildir/new: 1463177269.Vfd01I40e4dM691221.mail.example.com /home/sammy/Maildir/tmp:
看起来我们的邮件已经被传递。
使用客户端管理邮件
使用客户端检查你的邮件:
mail
你应该能看到等待的新消息:
s-nail version v14.8.6. 输入 ? 获取帮助。 "/home/sammy/Maildir": 1 message 1 new >N 1 sammy@example.com Wed Dec 31 19:00 14/369 init
只需按下 ENTER 即可显示你的消息:
[-- Message 1 -- 14 lines, 369 bytes --]: From sammy@example.com Wed Dec 31 19:00:00 1969 Date: Fri, 13 May 2016 18:07:49 -0400 To: sammy@example.com Subject: init Message-Id: <20160513220749.A278F228D9@mail.example.com> From: sammy@example.com init
通过输入 h 可以返回到消息列表:
h
s-nail version v14.8.6. 输入 ? 获取帮助。 "/home/sammy/Maildir": 1 message 1 new >R 1 sammy@example.com Wed Dec 31 19:00 14/369 init
由于这条消息并不是很有用,我们可以使用 d 删除它:
d
输入 q 退出以返回到终端:
q
使用客户端发送邮件
你可以通过在文本编辑器中输入一条消息来测试发送邮件:
nano ~/test_message
在其中输入你想要发送的文本:
你好, 这是一封测试邮件。请确认收到!
使用 cat
命令,我们可以将消息传输到 mail
进程。这将默认以你的 Linux 用户身份发送消息。如果你想要修改 “From” 字段,可以使用 -r
标志进行调整:
cat ~/test_message | mail -s '测试邮件主题行' -r from_field_account user@email.com
上述选项包括:
-s
:邮件的主题行-r
:邮件的 “From:” 字段的可选更改。默认情况下,将使用你登录的 Linux 用户来填充此字段。-r
选项允许你覆盖此设置。user@email.com
:要发送邮件的账户。将其更改为你有权限访问的有效账户。
你可以在你的 mail
客户端中查看已发送的消息。通过输入以下命令再次启动交互式客户端:
mail
之后,通过输入以下命令查看你的已发送消息:
file +sent
你可以使用与处理收件箱邮件相同的命令来管理已发送的邮件。
结论
你现在应该已经在你的 Ubuntu 16.04 服务器上配置了 Postfix。对于初学者来说,管理邮件服务器可能是一项艰巨的任务,但通过这个配置,你应该已经具备了基本的 MTA 邮件功能,让你可以开始使用。