{{< details >}}

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

{{< /details >}}

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

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

配置你的服务器防火墙

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

安装软件包

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

    sudo apt-get install postfix
    

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

  2. 安装 mailutils 软件包。

    sudo apt-get install mailutils
    

创建用户

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

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

    sudo passwd incoming
    

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

测试开箱即用的设置

  1. 连接到本地 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
    
  2. 通过在 SMTP 提示符中输入以下内容,向新 incoming 用户发送一封电子邮件以测试 SMTP:

    ehlo localhost
    mail from: root@localhost
    rcpt to: incoming@localhost
    data
    Subject: Re: Some issue
    
    Sounds good!
    .
    quit
    

    {{< alert type=”note” >}}

    . 是一个独立行上的实际句号。

    {{< /alert >}}

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

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

    su - incoming
    mail
    

    你应该看到如下输出:

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

    退出邮件应用:

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

    logout
    

配置 Postfix 使用 Maildir 风格的邮箱

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

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

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

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

    1. 按照 测试开箱即用的设置 的步骤 1 和 2。
    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 命令。

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

    logout
    

安装 Courier IMAP 服务器

  1. 安装 courier-imap 软件包:

    sudo apt-get install courier-imap
    

    并启动 imapd

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

    sudo service courier-authdaemon start
    

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

    sudo systemctl enable courier-authdaemon
    

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

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

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

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

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

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

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

    sudo service postfix restart
    

测试最终设置

  1. 在新设置下测试 SMTP:

    1. 连接到 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 上的入站流量。

    2. 通过在 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
      

      {{< alert type=”note” >}}

      . 是一个独立行上的实际句号。

      {{< /alert >}}

    3. 检查 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
      
    4. 登出 incoming 账户,并返回成为 root

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

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

      a login incoming PASSWORD
      

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

      你应该看到如下输出:

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

      a logout
      

完成

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