后缀,虚拟别名和未定义地址的全部内容


8

在Postfix 2.10.2中,我有一个具有多个域和几个虚拟别名的设置,用于将邮件地址分配给本地用户。只要我不添加包包,它就可以正常工作。

在使用虚拟别名之前,我先定义了一个

local_recipient_maps =
luser_relay = catchall

但是由于我需要整理来自不同域的邮件地址,因此不得不使用虚拟别名。

现在,postfix.org说我应该这样做,我这样做了:

/etc/postfix/main.cf:

virtual_alias_domains = example.com
virtual_alias_maps = hash:/etc/postfix/virtual

/ etc / postfix / virtual:

postmaster@example.com account1
info@example.com       account1
sales@example.com      account2
@example.com         catchall

但是,如果这样做,全部接收地址将捕获我的所有邮件,而不只是邮件到未明确定义的地址。为什么会这样,我该如何更改?

我做了虚拟的Postmap,也重新启动了Postfix。日志中没有错误,它只是将交付记录到综合地址。并且有一个警告“不要在mydestination和virtual_alias_domains中都列出域example.com”,但是我没有这样做!我什至没有mydestination指令。(下面的配置中有一个,但是我在NickW建议之后添加了它。)

这是我完整的conf:

alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
config_directory = /etc/postfix
home_mailbox = Maildir/
inet_interfaces = all
inet_protocols = all
mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/dovecot.conf -m "${EXTENSION}"
mailbox_size_limit = 0
mydestination = $myhostname
myhostname = mydomain.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_recipient_restrictions = reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_path = private/dovecot-auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sender_restrictions = reject_unknown_sender_domain
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/dovecot/dovecot.pem
smtpd_tls_key_file = /etc/dovecot/private/dovecot.pem
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_mandatory_protocols = SSLv3, TLSv1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom
virtual_alias_domains = $myhostname, myotherdomain.com
virtual_alias_maps = hash:/etc/postfix/virtual

Answers:


4

如果您在虚拟别名中包含捕获所有电子邮件地址,则它将起作用。

main.cf

 virtual_alias_maps = hash:/etc/postfix/virtual

virtual

user1@example.com           user1@example.com
user2@example.com           user2@example.com
...
catchall@example.com        catchall@example.com
@example.com                catchall@example.com

此解决方案最容易实现,并且可以按预期工作。谢谢!
EdwardTeach 2016年

1
注:最终svirtual_alias_maps
FMCorz

3

所以,我想通了。有人建议,包罗万象必须放在虚拟别名文件的顶部,但是我之前曾尝试过,但没有帮助(尽管我发现该解决方案很合逻辑)。

起作用的是:

  1. 设置mydestination=localhost(不是$myhostname
  2. 在虚拟别名文件的顶部添加内容包: @domain.com catchall-account@localhost
  3. 在下面添加所有其他虚拟别名: contact@domain.com contact@localhost

该示例假定您有名为catchall-account和的UNIX用户contact。发送至contact@domain.com的邮件将发送给联系人用户,而所有其他邮件将发送到全部接收帐户。

也许并非在所有情况下都需要这样做,但是在我的特殊情况下,我想使用一个帐户来保存某些地址的邮件,但是直接发送到该帐户的邮件应该以“全部收集”结尾。

毕竟,Postfix似乎无法正常工作,它是从上到下遍历虚拟别名的方式,此外,包罗万象具有一些特殊的优先级。如果有人能够解释这种行为,我将对进一步的评论感到高兴。


postfix.org/postconf.5.html#virtual_mailbox_maps中,有以下句子:“在查找表中,指定“ @ domain.tld”的左侧以匹配指定域中没有该用户的任何用户特定的“ user@domain.tld”条目。” -我认为它在virtual_alias_maps中相似,因此顺序完全没有区别
Daniel Alder

0

尝试设置your mydestination = $myhostname,并确保在main.cf中配置了主机名,例如myhostname = mail.example.com


那什么都没改变。警告仍然存在,并且消息仍然传递给所有人。
Konzertheld

您介意将其余的main.cf放在问题中吗?
NickW 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.