Postfix配置求助:为无主题邮件自动添加默认主题
Postfix配置求助:为无主题邮件自动添加默认主题
嗨,我完全理解你的痛点——手里有没法修改的应用,发邮件居然不带Subject,用Postfix自带的header_checks试了半天,要么给所有邮件都加重复主题,要么只能改已有主题,确实头疼!而且always_add_missing_headers也帮不上忙,因为它只补Date、Message-ID这类必填头,Subject不在列表里对吧?
别担心,这里有两种靠谱的解决方案,根据你的Postfix版本选就行:
方案一:用Postfix 3.0+的条件式header_checks(推荐)
从Postfix 3.0版本开始,header_checks支持直接判断某个头是否存在,完美解决你的需求。
- 先在
main.cf里配置header_checks使用PCRE格式(如果还没配置的话):
header_checks = pcre:/etc/postfix/header_checks.pcre
- 编辑
/etc/postfix/header_checks.pcre文件,添加以下内容:
# 仅当邮件没有Subject头时,添加默认主题 IF ! EXISTS:Subject PREPEND Subject: mail from App1 ENDIF
- 重启Postfix服务让配置生效:
systemctl restart postfix
这个逻辑很直白:先检查邮件头里有没有Subject,如果没有,就自动添加你指定的默认主题,完全不会影响已有主题的邮件。
方案二:旧版本Postfix用外部脚本配合check_policy_service
如果你的Postfix版本低于3.0,不支持条件式header_checks,可以用外部脚本实现这个逻辑:
- 写一个简单的Python脚本(比如
/usr/local/bin/add_default_subject.py),功能是检查邮件头里的Subject,不存在就添加:
#!/usr/bin/env python3 import sys import email def main(): msg = email.message_from_file(sys.stdin) if not 'Subject' in msg: msg['Subject'] = 'mail from App1' msg.write(sys.stdout) if __name__ == '__main__': main()
- 给脚本加执行权限:
chmod +x /usr/local/bin/add_default_subject.py
- 在
main.cf里添加check_policy_service配置,让Postfix在处理邮件时调用这个脚本:
smtpd_data_restrictions = check_policy_service unix:private/add_default_subject
- 在
master.cf里添加对应的服务定义:
add_default_subject unix - n n - - spawn user=nobody argv=/usr/local/bin/add_default_subject.py
- 重启Postfix服务生效。
另外补充一下你之前的疑问:你之前用的header_checks写法确实只能针对所有邮件或者已有Subject的邮件,因为它默认是逐行匹配头,没法直接判断“某个头不存在”,但Postfix 3.0+的条件判断正好补上了这个缺口。
备注:内容来源于stack exchange,提问作者Martin Perzl
相关产品推荐
相关产品推荐

