tools/feedwrapper.py (40 lines of code) (raw):

#!/usr/bin/env python3 # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """ This is feedwrapper - a mailing list auto-subscriber and/or feed passthrough program. Activate it by adding "|/usr/bin/env python3 /path/to/ponymail/tools/feedwrapper.py localuser@thisdomain.abc" Then subscribe to lists by running: python3 feedwrapper sub localuser@thisdomain.abc ml-subscribe@mldomain.foo" """ import sys, re, os, email, smtplib from subprocess import Popen, PIPE path = os.path.dirname(os.path.realpath(__file__)) if __name__ == '__main__': if len(sys.argv) <= 1: print("Usage: feedwrapper [recipient email] OR") print(" feedwrapper sub [recipient] [ML-subscribe-address]") sys.exit(0) if sys.argv[1] == "sub": sender = sys.argv[2] recip = sys.argv[3] smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, [recip], """From: %s To: %s Subject: subscribe subscribe """ % (sender, recip) ) print("Sent subscription request for %s to %s" % (sender, recip)) else: msg = email.message_from_file(sys.stdin) if msg.get('to') and msg.get('reply-to') and msg.get('subject'): if msg.get('to').find(sys.argv[1]) != -1 and \ re.search(r"-request@", msg.get('reply-to')) or \ (\ re.match(r"confirm subscribe to", msg.get('subject'), flags=re.IGNORECASE) and \ re.search(r"-sc\.", msg.get('reply-to')) \ ): with open("%s/wrapper.log" % path, "a") as f: f.write("%s - %s: %s\n" % (msg.get('to'), msg.get('reply-to'), msg.get('subject'))) f.write("We've got a subscription request for %s. \n" % msg.get('reply-to')) smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sys.argv[1], [msg.get('reply-to')], """From: %s To: %s Subject: %s %s """ % (sys.argv[1], msg.get('reply-to'), msg.get('subject'), msg.get('subject')) ) else: with open("%s/wrapper.log" % path, "a") as f: f.write("Got an email for %s\n" % (msg.get('list-id') or "??")) f.write("%s - %s: %s\n" % (msg.get('to'), msg.get('reply-to'), msg.get('subject'))) p = Popen("/usr/bin/python3 %s/../mm3/plugin.py" % path, shell=True, stdin=PIPE, stderr=PIPE, stdout=sys.stdout) print(p.communicate(input=msg.as_string().encode('utf-8'))) p.stdin.close() f.write("-----\n")