如何配置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
相关产品推荐
相关产品推荐

