我正在尝试使用本文设置邮件服务器 。基本上使用 postfix 和 dovecot。
我有一个有效的测试设置,但我不明白一些(很多)内容,并试图在迁移之前纠正它。
在许多事情中,这是最令人困惑的:我不明白 $virtual_mailbox_maps 的第二个参数部分是如何工作的。
我在 main.cf 中有以下内容:
virtual_mailbox_maps = hash:/etc/postfix/virtual-mailbox-users
Run Code Online (Sandbox Code Playgroud)
我的 /etc/postfix/virtual-mailbox-users 看起来像
user@domain1.com user@domain1.com
user@domain2.com user@domain2.com
etc, etc.
Run Code Online (Sandbox Code Playgroud)
首先,在哪里可以找到第二个参数user@domain1.com格式的文档,大多数格式都是文件或目录的形式(如/a/b/c)。
如果我用其他参数替换第二个参数,例如,
user@domain1.com /tmp/foo
Run Code Online (Sandbox Code Playgroud)
然后我可以将邮件发送到 user@domain1.com,但不能发送邮件,这会导致:
我的第二个问题: SMTP 使用 $virtual_mailbox_maps 吗?(为什么,因为它已经将电子邮件地址作为关键参数?)。dovecot 是否使用 $virtual_mailbox_maps?
(我还有很多问题,但这可能会帮助我解决一些问题。例如,我可以将所有发送到 user@domain*.com 的邮件发送到其中一个邮箱,例如 user@domain1.com 吗?)
(请原谅标题的声明性,我的原作以“如何”开头,但被拒绝了。)
我做了一个实验,我将 $virtual_mailbox_maps 条目替换为 ,并且user@domain1.com OK
发送成功,但发送电子邮件失败(发件人地址被拒绝:不属于用户)。因此,右侧(值)很重要。这就是我的第一个问题。(我已经阅读了描述格式等的各种文档,但找不到任何专门讨论与 SMTP 交互的内容。
附录:感谢@masegaloeh 追踪此问题。相关配置如下,smtpd_sender_login_maps
剩下的“google”解释了。
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
Run Code Online (Sandbox Code Playgroud)
postfix接收邮件时,基本上可以分为三个过程:
\n\n基于上面的两个过程,参数virtual_mailbox_maps(至少)有两个功能:
\n\nreject_unauth_destination
调用时执行的。$virtual_mailbox_base
无条件地添加到该路径之前,因此 maildir 存储的绝对路径为$virtual_mailbox_base$virtual_mailbox_maps
。仅当您配置 postfix 将电子邮件发送给virtual
递送代理时,才可以使用第二个函数。根据您上面发布的教程,postfix 将dovecot
改为使用交付代理virtual
。
virtual_transport = dovecot\n
Run Code Online (Sandbox Code Playgroud)\n\n因为是dovecot-lda发送电子邮件,所以virtual_mailbox_maps
在此阶段未使用(存储电子邮件)。dovecot 将使用此参数,而不是 postfix 配置
mail_location = maildir:/var/mail/vmail/%d/%n/mail:LAYOUT=fs\n
Run Code Online (Sandbox Code Playgroud)\n\n确定电子邮件的存储位置。
\n\n\n\n\n在哪里记录 $virtual_mailbox_maps 文件的格式是“地址地址”,并且第二个必须与第一个匹配才能使 SMTP 工作(注意:这是基于我的经验观察)?
\n
参数必须由一个或多个查找表virtual_mailbox_maps
组成。\n。所有 Postfix 查找表都将信息存储为(键,值)对。这就是文件由两列组成的原因:左侧用于键,右侧用于值。virtual_mailbox_maps
大多数Postfix查找表用于查找信息。\xc2\xa0例如,虚拟投递代理用于virtual_mailbox_maps
查找收件人邮箱的路径。所以哈希表的右侧必须指定路径。
然而,对于某些表,Postfix 仅需要知道查找键是否存在\n。此处可以使用任何非空查找结果值:不使用查找结果。\xc2\xa0例如,smtpd 用于virtual_mailbox_maps
检查收件人是否存在。
所以实际上你可以将任何条目放在右侧,virtual_mailbox_maps
因为后缀不会使用它。在这种情况下,没有像“地址地址”这样的格式。
\n\n\n当我将
\n$virtual_mailbox_maps
条目替换为 user@domain1.com 时,正常,并且发送成功,但发送电子邮件失败(发件人地址被拒绝:不属于 user)
那是因为你有这个参数main.cf
smtpd_sender_restrictions = reject_unknown_sender_domain,\n reject_sender_login_mismatch\nsmtpd_sender_login_maps = $virtual_mailbox_maps\n
Run Code Online (Sandbox Code Playgroud)\n\n当您拥有reject_sender_login_mismatch
和smtpd_sender_login_maps
后,postfix 将检查您的 SASL 用户名是否映射到您发送电子邮件时提供的发件人。所以 的格式smtpd_sender_login_maps = $virtual_mailbox_maps
必须包括:
my.real.email@example.com my.sasl.username@example.com\n
Run Code Online (Sandbox Code Playgroud)\n\n在您的情况下,my.real.email@example.com = my.sasl.username@example.com,这就是您需要将“地址地址”放入$virtual_mailbox_maps
.
当然你可以提供smtpd_sender_login_maps
不同的表virtual_mailbox_maps
。但文章作者决定将它们统一起来。也许原因是您只需要更改一个文件即可添加/删除有效收件人
归档时间: |
|
查看次数: |
2840 次 |
最近记录: |