Files
modoboa/extensions/postfix_autoreply/main.py
T
Antoine Nguyen 858fe43cdd "Top redirection" feature.
A new admin parameter is available to specify the default application that will be launched when no one is present in the url. (ie. when the top level "/" is called).

fixed #165
2011-09-20 14:57:04 +02:00

102 lines
3.2 KiB
Python

# -*- coding: utf-8 -*-
"""
Postfix auto-replies plugin.
This module provides a way to integrate Modoboa auto-reply
functionality into Postfix.
"""
from django.conf.urls.defaults import include
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_noop as _, ugettext
from modoboa.lib import events, parameters
from modoboa.lib.webutils import static_url
from models import *
def infos():
return {
"name" : "Postfix autoreply",
"version" : "1.0",
"description" : ugettext("Auto-reply (vacation) functionality using Postfix"),
"url" : "postfix_autoreply"
}
def init():
events.register("CreateDomain", onCreateDomain)
events.register("DeleteDomain", onDeleteDomain)
events.register("CreateMailbox", onCreateMailbox)
events.register("DeleteMailbox", onDeleteMailbox)
events.register("ModifyMailbox", onModifyMailbox)
events.register("UserMenuDisplay", menu)
parameters.register_admin("AUTOREPLIES_TIMEOUT",
type="int", deflt=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(prefix):
return (r'^%spostfix_autoreply/' % prefix,
include('modoboa.extensions.postfix_autoreply.urls'))
def menu(**kwargs):
import views
if kwargs["target"] != "uprefs_menu":
return []
return [
{"name" : "autoreply",
"url" : reverse(views.autoreply),
"img" : static_url("pics/auto-reply.png"),
"class" : "boxed",
"rel" : "{handler:'iframe',size:{x:440,y:400}}",
"label" : ugettext("Auto-reply message")}
]
def onCreateDomain(**kwargs):
dom = kwargs["dom"]
transport = Transport()
transport.domain = "autoreply.%s" % dom.name
transport.method = "autoreply:"
transport.save()
def onDeleteDomain(**kwargs):
dom = kwargs["dom"]
trans = Transport.objects.get(domain="autoreply.%s" % dom.name)
trans.delete()
def onCreateMailbox(**kwargs):
mbox = kwargs["mbox"]
alias = Alias()
alias.full_address = mbox.full_address
alias.autoreply_address = \
"%s@autoreply.%s" % (mbox.full_address, mbox.domain.name)
alias.save()
def onDeleteMailbox(**kwargs):
mbox = kwargs["mbox"]
try:
alias = Alias.objects.get(full_address=mbox.full_address)
alias.delete()
except Alias.DoesNotExist:
pass
def onModifyMailbox(**kwargs):
mbox = kwargs["mbox"]
oldmbox = kwargs["oldmbox"]
if oldmbox.full_address == mbox.full_address:
return
alias = Alias.objects.get(full_address=oldmbox.full_address)
alias.full_address = mbox.full_address
alias.autoreply_address = \
"%s@autoreply.%s" % (mbox.full_address, mbox.domain.name)
alias.save()