我正在尝试使用这个设置邮件服务器 文章. 基本上使用 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接收邮件的时候,基本上可以分为三个过程:
- 通过与发件人邮件服务器进行 SMTP 交易来接收电子邮件并应用 SMTP 限制,例如:检查收件人是否存在
- 通过将电子邮件发送到其中一个投递代理(dovecot、本地、虚拟)来存储电子邮件
根据以上两个过程,参数虚拟邮箱映射具有(至少)两个功能:
- 作为 Postfix 接收电子邮件时的收件人验证,以便 Postfix 可以拒绝不存在的收件人。此检查是在以下情况下执行的:
reject_unauth_destination
叫。 - 参数虚拟(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_mismatch
和smtpd_sender_login_maps
postfix 将检查您的 SASL 用户名映射到您发送电子邮件时提供的发件人。因此格式smtpd_sender_login_maps = $virtual_mailbox_maps
必须包括:
[email protected] [email protected]
就你的情况来说,[电子邮件保护]= [电子邮件保护],这就是为什么你需要在你的 中输入“地址地址” $virtual_mailbox_maps
。
当然,您可以使用 提供smtpd_sender_login_maps
不同的表格virtual_mailbox_maps
。但本文作者决定将它们统一起来。原因可能是您只需要更改一个文件即可添加/删除有效的收件人