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

如何配置clamassassin将X-Virus-*头信息前置而非追加?

如何配置clamassassin将X-Virus-*头信息前置而非追加?

嘿,这个问题问到点子上了!确实,RFC 5322明确建议邮件传输或转换时不要随意重排头信息,尤其是追踪类、重发类的头字段应该以块的形式前置到邮件最前面,spamassassin就是这么做的,但clamassassin默认偏偏是把X-Virus-*头追加在现有头的末尾,这就有点不符合规范了。

先给你说下为什么clamassassin默认不这么干——其实就是早期设计的小细节,可能当时没考虑到和spamassassin对齐,或者是为了兼容某些老旧的邮件处理工作流,但咱们完全可以通过procmail的小技巧来改这个行为,不用额外装工具,用自带的formail就行。

你原来的procmailrc里是直接用管道调用clamassassin,咱们把这部分规则改一改,就能让X-Virus-*头前置:

# 先让clamassassin处理邮件,同时保留它的退出状态码(方便后续规则判断)
:0fwB
| (clamassassin; exit ${PIPESTATUS[0]})

# 用formail把clamassassin生成的X-Virus头抽出来,前置到现有头的最前面
:0fhw
| formail -I "" -f -X X-Virus-Status: -X X-Virus-Checker-Version:

给你拆解下这两行规则的作用:

  • 第一行的B标记是让procmail把整个邮件(头+正文)都传给clamassassin处理,括号里的命令是为了保留clamassassin的原始退出状态,这样如果clamassassin检测到病毒或者出错,后续的procmail规则能正确响应。
  • 第二行的h标记指定只处理邮件头,formail的参数是关键:
    • -I "" 先清空临时头缓冲区,准备重新构建头信息
    • -f 确保原始的From头不会被修改
    • -X X-Virus-Status: 和 -X X-Virus-Checker-Version: 专门提取clamassassin生成的这两个头字段
    • 最后formail会把提取到的X-Virus头放在最顶部,再拼接上原来的其他邮件头,这样就实现了前置效果

改完之后,再配合你原来的spamassassin规则,这两个工具生成的X-*头就都会乖乖出现在邮件头的最上方,和你预期的位置一致啦。

备注:内容来源于stack exchange,提问作者Esa Jokinen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 13:34:38