在 Postfix+Dovecot 中将两个域中一个用户的电子邮件发送到一个邮箱中

在 Postfix+Dovecot 中将两个域中一个用户的电子邮件发送到一个邮箱中

我正在 RHEL7 上使用 Postfix+Dovecot 设置邮件服务器。虽然这不是必需的,但我希望将其设置为邮件服务器能够托管多个域。

出现的问题是我有两个完全同义的域名:过去某个时候引入了一个替代名称,以节省用户的几次击键。所有使用一个域名的电子邮件也使用另一个域名。我希望发送到这两个域名的电子邮件能够发送到同一个邮箱。我想避免将地址硬改写为一种拼写:如果用户从包含长域名的地址发送电子邮件,则电子邮件在交付时应该显示为长域名,较短的电子邮件地址也是如此。

  1. Postfix 配置为将邮件转发到这两个域

    # in /etc/postfix/main.cf
    relay_domains = hash:/etc/postfix/relay_domains
    
    # in /etc/postfix/relay_domains
    my-long-named-domain.com   lmtp:unix:private/lmtp-dovecot
    mydomain.com               lmtp:unix:private/lmtp-dovecot
    
  2. Postfix 通过 Dovecot SASL 将身份验证外包给 Dovecot

    身份验证和邮件传递适用于短登录[email protected],而长登录会失败[email protected]并抛出一条消息User does not exist。我猜这是因为路径而发生的,这在 3 和 4 中进行了解释。

  3. Dovecot 使用 passwd-file 机制来表示userdbpassdb,其中%d文件路径中使用来区分域。

    # in /etc/dovecot/conf.d/auth-passwdfile.conf.ext
    passdb {
        driver = passwd-file
        args = scheme=CRYPT username_format=%n /etc/dovecot/%d/users
    }
    
    userdb {
        driver = passwd-file
        args = username_format=%n /etc/dovecot/%d/users
        default_fields = uid=vmail gid=vmail
    }
    

    用户文件仅位于短域名下:/etc/dovecot/mydomain.com/users

  4. mail_location参数还使用%d

    mail_location = maildir:/var/vmail/%Ld/%Ln/Maildir
    

问题:有没有办法将长域名映射到短域名,并且只针对这一对特定域名执行此操作?我希望这两个域名的所有邮件都发送到短域名的邮箱mydomain.com

   /var/vmail/mydomain.com/user1/Maildir
   /var/vmail/mydomain.com/user2/Maildir
   /var/vmail/mydomain.com/user3/Maildir

应该在 Postfix 还是 Dovecot 中完成?

我知道我可以创建软/硬链接来确保两个目录都存在,但我不喜欢这个解决方案(绝对!)。

一般来说,解决这个问题的正确方法是什么?我对邮件服务器还不太熟悉。

谢谢

答案1

除了使用之外,relay_domains您还可以使用virtual_alias_domains&virtual_alias_maps将长格式指向短格式:

@my-long-named-domain.com       @mydomain.com

你可以阅读虚拟(5)以获取更多信息,或者有大量关于在 Postfix 中使用虚拟别名的细节的操作指南。

如果虚拟(5)对于第一道菜来说太密集,这里有一个切中要点的内容:https://www.mind-it.info/2013/10/23/setting-virtual-alias-domains-correctly-postfix/

相关内容