为入站邮件设置 Postfix

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: 私有化部署

这篇文档将指导你在 Ubuntu 上设置一个带有 IMAP 身份验证的基础 Postfix 邮件服务器,以便用于接收电子邮件

文档假设你正在使用的电子邮件地址为 incoming@gitlab.example.com,即在主机 gitlab.example.com 上的用户名为 incoming。在执行示例代码片段时,不要忘记将其更改为你的实际主机。

配置你的服务器防火墙#

  1. 打开服务器上的端口 25,以便人们可以通过 SMTP 向服务器发送电子邮件。
  2. 如果邮件服务器与运行极狐GitLab 的服务器不同,则打开服务器上的端口 143,以便极狐GitLab 可以通过 IMAP 从服务器读取电子邮件。

安装软件包#

  1. 如果尚未安装 postfix 软件包,请安装它:

    shell
    sudo apt-get install postfix

    当被问及环境时,选择 'Internet Site'。确认主机名时,确保它与 gitlab.example.com 匹配。

  2. 安装 mailutils 软件包。

    shell
    sudo apt-get install mailutils

创建用户#

  1. 为接收电子邮件创建一个用户。

    shell
    sudo useradd -m -s /bin/bash incoming
  2. 为此用户设置密码。

    shell
    sudo passwd incoming

    确保不要忘记这个密码,你稍后会需要它。

测试开箱即用的设置#

  1. 连接到本地 SMTP 服务器:

    shell
    telnet localhost 25

    你应该看到如下提示:

    shell
    Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 gitlab.example.com ESMTP Postfix (Ubuntu)

    如果你收到 Connection refused 错误,请验证 postfix 是否正在运行:

    shell
    sudo postfix status

    如果没有运行,启动它:

    shell
    sudo postfix start
  2. 通过在 SMTP 提示符中输入以下内容,向新 incoming 用户发送一封电子邮件以测试 SMTP:

    plaintext
    1ehlo localhost 2mail from: root@localhost 3rcpt to: incoming@localhost 4data 5Subject: Re: Some issue 6 7Sounds good! 8. 9quit
    `.` 是一个独立行上的实际句号。

    如果在输入 rcpt to: incoming@localhost 后收到错误,则你的 Postfix my_network 配置不正确。错误会显示 'Temporary lookup failure'。参见配置 Postfix 以接收来自互联网的电子邮件

  3. 检查 incoming 用户是否收到了电子邮件:

    shell
    su - incoming mail

    你应该看到如下输出:

    plaintext
    "/var/mail/incoming": 1 message 1 unread >U 1 root@localhost 59/2842 Re: Some issue

    退出邮件应用:

    shell
    q
  4. 登出 incoming 账户,并返回成为 root

    shell
    logout

配置 Postfix 使用 Maildir 风格的邮箱#

我们稍后安装的 Courier 需要邮箱采用 Maildir 格式,而不是 mbox。

  1. 配置 Postfix 使用 Maildir 风格的邮箱:

    shell
    sudo postconf -e "home_mailbox = Maildir/"
  2. 重启 Postfix:

    shell
    sudo /etc/init.d/postfix restart
  3. 测试新的设置:

    1. 按照 测试开箱即用的设置 的步骤 1 和 2。

    2. 检查 incoming 用户是否收到了电子邮件:

      shell
      su - incoming MAIL=/home/incoming/Maildir mail

      你应该看到如下输出:

      plaintext
      "/home/incoming/Maildir": 1 message 1 unread >U 1 root@localhost 59/2842 Re: Some issue

      退出邮件应用:

      shell
      q

    如果 mail 返回错误 Maildir: Is a directory,则你的 mail 版本不支持 Maildir 风格的邮箱。通过运行 sudo apt-get install heirloom-mailx 安装 heirloom-mailx。然后,再次尝试上述步骤,使用 heirloom-mailx 替换 mail 命令。

  4. 登出 incoming 账户,并返回成为 root

    shell
    logout

安装 Courier IMAP 服务器#

  1. 安装 courier-imap 软件包:

    shell
    sudo apt-get install courier-imap

    并启动 imapd

    shell
    imapd start
  2. 安装后不会启动 courier-authdaemon。没有它,IMAP 身份验证会失败:

    shell
    sudo service courier-authdaemon start

    你还可以配置 courier-authdaemon 在启动时启动:

    shell
    sudo systemctl enable courier-authdaemon

配置 Postfix 接收来自互联网的电子邮件#

  1. 让 Postfix 知道它应该认为本地的域:

    shell
    sudo postconf -e "mydestination = gitlab.example.com, localhost.localdomain, localhost"
  2. 让 Postfix 知道它应该认为是局域网的一部分的 IP:

    假设 192.168.1.0/24 是你的本地局域网。如果没有在同一局域网中的其他机器,你可以安全地跳过此步骤。

    shell
    sudo postconf -e "mynetworks = 127.0.0.0/8, 192.168.1.0/24"
  3. 配置 Postfix 在所有接口上接收邮件,包括互联网:

    shell
    sudo postconf -e "inet_interfaces = all"
  4. 配置 Postfix 使用 + 分隔符进行子地址:

    shell
    sudo postconf -e "recipient_delimiter = +"
  5. 重启 Postfix:

    shell
    sudo service postfix restart

测试最终设置#

  1. 在新设置下测试 SMTP:

    1. 连接到 SMTP 服务器:

      shell
      telnet gitlab.example.com 25

      你应该看到如下提示:

      shell
      Trying 123.123.123.123... Connected to gitlab.example.com. Escape character is '^]'. 220 gitlab.example.com ESMTP Postfix (Ubuntu)

      如果你收到 Connection refused 错误,请确保你的防火墙设置允许端口 25 上的入站流量。

    2. 通过在 SMTP 提示符中输入以下内容,向 incoming 用户发送一封电子邮件以测试 SMTP:

      plaintext
      1ehlo gitlab.example.com 2mail from: root@gitlab.example.com 3rcpt to: incoming@gitlab.example.com 4data 5Subject: Re: Some issue 6 7Sounds good! 8. 9quit
      `.` 是一个独立行上的实际句号。
    3. 检查 incoming 用户是否收到了电子邮件:

      shell
      su - incoming MAIL=/home/incoming/Maildir mail

      你应该看到如下输出:

      plaintext
      "/home/incoming/Maildir": 1 message 1 unread >U 1 root@gitlab.example.com 59/2842 Re: Some issue

      退出邮件应用:

      shell
      q
    4. 登出 incoming 账户,并返回成为 root

      shell
      logout
  2. 在新设置下测试 IMAP:

    1. 连接到 IMAP 服务器:

      shell
      telnet gitlab.example.com 143

      你应该看到如下提示:

      shell
      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.
    2. incoming 用户身份登录以测试 IMAP,通过在 IMAP 提示符中输入以下内容:

      plaintext
      a login incoming PASSWORD

      将 PASSWORD 替换为你之前为 incoming 用户设置的密码。

      你应该看到如下输出:

      plaintext
      a OK LOGIN Ok.
    3. 断开与 IMAP 服务器的连接:

      shell
      a logout

完成#

如果所有测试都成功,Postfix 就设置完成并准备好接收电子邮件!继续查看接收电子邮件指南以配置极狐GitLab。