73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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
 | 
