如何配置 postfix 将本地邮件发送到另一台本地服务器?

sta*_*fry 2 postfix procmail cyrus

我有一对主要由 Postfix、Procmail 和 Cyrus-IMAP 组成的邮件服务器,它们都可以正常工作。IMAP 服务器配置为简单的主/副本对。所有“普通”邮件都被 master 的 Postfix 接受,后者通过 Procmail 处理它以传送到运行在同一服务器上的 Cyrus-IMAP。两台服务器都能够像这样运行,但只有主服务器实际接收外部电子邮件。

目前,任一盒子上的本地帐户通过其本地 Postfix 发送邮件(例如,由 cron 作业生成),该 Postfix 在本地传送到同一盒子上的 Cyrus-IMAP。

但是,Cyrus 的复制不喜欢直接在副本上发生更改,因此我更希望副本将其本地邮件传递给主服务器。

我看到了实现这一目标的两种方法:

  • 更改副本的本地传输以将邮件传送到主服务器上的 Postfix

或者

  • 更改副本的 procmail 以将邮件传送到主服务器上的 Cyrus-IMAP。

还有第三种方法是让副本服务器将所有内容中继到主服务器(即内部和外部电子邮件),但这似乎有些不必要。我不需要更改外部邮件的处理方式 - 任何一个盒子都可以通过其本地 Postfix 发送外部电子邮件,然后将其转发到外部。

我真正想做的只是更改副本上处理内部电子邮件的方式,以便将它们传递给主服务器,或者传递到 Postfix 或传递到那里的 IMAP 服务器。

我在 postfix 的 master.cf 中的本地传输的现有、工作和配置:

procmail-local  unix  -       n       n       -       -       pipe
    flags=OR user=cyrus argv=/usr/bin/procmail -t -m RECIPIENT=${mailbox}
    SENDER=${sender} EXTENSION=${extension} /etc/procmailrc
Run Code Online (Sandbox Code Playgroud)

procmailrc 中向 Cyrus 交付的现有、工作和配置:

DELIVERMAIL="/usr/lib/cyrus/bin/deliver -r $SENDER -a $RECIPIENT $RECIPIENT
Run Code Online (Sandbox Code Playgroud)

Jen*_*y D 6

我还是会更早这样做 - 通过从 中删除您的域名mydestination,该域的邮件应该被传送到您的域中列为 MX 的服务器。如果要指定服务器,而不是使用 MX,则应/path/to/postfix/etc/transport为此使用该文件。该文件应如下所示:

# all mails to our own domain should go to our main incoming server
ourdomain.com    smtp:[mainserver.ourdomain.com]
Run Code Online (Sandbox Code Playgroud)

请注意,[]标记很重要 - 没有它们,您的服务器仍将查找 mainserver.ourdomain.com 的 MX 记录。

编辑完文件后,使用命令 postmap /path/to/postfix/etc/transport

您还需要通过编辑/path/to/postfix/etc/main.cf以下行来确保 postfix 知道使用该文件:

transport_maps = hash:/path/to/postfix/etc/transport
Run Code Online (Sandbox Code Playgroud)

如果您的系统使用 db 文件。如果它使用 dbm 文件,则该行应该是

transport_maps = dbm:/path/to/postfix/etc/transport
Run Code Online (Sandbox Code Playgroud)

  • 我已经深入了解名称解析问题。Postfix 如何解析 smtp 主机名由 main.cf `smtp_host_lookup` 定义,并且默认仅使用 dns。通过将其明确配置为 `smtp_host_lookup = dns,native`,Postfix 将使用本地机制(由 `/etc/nsswitch.conf` 定义,通常使用 `/etc/hosts`)。所以 - 问题解决了:) (2认同)