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