解释postfix$virtual_mailbox_maps参数值的user@domain格式

解释postfix$virtual_mailbox_maps参数值的user@domain格式

我正在尝试使用这个设置邮件服务器 文章. 基本上使用 postfix 和 dovecot。

我有一个可以运行的测试设置,但是我不明白其中的一些东西(很多),并且试图在迁移之前纠正它。

在众多的事情中,这是最令人困惑的:我不明白 $virtual_mailbox_maps 的第二个参数部分是如何工作的。

我在 main.cf 中有以下内容:

virtual_mailbox_maps = hash:/etc/postfix/virtual-mailbox-users

我的 /etc/postfix/virtual-mailbox-users 看起来像

[email protected]    [email protected]
[email protected]    [email protected]
etc, etc.

首先,在哪里可以找到第二个参数的文档[电子邮件保护] 格式,大多数格式都是文件或目录的形式(如/a/b/c)。

如果我用其他东西替换第二个参数,例如,

[email protected]    /tmp/foo

然后我可以发送邮件到[电子邮件保护],但不是来自,这导致:

我的第二个问题是:SMTP 是否使用 $virtual_mailbox_maps?(为什么,因为它已经将电子邮件地址作为关键参数?)。dovecot 是否使用 $virtual_mailbox_maps?

(我还有很多问题,但这可能有助于我解决一些问题。例如,我可以将发往 user@domain*.com 的所有邮件发送到其中一个邮箱吗?[电子邮件保护]?)

(请原谅标题的陈述性质,我原来的标题是以“如何”开头的,但被拒绝了。)


我做了一个实验,我用例如替换了$virtual_mailbox_maps条目,[email protected] OK并且投递成功,但发送电子邮件失败(发件人地址被拒绝:不属于用户)。因此,右侧(值)很重要。这就是我的第一个问题。(我已阅读描述格式等的各种文档,但找不到任何专门讨论与 SMTP 交互的内容。

附录:感谢@masegaloeh 追踪到这个问题。相关配置如下,smtpd_sender_login_maps其余部分可以通过“谷歌搜索”来解释。

root@generic:/etc/postfix# postconf -n| grep smtpd_sender
smtpd_sender_login_maps = $virtual_mailbox_maps
smtpd_sender_restrictions = reject_unknown_sender_domain, reject_sender_login_mismatch

答案1

当postfix接收邮件的时候,基本上可以分为三个过程:

  1. 通过与发件人邮件服务器进行 SMTP 交易来接收电子邮件并应用 SMTP 限制,例如:检查收件人是否存在
  2. 通过将电子邮件发送到其中一个投递代理(dovecot、本地、虚拟)来存储电子邮件

根据以上两个过程,参数虚拟邮箱映射具有(至少)两个功能:

  1. 作为 Postfix 接收电子邮件时的收件人验证,以便 Postfix 可以拒绝不存在的收件人。此检查是在以下情况下执行的:reject_unauth_destination叫。
  2. 参数虚拟(8)投递代理查找邮箱的位置。参数$virtual_mailbox_base无条件地附加到此路径之前,因此 maildir 存储的绝对路径为$virtual_mailbox_base$virtual_mailbox_maps

第二个功能仅当您将 postfix 配置为将电子邮件发送到投递代理时才可用virtual。根据您上面发布的教程,postfix 将改用dovecot投递代理virtual

virtual_transport = dovecot

因为它是多夫科特-lda谁来发送邮件,则virtual_mailbox_maps在此阶段(存储邮件)未使用。dovecot 将使用此参数,而不是 postfix 配置

mail_location = maildir:/var/mail/vmail/%d/%n/mail:LAYOUT=fs

确定电子邮件的存储位置。


哪里有记录说 $virtual_mailbox_maps 文件的格式是“地址地址”第二个必须与第一个匹配,SMTP 才能正常工作(笔记:这是基于我的经验观察)?

参数virtual_mailbox_maps必须由一个或多个查找表。。所有 Postfix 查找表都以 (键,值) 对的形式存储信息。因此,该virtual_mailbox_maps文件由两列组成:左侧为键,右侧为值。

大多数 Postfix 查找表用于查找信息。例如,虚拟投递代理用于virtual_mailbox_maps查找收件人邮箱的路径。因此,哈希表的右侧必须指定路径。

然而,有些桌子Postfix 只需要知道查找键是否存在任何非空的查找结果此处可以使用值:不使用查找结果。例如,smtpd 用于virtual_mailbox_maps检查收件人是否存在。

因此实际上您可以将任何条目放在右侧,virtual_mailbox_maps因为后缀不会使用它。在这种情况下没有像“地址地址”这样的格式。


当我用$virtual_mailbox_maps以下方式替换条目时,例如[电子邮件保护]好的,传送成功,但发送电子邮件失败(发件人地址被拒绝:不属于用户

这是因为你在main.cf

smtpd_sender_restrictions = reject_unknown_sender_domain,
    reject_sender_login_mismatch
smtpd_sender_login_maps = $virtual_mailbox_maps

当你有reject_sender_login_mismatchsmtpd_sender_login_mapspostfix 将检查您的 SASL 用户名映射到您发送电子邮件时提供的发件人。因此格式smtpd_sender_login_maps = $virtual_mailbox_maps必须包括:

[email protected]   [email protected]

就你的情况来说,[电子邮件保护]= [电子邮件保护],这就是为什么你需要在你的 中输入“地址地址” $virtual_mailbox_maps

当然,您可以使用 提供smtpd_sender_login_maps不同的表格virtual_mailbox_maps。但本文作者决定将它们统一起来。原因可能是您只需要更改一个文件即可添加/删除有效的收件人

相关内容