You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 routers
    
  • 3. 路由匹配测试验证
    改完配置后无需发邮件测试,直接用exim自带的地址测试工具验证规则是否生效:

    exim -bt dreamcatcher@foo.com
    

    规则生效的情况下会直接返回:fail: Suspended account的失败提示,否则会显示匹配到的路由和投递传输器。

内容的提问来源于stack exchange,提问作者sherin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:06:03