Files
modoboa/extensions/postfix_autoreply/main.py
T

100 lines
3.1 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 as _
from modoboa.lib import events, parameters, static_url
from models import *
def infos():
return {
"name" : "Postfix autoreply",
"version" : "1.0",
"description" : _("Auto-reply (vacation) functionality using Postfix")
}
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" : _("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()