| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | #!/usr/bin/pythonimport smtplibimport osfrom email.MIMEMultipart import MIMEMultipartfrom email.MIMEText import MIMETextfrom email.Utils import COMMASPACE, formatdateimport jinja2from jinja2 import Templateimport redisimport timeimport sysimport html2textfrom subprocess import Popen, PIPE, STDOUTif len(sys.argv) > 2:  percent = int(sys.argv[1])  username = str(sys.argv[2])else:  print "Args missing"  sys.exit(1)while True:  try:    r = redis.StrictRedis(host='redis', decode_responses=True, port=6379, db=0)    r.ping()  except Exception as ex:    print '%s - trying again...'  % (ex)    time.sleep(3)  else:    breakif r.get('QW_HTML'):  try:    template = Template(r.get('QW_HTML'))  except:    print "Error: Cannot parse quarantine template, falling back to default template."    with open('/templates/quota.tpl') as file_:      template = Template(file_.read())else:  with open('/templates/quota.tpl') as file_:    template = Template(file_.read())html = template.render(username=username, percent=percent)text = html2text.html2text(html)try:  msg = MIMEMultipart('alternative')  msg['From'] = r.get('QW_SENDER') or "quota-warning@localhost"  msg['Subject'] = r.get('QW_SUBJ') or "Quota warning"  msg['Date'] = formatdate(localtime = True)  text_part = MIMEText(text, 'plain', 'utf-8')  html_part = MIMEText(html, 'html', 'utf-8')  msg.attach(text_part)  msg.attach(html_part)  msg['To'] = username  p = Popen(['/usr/local/libexec/dovecot/dovecot-lda', '-d', username, '-o', '"plugin/quota=maildir:User quota:noenforcing"'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)  p.communicate(input=msg.as_string())except Exception as ex:  print 'Failed to send quota notification: %s' % (ex)  sys.exit(1)try:  sys.stdout.close()except:  passtry:  sys.stderr.close()except:  pass
 |