Postfix是一种流行的开源邮件传输代理(MTA),可用于在Linux系统上路由和传递电子邮件。 据估计,互联网上大约25%的公共邮件服务器运行Postfix。
本文介绍 如何在Ubuntu 20.04服务器上安装和配置Postfix。 然后,将通过安装s-nail(邮件用户代理(MUA),也称为电子邮件客户端)来测试Postfix是否能够正确路由邮件。
请注意,本文的目标是仅使用一些基本的电子邮件功能来帮助你启动Postfix并快速运行。最后,你虽没有功能齐全的电子邮件服务器,但是拥有此类设置的一些基本组件,作为基本应用和入门。
虽然是在ubuntu 20 下实验的,但其他版本,以及其他linux 都应该适用。
安装好了ubuntu20,并拥有一个非root 的sudo 权限用户。 如果没有,在root 下创建一个
adduser sammy
usermod -aG sudo sammy
这样就建立了一个sudo 权限用户
全局域名指向你的Ubuntu 20.04服务器。 需要确保DNS具有指向邮件服务器的MX记录。
更新本地apt 包:
sudo apt update
安装Postfix
sudo DEBIAN_PRIORITY=low apt install postfix
这个安装DEBIAN_PRIORITY=low ,这样有些我们需要的设置。
安装过程有好些提示,我们是这样选择的:
General type of mail configuration?: 选择 Internet Site
System mail name: 这里假设域名是 www.example.com , 邮件服务名为 mail.example ,这里只是填 example.com, 以后你用户user 的邮箱就是 user@example.com
Root and postmaster mail recipient: 比如你的用户名是sammy ,那就填 sammy ,这样根用户等的邮箱都是sammy 接收。
Other destinations to accept mail for: 选择缺省就好
Force synchronous updates on mail queue?: 选择 No
Local networks: 缺省就好。
Mailbox size limit: 邮箱限定封数,0则是不限制。
Local address extension character: + 就是加号,不改。
Internet protocols to use: 选All
再写一下设置参数表:
example.com
(not mail.example.com
)$myhostname, example.com, mail.example.com, localhost.example.com, localhost
127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
0
+
选择错了也没关系,可以用下面命令修改:
sudo dpkg-reconfigure postfix
设置主邮件目录
sudo postconf -e 'home_mailbox= Maildir/'
建立别名表
sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'
编辑别名文件
sudo nano /etc/postfix/virtual
内容如下:
contact@example.com sammy
admin@example.com sammy
这个什么意思呢? contact , admin 这2个用户的邮件转给sammy 接收。
使能别名映像表:
sudo postmap /etc/postfix/virtual
重启动 Postfix 使更改生效:
sudo systemctl restart postfix
打开防火墙:
sudo ufw allow Postfix
为了与要发送的邮件进行交互,此步骤将引导并完成安装s-nail软件包。 这是BSD xmail客户端的多功能的变体,可以正确处理Maildir格式。
但是,在安装客户端之前,请务必确保正确设置了MAIL环境变量。 s-nail将查找此变量,以找出在何处为您的用户查找邮件。
为了确保无论你如何访问帐户(无论是通过ssh,su,su-还是sudo)都可以设置MAIL变量,需要在/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/bash.bashrc 和 /etc/profile.d/mail.sh 这2个文件末尾添加了MAIL=~/Maildir 可以打开这2个文件看看
要将上面设置变量在当前会话中生效,执行如下命令:
source /etc/profile.d/mail.sh
现在安装:
sudo apt install s-nail
在运行前:
sudo nano /etc/s-nail.rc
其内容是添加下面3行到末尾,如果复制的话,去掉个点,本来表示其他内容不变的意思。
. . .
set emptystart
set folder=Maildir
set record=+sent
3行的意思是:
set emptystart:即使收件箱为空也允许客户端打开
set folder = Maildir:将Maildir目录设置为内部文件夹变量
set record = + sent 创建一个已发送的mbox文件,用于将已发送的邮件存储在设置为文件夹变量的任何目录中,在这种情况下为Maildir
通过将字符串传递给s-nail命令来发送电子邮件。 调整命令以将您的Linux用户标记为收件人:
echo 'init' | s-nail -s 'init' -Snorecord sammy
原文说,可能得到如下提示:
Can't canonicalize "/home/sammy/Maildir"
这个是正常的。
我没得到这个提示。
看看 ~/Maildir 建立的情况:
ls -R ~/Maildir
应该如下目录结构:
/home/sammy/Maildir/:
cur new tmp
/home/sammy/Maildir/cur:
/home/sammy/Maildir/new:
1463177269.Vfd01I40e4dM691221.mail.example.com
/home/sammy/Maildir/tmp:
可能需要些时间,还是怎么的,我总是什么也没有,连 Maildir 这个目录也没有。
我也不知道怎么原因,又把前面再做一遍,突然说收到 新邮件,然后看到这个目录了。我猜想是不是需要等待些时间,第一次做也是一样。接收到的时候,有好几个邮件。没有,就重新执行。
执行:
s-nail
有下面输出:
[-- Message 1 -- 14 lines, 369 bytes --]:
From sammy@example.com Tue May 19 15:40:48 2020
Date: Tue, 19 May 2020 15:40:48 +0000
To: sammy@example.com
Subject: init
Message-Id: <20160513220749.A278F228D9@mail.example.com>
From: sammy@example.com
init
可以h 回车,回到列表:
?h
>R 1 sammy@example.com 2020-05-19 15:40 14/392 init
信息有R 标记,读取过来的。
d 回车删除当前邮件
?d
q 回车,退出
?q
下面测试发送一个文件:
先编辑
nano ~/test_message
内容如下:
Hello,
This is a test. Please confirm receipt!
发送邮件的选项:
-s:这定义电子邮件的主题行
-r:对电子邮件的“发件人:”字段的可选更改。 默认情况下,将使用您登录时使用的Linux用户来填充此字段。 -r选项允许您使用有效地址(例如,在/ etc / postfix / virtual文件中定义的地址之一)覆盖此地址。 为了说明,以下命令使用contact@example.com
另外,请确保将user@email.com更改为您有权访问的有效电子邮件地址:
cat ~/test_message | s-nail -s 'Test email subject line' -r contact@example.com user@email.com
现在验证发送情况:
s-nail
看发送了的邮件信息:
? file +sent
应该看到如下类似信息:
+[/home/sammy/Maildir/]sent: 1 message 1 new
▸N 1 contact@example.com 2020-05-19 15:47 12/297 Test email subject line
本文参考学习 How To Install and Configure Postfix on Ubuntu 20.04
介绍完毕。