为接收电子邮件设置 Postfix 所有级别私有化部署
本文档将引导您完成在 Ubuntu 上使用 IMAP 身份验证设置基本 Postfix 邮件服务器的步骤,与接收电子邮件一起使用。
本文假设您使用的电子邮件地址是 incoming@gitlab.example.com
,即主机 gitlab.example.com
上的用户名incoming
。执行示例代码片段时不要忘记将其更改为您的实际主机。
配置服务器防火墙
- 打开服务器上的 25 端口,以便人们可以通过 SMTP 向服务器发送电子邮件。
- 如果邮件服务器与运行极狐GitLab 的服务器不同,请打开服务器上的 143 端口,以便极狐GitLab 可以通过 IMAP 从服务器读取电子邮件。
安装包
-
如果尚未安装
postfix
包,请安装它:sudo apt-get install postfix
当要求选择环境时,选择 “Internet 站点”。当要求确认主机名时,请确保它与
gitlab.example.com
匹配。 -
安装
mailutils
包。sudo apt-get install mailutils
创建用户
-
为接收电子邮件创建用户。
sudo useradd -m -s /bin/bash incoming
-
为此用户设置密码。
sudo passwd incoming
一定不要忘记此密码,后面会用到它。
测试开箱即用的设置
-
连接到本地 SMTP 服务器:
telnet localhost 25
您应该会看到如下提示:
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 gitlab.example.com ESMTP Postfix (Ubuntu)
如果您收到
Connection refused
错误,请验证postfix
是否正在运行:sudo postfix status
如果不是,请启动它:
sudo postfix start
-
通过在 SMTP 提示符中输入以下内容,向新的
incoming
用户发送一封电子邮件来测试 SMTP:ehlo localhost mail from: root@localhost rcpt to: incoming@localhost data Subject: Re: Some issue Sounds good! . quit
.
是单独一行的文字句点。如果您在输入
rcpt to: incoming@localhost
后收到错误,那么您的 Postfixmy_network
配置不正确。该错误将显示 “Temporary lookup failure”。查看配置 Postfix 以接收来自 Internet 的电子邮件。 -
检查
incoming
用户是否收到了电子邮件:su - incoming mail
您应该看到这样的输出:
"/var/mail/incoming": 1 message 1 unread >U 1 root@localhost 59/2842 Re: Some issue
退出邮件应用程序:
q
-
退出
incoming
账户,并恢复为root
:logout
将 Postfix 配置为使用 Maildir 样式的邮箱
Courier(我们稍后安装它以添加 IMAP 身份验证)要求邮箱具有 Maildir 格式,而不是 mbox。
-
将 Postfix 配置为使用 Maildir 样式的邮箱:
sudo postconf -e "home_mailbox = Maildir/"
-
重启 Postfix:
sudo /etc/init.d/postfix restart
-
测试新设置:
- 按照测试开箱即用设置的步骤 1 和 2 进行操作。
-
检查
incoming
用户是否收到了电子邮件:su - incoming MAIL=/home/incoming/Maildir mail
您应该看到这样的输出:
"/home/incoming/Maildir": 1 message 1 unread >U 1 root@localhost 59/2842 Re: Some issue
退出邮件应用程序:
q
如果
mail
返回错误Maildir: Is a directory
,那么您的mail
版本不支持 Maildir 样式的邮箱。通过运行sudo apt-get install heirloom-mailx
来安装heirloom-mailx
。然后,再次尝试上述步骤,将heirloom-mailx
替换为mail
命令。 -
退出
incoming
账户,并恢复为root
:logout
安装 Courier IMAP 服务器
-
安装
courier-imap
包:sudo apt-get install courier-imap
并启动
imapd
:imapd start
-
courier-authdaemon
安装后没有启动。没有它,IMAP 身份验证将失败:sudo service courier-authdaemon start
您还可以将
courier-authdaemon
配置为在启动时启动:sudo systemctl enable courier-authdaemon
配置 Postfix 接收来自 Internet 的电子邮件
-
让 Postfix 知道它应该考虑本地的域:
sudo postconf -e "mydestination = gitlab.example.com, localhost.localdomain, localhost"
-
让 Postfix 知道它应该考虑作为 LAN 一部分的 IP:
假设
192.168.1.0/24
是您的本地 LAN。如果您在同一本地网络中没有其他计算机,则可以安全地跳过此步骤。sudo postconf -e "mynetworks = 127.0.0.0/8, 192.168.1.0/24"
-
配置 Postfix 在所有接口上接收邮件,包括互联网:
sudo postconf -e "inet_interfaces = all"
-
配置 Postfix 以使用
+
分隔符进行子寻址:sudo postconf -e "recipient_delimiter = +"
-
重启 Postfix:
sudo service postfix restart
测试最终设置
-
在新设置下测试 SMTP:
-
连接到 SMTP 服务器:
telnet gitlab.example.com 25
您应该会看到如下提示:
Trying 123.123.123.123... Connected to gitlab.example.com. Escape character is '^]'. 220 gitlab.example.com ESMTP Postfix (Ubuntu)
如果您收到
Connection refused
错误,请确保您的防火墙设置为允许端口 25 上的入站流量。 -
通过在 SMTP 提示符中输入以下内容,向
incoming
用户发送一封电子邮件以测试 SMTP:ehlo gitlab.example.com mail from: root@gitlab.example.com rcpt to: incoming@gitlab.example.com data Subject: Re: Some issue Sounds good! . quit
.
是单独一行的文字句点。 -
检查
incoming
用户是否收到了电子邮件:su - incoming MAIL=/home/incoming/Maildir mail
您应该看到这样的输出:
"/home/incoming/Maildir": 1 message 1 unread >U 1 root@gitlab.example.com 59/2842 Re: Some issue
退出邮件应用程序:
q
-
退出
incoming
账户,并恢复为root
:logout
-
-
在新设置下测试 IMAP:
-
连接到 IMAP 服务器:
telnet gitlab.example.com 143
您应该会看到如下提示:
Trying 123.123.123.123... Connected to mail.gitlab.example.com. Escape character is '^]'. - OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2011 Double Precision, Inc. See COPYING for distribution information.
-
通过在 IMAP 提示符中输入以下内容,以
incoming
用户身份登录以测试 IMAP:a login incoming PASSWORD
将 PASSWORD 替换为您之前在
incoming
用户上设置的密码。您应该看到这样的输出:
a OK LOGIN Ok.
-
断开与 IMAP 服务器的连接:
a logout
-
完成
如果所有测试都成功,则 Postfix 已设置完毕并准备好接收电子邮件!继续使用接收电子邮件指南来配置极狐GitLab。