implementation of altermime invocation and filtering for dukun use case
This commit is contained in:
87
disclaimerfilter.py
Executable file
87
disclaimerfilter.py
Executable 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'))
|
||||
Reference in New Issue
Block a user