blob: ecb727fe1b88d6f329310edf193a7b7d33110f09 [file] [log] [blame]
#!/usr/bin/env python3.4
# 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.
"""
Thie is feedwrapper - a mailing list auto-subscriber and/or feed passthrough program.
Activate it by adding "|/usr/bin/env python3.4 /path/to/ponymail/tools/feedwrapper.py localuser@thisdomain.abc"
Then subscribe to lists by running: python3.4 feedwrapper sub localuser@thisdomain.abc ml-subscribe@mldomain.foo"
"""
import sys, re, os, email, smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from subprocess import *
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'))
f.close()
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.4 %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")
f.close()