mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-26 06:08:38 +01:00
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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)
|
||||
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user