Tickets #8 and #22.

Not finished yet...
This commit is contained in:
tonio
2010-05-07 18:45:50 +02:00
parent 7ad7c1f48e
commit b33fdb45d9
11 changed files with 81 additions and 23 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ from django.utils.translation import ugettext as _
class ARmessageForm(forms.ModelForm):
class Meta:
model = ARmessage
fields = ('subject', 'content', 'enabled')
fields = ('subject', 'content', 'enabled', 'untildate')
def __init__(self, *args, **kwargs):
super(ARmessageForm, self).__init__(*args, **kwargs)
+24 -3
View File
@@ -7,12 +7,14 @@ This module provides a way to integrate MailNG auto-reply
functionality into Postfix.
"""
from django.http import HttpResponse
from django.utils import simplejson
from django.contrib.auth.decorators \
import login_required
from django.conf.urls.defaults import include
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _
from mailng.lib import _render, events, parameters
from mailng.lib import _render, events, parameters, _ctx_ok, _ctx_ko
from forms import *
from models import *
@@ -29,12 +31,20 @@ def init():
events.register("CreateMailbox", onCreateMailbox)
events.register("DeleteMailbox", onDeleteMailbox)
events.register("ModifyMailbox", onModifyMailbox)
events.register("UserMenuDisplay", menu)
parameters.register("postfix_autoreply", "AUTOREPLIES_TIMEOUT", "int", 86400,
help=_("Timeout in seconds between two auto-replies to the same recipient"))
def destroy():
events.unregister("CreateDomain", onCreateDomain)
events.unregister("DeleteDomain", onDeleteDomain)
events.unregister("CreateMailbox", onCreateMailbox)
events.unregister("DeleteMailbox", onDeleteMailbox)
events.unregister("ModifyMailbox", onModifyMailbox)
events.unregister("UserMenuDisplay", menu)
parameters.unregister_app("postfix_autoreply")
def urls():
return (r'^mailng/postfix_autoreply/',
include('mailng.extensions.postfix_autoreply.urls'))
@@ -46,6 +56,8 @@ def menu(**kwargs):
{"name" : "autoreply",
"url" : reverse(autoreply),
"img" : "/static/pics/auto-reply.png",
"class" : "boxed",
"rel" : "{handler:'iframe',size:{x:440,y:370}}",
"label" : _("Auto-reply message")}
]
@@ -102,13 +114,22 @@ def autoreply(request):
form = ARmessageForm(request.POST)
error = None
if form.is_valid():
from mailng import userprefs
arm = form.save(commit=False)
arm.mbox = mb
arm.save()
request.user.message_set.create(
message=_("Auto reply message updated successfully.")
)
ctx = _ctx_ok(reverse(userprefs.views.index))
else:
ctx = _ctx_ko("postfix_autoreply/autoreply.html", {
"form" : form, "error" : error
})
return HttpResponse(simplejson.dumps(ctx),
mimetype="application/json")
form = ARmessageForm(instance=arm)
return _render(request, "postfix_autoreply/autoreply.html", {
"form" : form
+1 -1
View File
@@ -15,7 +15,7 @@ class ARmessage(models.Model):
subject = models.CharField(_('subject'), max_length=255)
content = models.TextField(_('content'))
enabled = models.BooleanField(_('enabled'))
# untildate = models.DateTimeField(_('until'))
untildate = models.DateTimeField(_('until'))
class ARhistoric(models.Model):
armessage = models.ForeignKey(ARmessage)
+8
View File
@@ -0,0 +1,8 @@
#!/bin/sh
BASEDIR=/home/tonio/projets/devel
export PYTHONPATH=$BASEDIR
export DJANGO_SETTINGS_MODULE=mailng.settings
#export PYTHON_EGG_CACHE=/tmp
$BASEDIR/mailng/scripts/postfix_autoreply/autoreply.py $1 $2
+53
View File
@@ -0,0 +1,53 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import smtplib
from email.mime.text import MIMEText
import datetime
from mailng.lib import parameters
from mailng.admin.models import Mailbox
from mailng.extensions.postfix_autoreply.models import ARmessage, ARhistoric
if __name__ == "__main__":
if len(sys.argv) != 3:
print "Not enough arguments, aborting."
sys.exit(1)
sender = sys.argv[1]
mailbox = sys.argv[2]
mbox = Mailbox.objects.get(full_address=mailbox)
try:
armessage = ARmessage.objects.get(mbox=mbox.id, enabled=True)
except ARmessage.DoesNotExist:
sys.exit(0)
if armessage.untildate < datetime.datetime.now():
armessage.enabled = False
armessage.save()
sys.exit(0)
try:
lastar = ARhistoric.objects.get(armessage=armessage.id, sender=sender)
parameters.get("postfix_autoreply", "AUTOREPLIES_TIMEOUT")
delta = datetime.timedelta(seconds=timeout)
if lastar.last_sent + delta > datetime.datetime.now():
sys.exit(0)
except ARhistoric.DoesNotExist:
lastar = ARhistoric()
lastar.armessage = armessage
lastar.sender = sender
msg = MIMEText(armessage.content.encode('utf-8'), _charset='utf-8')
msg['Subject'] = armessage.subject
msg['From'] = mailbox
msg['To'] = sender
s = smtplib.SMTP()
s.connect()
s.sendmail(mailbox, sender, msg.as_string())
s.quit()
lastar.last_sent = datetime.datetime.now()
lastar.save()
sys.exit(0)
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from django.conf import settings
from mailng.admin.models import Domain, Mailbox
if __name__ == "__main__":
if "mailng.extensions.postfix_autoreply" in settings.INSTALLED_APPS:
import mailng.extensions.postfix_autoreply.main as par
from mailng.extensions.postfix_autoreply.models import Transport, Alias
doms = Domain.objects.all()
for dom in doms:
try:
trans = Transport.objects.get(domain="autoreply.%s" % dom.name)
continue
except Transport.DoesNotExist:
par.onCreateDomain(dom=dom)
mboxes = Mailbox.objects.filter(domain=dom.id)
for mb in mboxes:
try:
alias = Alias.objects.get(full_address=mb.full_address)
continue
except Alias.DoesNotExist:
par.onCreateMailbox(mbox=mb)
@@ -1,13 +1,33 @@
{% extends "userprefs/header.html" %}
{% extends "layout_simple.html" %}
{% load i18n %}
{% block html_head %}
<link rel="stylesheet" type="text/css" href="/static/stylesheets/box.css" />
<link rel="stylesheet" type="text/css" href="/static/stylesheets/datepicker/vista.css" />
<script src="/static/js/datepicker.js" type="text/javascript"></script>
<script src="/static/js/main.js" type="text/javascript"></script>
<script src="/static/js/form.js" type="text/javascript"></script>
<!--<link rel="stylesheet" type="text/css"
href="/static/stylesheets/datepicker/vista.css" />
<script src="/static/js/datepicker.js" type="text/javascript"></script>-->
<link rel="stylesheet" type="text/css"
href="/static/stylesheets/calendar.css" />
<script type="text/javascript" src="/static/js/calendar.js"></script>
<style type="text/css">
#id_subject {
width: 250px;
}
#id_content {
width: 250px;
}
</style>
<script type="text/javascript">
window.addEvent("domready", function() {
cal = new Calendar({id_untildate: "d/m/Y"});
});
</script>
{% endblock %}
{% block subcontent %}
<form action="" method="POST" id="armform" name="armform" class="simple">
{% block content %}
<div class="title"><h1>{% trans "Auto-reply message" %}</h1></div>
<form action="{% url extensions.postfix_autoreply.main.autoreply %}"
method="POST" id="armform" name="armform" class="simple">
{% include "common/genericform.html" %}
<div class="spacer"></div>