是否可以在 smtp_sasl_password_maps 中针对特定地址禁用中继身份验证?

是否可以在 smtp_sasl_password_maps 中针对特定地址禁用中继身份验证?

有些电子邮件托管商很混蛋。无论你的黑名单状态如何,SPK、DKIM 或 DMARC,他们都会屏蔽你的电子邮件。

为了解决这个问题,我使用 设置了一个中继sender_dependent_relayhost_maps。我们的中继上有多个具有不同用户名/密码的域。例如,以下是 上的两个域smtp_sasl_password_maps

@example.com user1/pass1
@example.net user2/pass2

现在,因为我想与那些糟糕的电子邮件主机合作来解决这个问题,所以我添加了自己的电子邮件,如下所示sender_dependent_relayhost_maps

[email protected] DUNNO
example.com relay
example.net relay

一般来说,这是可行的,但是当我使用发送电子邮件时[email protected],postfix 会尝试使用 user1/pass1 与非中继服务器进行身份验证。

文档说:

如果未找到用户名:密码条目,则 Postfix SMTP 客户端将不会尝试向远程主机进行身份验证。

有没有其他方法可以禁用身份验证?

答案1

文档是正确的,但你的问题是@example.com匹配[email protected]。我认为你不能简单地添加一行空的用户名和密码,因为查找表应该是具有非空值的键值对——即使表本质上是一个列表

但是,对于某些表,Postfix 只需要知道查找键是否存在。这里可以使用任何非空的查找结果值:不使用查找结果。

然而,这hash:并不是唯一的Postfix 查找表类型regexp:。您可以使用类型查找表来实现您想要的效果,而不是:

smtp_sasl_password_maps = regexp:/etc/postfix/smtp_sasl_password_maps

然后使用常用表达在文件中记录REGEXP_TABLE(5)

if !/^me@example\.com$/
/@example\.com$/ user1:pass1
endif

/@example\.net$/ user2:pass2

最后,测试一下postmap -q

$ /usr/sbin/postmap -q "[email protected]" regexp:./smtp_sasl_password_maps 
user1:pass1
$ /usr/sbin/postmap -q "[email protected]" regexp:./smtp_sasl_password_maps 
user2:pass2
$ /usr/sbin/postmap -q "[email protected]" regexp:./smtp_sasl_password_maps
$

相关内容