implementation of altermime invocation and filtering for dukun use case

This commit is contained in:
fordprefect
2022-02-13 12:50:00 +01:00
parent cbda9c0dd9
commit 1c5a7a79fe

87
disclaimerfilter.py Executable file
View File

@@ -0,0 +1,87 @@
#!/usr/bin/python
"""
Postfix filter for adding a disclaimer to selected email.
Emails are
License: GPLv3
Author: Georg Schlisio
"""
import subprocess
import sys
import email.parser
# configuration:
# each rule is a tuple of
# 1. the (fragment of) the email address in the To: field
# 2. the absolute path of the disclaimer text file (must be readable for the filter user!)
rules = [
# augustinerkantorei
["chor@augustiner-kantorei.de", "/etc/postfix/mailinglists/disclaimers/augustinerdisclaimer"],
["sopran@augustiner-kantorei.de", "/etc/postfix/mailinglists/disclaimers/augustinerdisclaimer"],
["alt@augustiner-kantorei.de", "/etc/postfix/mailinglists/disclaimers/augustinerdisclaimer"],
["tenor@augustiner-kantorei.de", "/etc/postfix/mailinglists/disclaimers/augustinerdisclaimer"],
["bass@augustiner-kantorei.de", "/etc/postfix/mailinglists/disclaimers/augustinerdisclaimer"],
["mitglied@augustiner-kantorei.de", "/etc/postfix/mailinglists/disclaimers/augustinerdisclaimer"],
["vorstand@augustiner-kantorei.de", "/etc/postfix/mailinglists/disclaimers/augustinerdisclaimer"],
["chorvertreter@augustiner-kantorei.de", "/etc/postfix/mailinglists/disclaimers/augustinerdisclaimer"],
["freunde@augustiner-kantorei.de", "/etc/postfix/mailinglists/disclaimers/augustinerdisclaimer"],
["ehemalig@augustiner-kantorei.de", "/etc/postfix/mailinglists/disclaimers/augustinerdisclaimer"],
["kreativ@augustiner-kantorei.de", "/etc/postfix/mailinglists/disclaimers/augustinerdisclaimer"],
["reise@augustiner-kantorei.de", "/etc/postfix/mailinglists/disclaimers/augustinerdisclaimer"],
["reiseorg@augustiner-kantorei.de", "/etc/postfix/mailinglists/disclaimers/augustinerdisclaimer"],
# nordenrunt
["nordenrunt19@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["sopran.nordenrunt19@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["alt.nordenrunt19@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["tenor.nordenrunt19@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["bass.nordenrunt19@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["nordenrunt21@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["sopran.nordenrunt21@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["alt.nordenrunt21@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["tenor.nordenrunt21@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["bass.nordenrunt21@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["nordenrunt@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["sopran.nordenrunt@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["alt.nordenrunt@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["tenor.nordenrunt@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["bass.nordenrunt@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["undercover.nordenrunt@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
["nordenrunt_animanordica19@dukun.de", "/etc/postfix/mailinglists/disclaimers/nordenruntdisclaimer"],
# greifswalder domchor
["chor@greifswalder-domchor.de", "/etc/postfix/mailinglists/disclaimers/domchordisclaimer"]
]
# DEBUGGING CASE - don't use in production! overwrites above
rules = [["abmelden@augustiner-kantorei.de", "augustinerdisclaimer"]]
# read input and find recipient
mail = "".join(sys.stdin.readlines())
recipient = email.parser.HeaderParser().parsestr(mail)["To"]
for rule, disclaimer in rules:
if recipient.find(rule) >= 0:
# altermime invocation
am = subprocess.run(["/usr/bin/altermime",
"--input=-",
f"--disclaimer={disclaimer}",
"--htmltoo",
"--force-for-bad-html",
],
input=mail.encode(),
capture_output=True
)
# check altermime return code
if am.returncode > 0:
sys.exit(EX_UNAVAILABLE)
# write back result
mail = am.stdout.decode()
# only first matching disclaimer!
break
sendmailprocess = subprocess.Popen(["/usr/bin/sendmail"] + sys.argv[1:], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
sendmailprocess.communicate(input=mail.encode('utf-8'))