Help us learn about your current experience with the documentation. Take the survey.

配置 Postfix 处理入站邮件

  • 版本:免费版、专业版、旗舰版
  • 产品:GitLab 自管版

本文档将引导您完成在 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 用户发送一封测试邮件:

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

    . 是一个单独一行的句点。

    如果在输入 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 端口的入站流量。

    1. 通过在 SMTP 提示符中输入以下内容,向 incoming 用户发送一封测试邮件:
    ehlo gitlab.example.com
    mail from: root@gitlab.example.com
    rcpt to: incoming@gitlab.example.com
    data
    Subject: Re: Some issue
    
    Sounds good!
    .
    quit

    . 是一个单独一行的句点。

    1. 检查 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
    1. 登出 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.
    1. 通过在 IMAP 提示符中输入以下内容,以 incoming 用户身份登录以测试 IMAP:
    a login incoming PASSWORD

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

    您应该会看到如下输出:

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

完成

如果所有测试都成功通过,说明 Postfix 已完全配置好,可以接收邮件了!请继续阅读入站邮件指南以配置 GitLab。


本文档改编自 https://help.ubuntu.com/community/PostfixBasicSetupHowto,由 Ubuntu 文档 wiki 的贡献者完成。