123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #!/usr/bin/python
- import smtplib
- import os
- from email.MIMEMultipart import MIMEMultipart
- from email.MIMEText import MIMEText
- from email.Utils import COMMASPACE, formatdate
- import jinja2
- from jinja2 import Template
- import redis
- import time
- import sys
- import html2text
- from subprocess import Popen, PIPE, STDOUT
- if 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:
- break
- if 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:
- pass
- try:
- sys.stderr.close()
- except:
- pass
|