Postfix中如何针对特定邮箱地址禁用SMTP中继认证?
Postfix中如何针对特定邮箱地址禁用SMTP中继认证?
我太懂你遇到的这个糟心问题了——明明给me@example.com设置了DUNNO让它直接投递,结果Postfix还是硬要拿着@example.com对应的user1/pass1去碰那些“奇葩”邮件服务商的服务器,属实头疼。
其实问题出在Postfix的匹配优先级上:smtp_sasl_password_maps里的@example.com条目是域级匹配,会覆盖所有该域下的发件人,哪怕你在sender_dependent_relayhost_maps里给单个邮箱设了DUNNO也没用。要解决这个,咱们得给单个邮箱单独指定认证规则:
具体解决步骤:
开启发件人依赖认证
先在Postfix的main.cf配置文件里确保开启这个选项,它允许我们针对不同发件人设置不同的认证策略:smtp_sender_dependent_authentication = yes给目标邮箱添加空认证条目
在你的smtp_sasl_password_maps映射文件里,给me@example.com单独加一个空的认证条目(注意后面留空或者用<>):me@example.com # 也可以写成 me@example.com <> @example.com user1/pass1 @example.net user2/pass2因为Postfix的映射匹配是精确地址优先于域匹配,所以当发件人是
me@example.com时,会优先命中这个空条目。按照文档说明,没有有效username:password的情况下,SMTP客户端就不会尝试认证目标服务器了。重启Postfix让配置生效
最后重启Postfix服务:systemctl restart postfix
这样再用me@example.com发邮件时,Postfix就不会再拿user1/pass1去尝试认证了,完美解决你的问题~
备注:内容来源于stack exchange,提问作者Banyoghurt




