我很难让该canonical_maps
功能正常工作,以修复旧客户端的一些错误地址。以下是目前的情况以及我迄今为止尝试过的方法:
旧客户端 (oldhost.legacy.org) 在通过 SMTP 发送信封或邮件时不会将其域 (legacy.org) 附加到邮件地址。因此,如果用户输入诸如 之类的地址guser@oldhost
,则它会以 SMTP 形式发出,user@oldhost
而不是[email protected]
。
带后缀 ( ) 的机器与旧机器newhost.standard.org
拥有不同的域 ( standard.org
)。它还充当oldhost.legacy.org
域的 MX 和中继。
当来自旧客户端的消息到达带有诸如 guser@oldhost
(missing .legacy.org
) 之类的地址的 postfix 计算机时,我想将其重写为 read [email protected]
。据我了解,canonical_maps 函数就是为此目的而设计的。
我/etc/postfix/canonical.pcre
有:
/^(.*)@oldhost$/ [email protected]
如果我使用以下方式测试: postmap –q
guser@oldhostpcre:/etc/postfix/canonical.pcre
答案是: [email protected]
完美。
我/etc/postfix/main.cf
有
canonical_maps = pcre:/etc/postfix/canonical.pcre
然后,在旧主机上,我发送一条消息,例如:
To: [email protected]
Cc: user@oldhost
邮件到达 Postfix 机器,但 CC 行未被重写。
canonical_maps 的文档说,为了重写标头,客户端需要匹配,local_header_rewrite_clients
否则必须remote_header_rewrite_domain
为非空。我尝试了这两种方法,但都没有产生我需要的输出。
如果我设置local_header_rewrite_clients = static:all
或permit_mynetworks
或其他会导致与旧客户端匹配的选项,则该append_dot_domain
选项将接管并将地址重写为[email protected]
。规范表显然被忽略了。
如果我保留local_header_rewrite_clients
其默认值(与旧客户端不匹配)并打开remote_header_rewrite_domain = invalid.domain
,则地址将被重写为[email protected]
,并且再次,规范表显然被忽略。
因此,规范表的文档是正确的,即只有与local_header_rewrite_clients
客户端匹配或remote_header_rewrite_domain
设置了时才会发生重写。重写确实在发生。但发生的重写完全忽略了规范表。
那么,我如何让后缀仅将append_dot_domain
和append_at_myorigin
应用于其自身,并将规范表应用于其他客户端,或者至少首先应用规范表?