我正在尝试使用这篇文章设置邮件服务器。 基本上使用postfix&dovecot。
我有一个testing设置工作,但我不明白一些(很多)的东西,并正在尝试纠正之前迁移。
在许多事情中,这是最令人困惑的:我不明白$ 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.
首先,我在哪里可以find第二个参数[email protected]格式的文档,大多数格式都是文件或目录的forms(如in / a / b / c)。
如果我用别的东西replace第二个参数,例如,
[email protected] /tmp/foo
那么我可以发送邮件到[email protected],但不能从,这导致:
我的第二个问题是SMTP使用$ virtual_mailbox_maps? (为什么,因为它已经有了电子邮件地址作为关键参数?)。 dovecot是否使用$ virtual_mailbox_maps?
(我有更多的问题,但是这可能会帮我解开一些问题,例如,我可以把所有的邮件发送到user@domain*.com发送到其中一个邮箱,比如[email protected]?)
(不好意思,这个名字的说明性质,我的原文是从'How to'开始的,但是被拒绝了。)
我做了一个实验,我用$ user_domain1.com代替了$ virtual_mailbox_maps条目,并且发送工作正常,但发送邮件失败( 发件人地址被拒绝:不是用户所有 )。 所以,右边(价值)很重要。 这是我的第一个问题。 (我已经阅读了描述格式等的各种文件,但却没有find具体谈到与SMTP交互的内容。
附录 :感谢@masegaloeh的跟踪。 相关的configuration如下,'googling'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
当postfix收到来电时,基本上可以分为三个过程:
基于上述两个过程,参数virtual_mailbox_maps具有(至less)两个函数:
reject_unauth_destination
被调用的时候执行的。 $virtual_mailbox_base
被无条件地添加到这个path中,所以maildir存储的绝对path是$virtual_mailbox_base$virtual_mailbox_maps
。 第二个函数只有在你configurationpostfix发送邮件到virtual
传送代理时才能使用。 根据您在上面发布的教程,postfix将使用dovecot
交付代理而不是virtual
。
virtual_transport = dovecot
因为dovecot-lda提供邮件,所以virtual_mailbox_maps
在这个阶段没有被使用(存储邮件)。 dovecot将使用这个参数代替postfixconfiguration
mail_location = maildir:/var/mail/vmail/%d/%n/mail:LAYOUT=fs
确定在哪里存储电子邮件。
它在什么地方logging下来,$ virtual_mailbox_maps文件的格式是“地址”,第二个必须与第一个匹配以使SMTP工作( 注意 :这是基于我的经验观察)?
参数virtual_mailbox_maps
必须由一个或多个查找表组成 。 。 所有Postfix查找表将信息存储为(键,值)对。 所以这就是为什么virtual_mailbox_maps
文件由两列组成:左侧是键,右侧是键值。
大多数Postfix查找表用于查找信息。 例如,虚拟传送代理使用virtual_mailbox_maps
来查找收件人邮箱的path。 所以你的散列表的右侧必须指定path。
但是有了一些表格, Postfix只有在查找关键字存在的情况下才需要知道 。 在这里可以使用任何非空的查找结果值:不使用查找结果。 例如,smtpd使用virtual_mailbox_maps
来检查收件人是否存在。
所以实际上你可以把任何条目放在virtual_mailbox_maps
右边,因为postfix不会使用它。 在这种情况下,没有像“地址”这样的格式。
当我更换
$virtual_mailbox_maps
条目,例如,[email protected]确定,并交付工作,但发送电子邮件失败(与发件人地址拒绝:不是由用户拥有 )
这是因为你在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]
在你的情况下,[email protected] = [email protected],这就是为什么你需要把“地址”放在你的$virtual_mailbox_maps
。
当然,您可以使用virtual_mailbox_maps
为不同的表提供smtpd_sender_login_maps
。 但文章作者决定统一它们。 也许原因是你只需要改变一个文件来添加/删除有效的收件人