Exim 停用账户检查路由未触发投递失败问题排查求助
Exim停用账户检测路由不生效排查
根因与修复方案
1. 条件表达式逻辑反转(最高概率)
你当前配置的condition表达式逻辑完全写反了:condition = ${if eq{${perl{is_suspended}{$domain_data}{$local_part}}}{yes}{no}}Exim的
${if}语法规则为${if 比较条件 {匹配返回值} {不匹配返回值}},你现在的配置会在perl函数返回yes(账户已停用)时,给condition返回no,直接跳过当前路由,自然不会触发失败规则。
修复方法直接调换返回值即可:condition = ${if eq{${perl{is_suspended}{$domain_data}{$local_part}}}{yes}{yes}{no}}因为你的perl函数本身就返回yes/no,也可以直接简化为:
condition = ${perl{is_suspended}{$domain_data}{$local_part}}2. 路由顺序配置错误
Exim的路由是按配置文件中的先后顺序匹配执行的,你必须将suspendedcheck路由放在localuser路由之前。如果顺序颠倒,邮件会先匹配到localuser路由直接走dovecot投递,根本不会执行停用检查。
可以执行以下命令查看当前生效的路由顺序,确认suspendedcheck排在localuser前面:exim -bP routers3. 路由匹配测试验证
改完配置后无需发邮件测试,直接用exim自带的地址测试工具验证规则是否生效:exim -bt dreamcatcher@foo.com规则生效的情况下会直接返回
:fail: Suspended account的失败提示,否则会显示匹配到的路由和投递传输器。
内容的提问来源于stack exchange,提问作者sherin
相关产品推荐
相关产品推荐

