Commits

Zhang Huangbin committed 1252724

Remove old code base.

  • Participants
  • Parent commits 0781a5e

Comments (0)

Files changed (89)

File AUTHORS

-Authors:
-    * Zhang Huangbin <michaelbibby@gmail.com>

File ChangeLog

-= 0.1.4 =
-    * Removed settings: mailbox_type, hashed_maildir.
-
-= 0.1.3 =
-    * New translation: pl_PL. Thanks Marcin Oleksinski.
-    * Add 'enabledService: internal'.
-    * Add storage_node in settings.ini, required in iRedMail-0.6.0.
-
-= 0.1.2 =
-    * Add objectClass=amavisAccount for mail user by default.
-    * Add enabledService: sieve, sievesecured. Used for Dovecot-1.2.
-    * New: Allow to switch language in login page.
-    * New translation: de_DE (Deutsch). Thanks Jan Zude (caparcona <at> web.de).
-    * New translation: es_ES. Thanks yrjc2004@gmail.
-    * New translation: pt_BR (Brazilian Portuguese). Thanks giorgiolago@gmail.
-    * New translation: hu_HU (Hungarian). Thanks zolikusz@gmail.
-
-= 0.1.1 =
-    * Add run-time language switch support.
-    * Add enabledService={pop3secured,imapsecured,managesievesecured}.
-    * Add new translation: vi_VN (Vietnamese), zh_CN, zh_TW.
-    * Fixed: use 'ENINGE=' instead of 'TYPE='. Thanks peterpp @forum.
-    * Show accountStatus image while view/update account profile.
-    * Add ou=Externals by default.
-    * Show correct http error 404 page.
-    * Convert new account name to lower case.
-    * Fix incorrect maildir path: missing '/'.
-    * Add French translation. Thanks Mael Lesaout (mael.lesaout@gmail).
-    * Show multiple values of phone number (telephoneNumber).
-    * Show user id while list users.
-    * Ability to modify user id (employeeNumber).
-    * Fix issue while submit empty display name (cn).
-
-= 0.1 =
-    * Initiaize release.

File INSTALL

-Please visit iredmail web site to read installation guide:
-
-- Install iRedAdmin on Red Hat Enterprise Linux & CentOS:
-  http://www.iredmail.org/admin_installation_rhel.html
-
-- Install iRedAdmin on Debian & Ubuntu:
-  http://www.iredmail.org/admin_installation_debian.html
-
-Please report bugs in our forum:
-  http://www.iredmail.org/forum/forum5.html

File controllers/__init__.py

-#---------------------------------------------------------------------
-# This file is part of iRedAdmin-OSE, which is official web-based admin
-# panel (Open Source Edition) for iRedMail.
-#
-# iRedMail is an open source mail server solution for Red Hat(R)
-# Enterprise Linux, CentOS, Debian and Ubuntu.
-#
-# iRedAdmin-OSE is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# iRedAdmin-OSE is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with iRedAdmin-OSE.  If not, see <http://www.gnu.org/licenses/>.
-#---------------------------------------------------------------------
-

File controllers/base.py

-#!/usr/bin/env python
-# encoding: utf-8
-
-# Author: Zhang Huangbin <michaelbibby (at) gmail.com>
-
-#---------------------------------------------------------------------
-# This file is part of iRedAdmin-OSE, which is official web-based admin
-# panel (Open Source Edition) for iRedMail.
-#
-# iRedMail is an open source mail server solution for Red Hat(R)
-# Enterprise Linux, CentOS, Debian and Ubuntu.
-#
-# iRedAdmin-OSE is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# iRedAdmin-OSE is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with iRedAdmin-OSE.  If not, see <http://www.gnu.org/licenses/>.
-#---------------------------------------------------------------------
-
-import sys
-import web
-
-session = web.config.get('_session')
-
-class redirect:
-    '''Make url ending with or without '/' going to the same class.
-    '''
-    def GET(self, path):
-        web.redirect('/' + str(path))
-
-class img:
-    def GET(self, encoded_img):
-        web.header('Content-Type', 'image/jpeg')
-        return encoded_img.decode('base64')
-#
-# Decorators
-#
-def require_login(func):
-    def proxyfunc(self, *args, **kw):
-        if session.get('username') != None and session.get('logged') == True:
-            return func(self, *args, **kw)
-        else:
-            session.kill()
-            web.seeother('/login?msg=loginRequired')
-    return proxyfunc
-
-def require_global_admin(func):
-    def proxyfunc(self, *args, **kw):
-        if session.get('domainGlobalAdmin') == 'yes':
-            return func(self, *args, **kw)
-        else:
-            web.seeother('/domains?msg=PERMISSION_DENIED')
-    return proxyfunc

File controllers/ldap/__init__.py

-#---------------------------------------------------------------------
-# This file is part of iRedAdmin-OSE, which is official web-based admin
-# panel (Open Source Edition) for iRedMail.
-#
-# iRedMail is an open source mail server solution for Red Hat(R)
-# Enterprise Linux, CentOS, Debian and Ubuntu.
-#
-# iRedAdmin-OSE is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# iRedAdmin-OSE is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with iRedAdmin-OSE.  If not, see <http://www.gnu.org/licenses/>.
-#---------------------------------------------------------------------
-

File controllers/ldap/admin.py

-#!/usr/bin/env python
-# encoding: utf-8
-
-# Author: Zhang Huangbin <michaelbibby (at) gmail.com>
-
-#---------------------------------------------------------------------
-# This file is part of iRedAdmin-OSE, which is official web-based admin
-# panel (Open Source Edition) for iRedMail.
-#
-# iRedMail is an open source mail server solution for Red Hat(R)
-# Enterprise Linux, CentOS, Debian and Ubuntu.
-#
-# iRedAdmin-OSE is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# iRedAdmin-OSE is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with iRedAdmin-OSE.  If not, see <http://www.gnu.org/licenses/>.
-#---------------------------------------------------------------------
-
-import sys
-import web
-from web import render
-from controllers.ldap.basic import dbinit
-from controllers import base
-from libs.ldaplib import admin, ldaputils, iredldif
-
-cfg = web.iredconfig
-session = web.config.get('_session')
-
-adminLib = admin.Admin()
-
-#
-# Admin related.
-#
-class list(dbinit):
-    @base.require_global_admin
-    @base.require_login
-    def GET(self):
-        i = web.input()
-        self.admins = adminLib.list()
-        return render.admins(admins=self.admins, msg=i.get('msg', None))
-
-    # Delete, disable, enable admin accounts.
-    @base.require_global_admin
-    @base.require_login
-    def POST(self):
-        i = web.input(_unicode=False, mail=[])
-        self.mails = i.get('mail', [])
-        if i.has_key('delete'):
-            result = adminLib.delete(mails=self.mails,)
-            msg = 'DELETED_SUCCESS'
-        elif i.has_key('disable'):
-            result = adminLib.enableOrDisableAccount(mails=self.mails, value='disabled',)
-            msg = 'DISABLED_SUCCESS'
-        elif i.has_key('enable'):
-            result = adminLib.enableOrDisableAccount(mails=self.mails, value='active',)
-            msg = 'ENABLED_SUCCESS'
-        else:
-            msg = i.get('msg', None)
-
-        if result[0] is True:
-            web.seeother('/admins?' + 'msg=' + msg)
-        else:
-            web.seeother('/admins?' + result[1])
-
-class create(dbinit):
-    @base.require_global_admin
-    @base.require_login
-    def GET(self):
-        return render.admin_create(
-                languagemaps=adminLib.getLanguageMaps(),
-                min_passwd_length=cfg.general.get('min_passwd_length'),
-                max_passwd_length=cfg.general.get('max_passwd_length'),
-                )
-
-    @base.require_global_admin
-    @base.require_login
-    def POST(self):
-        i = web.input()
-        self.username = web.safestr(i.get('username'))
-        self.domain = web.safestr(i.get('domain'))
-        self.mail = self.username + '@' + self.domain
-        result = adminLib.add(data=i)
-
-        if result[0] is True:
-            web.seeother('/profile/admin/general/%s?msg=CREATED_SUCCESS' % self.mail)
-        else:
-            web.seeother('/create/admin?msg=' + result[1])
-
-class profile(dbinit):
-    @base.require_login
-    def GET(self, profile_type, mail):
-        self.mail = web.safestr(mail)
-        self.profile_type = web.safestr(profile_type)
-
-        if session.get('domainGlobalAdmin') != 'yes' and session.get('username') != self.mail:
-            # Don't allow to view/update other admins' profile.
-            web.seeother('/profile/admin/general/%s?msg=PERMISSION_DENIED' % session.get('username'))
-
-        # Get admin profile.
-        result = adminLib.profile(self.mail)
-        if result[0] is not True:
-            web.seeother('/admins?' + result[1])
-        else:
-            self.admin_profile = result[1]
-
-        i = web.input()
-
-        if self.profile_type == 'general':
-            # Get admin profile.
-            result = adminLib.profile(self.mail)
-
-            # Get available languages.
-            if result[0] is True:
-                return render.admin_profile(
-                        mail=self.mail,
-                        profile_type=self.profile_type,
-                        profile=self.admin_profile,
-                        languagemaps=adminLib.getLanguageMaps(),
-                        msg=i.get('msg', None),
-                        )
-            else:
-                web.seeother('/profile/admin/%s/%s?' % (self.profile_type, self.mail) + result[1])
-        elif self.profile_type == 'password':
-            return render.admin_profile(
-                    mail=self.mail,
-                    profile_type=self.profile_type,
-                    profile=self.admin_profile,
-                    min_passwd_length=cfg.general.get('min_passwd_length'),
-                    max_passwd_length=cfg.general.get('max_passwd_length'),
-                    msg=i.get('msg', None),
-                    )
-
-    @base.require_login
-    def POST(self, profile_type, mail):
-        self.profile_type = web.safestr(profile_type)
-        self.mail = web.safestr(mail)
-        i = web.input()
-
-        if session.get('domainGlobalAdmin') != 'yes' and session.get('username') != self.mail:
-            # Don't allow to view/update other admins' profile.
-            web.seeother('/profile/admin/general/%s?msg=PERMISSION_DENIED' % session.get('username'))
-
-        result = adminLib.update(
-                profile_type=self.profile_type,
-                mail=self.mail,
-                data=i,
-                )
-        if result[0] is True:
-            web.seeother('/profile/admin/%s/%s?msg=PROFILE_UPDATED_SUCCESS' % (self.profile_type, self.mail))
-        else:
-            web.seeother('/profile/admin/%s/%s?' % (self.profile_type, self.mail) + result[1])

File controllers/ldap/basic.py

-#!/usr/bin/env python
-# encoding: utf-8
-
-# Author: Zhang Huangbin <michaelbibby (at) gmail.com>
-
-#---------------------------------------------------------------------
-# This file is part of iRedAdmin-OSE, which is official web-based admin
-# panel (Open Source Edition) for iRedMail.
-#
-# iRedMail is an open source mail server solution for Red Hat(R)
-# Enterprise Linux, CentOS, Debian and Ubuntu.
-#
-# iRedAdmin-OSE is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# iRedAdmin-OSE is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with iRedAdmin-OSE.  If not, see <http://www.gnu.org/licenses/>.
-#---------------------------------------------------------------------
-
-import web, sys
-from libs import __version__, __url_iredadmin_lastest__, iredutils
-from libs.ldaplib import core, auth, admin, domain, ldaputils
-from controllers import base
-
-cfg = web.iredconfig
-session = web.config.get('_session')
-render = web.render
-
-adminLib = admin.Admin()
-
-class login:
-    def GET(self):
-        if session.get('logged') is True:
-            web.seeother('/dashboard')
-        else:
-            i = web.input()
-
-            # Show login page.
-            return render.login(
-                    languagemaps=adminLib.getLanguageMaps(),
-                    msg=i.get('msg'),
-                    )
-
-    def POST(self):
-        # Get username, password.
-        i = web.input()
-
-        username = web.safestr(i.get('username').strip())
-        password = i.get('password').strip()
-        save_pass = web.safestr(i.get('save_pass', 'no').strip())
-
-        if len(username) == 0 or len(password) == 0:
-            return render.login(msg='EMPTY_USER_PW')
-
-        # Convert username to ldap dn.
-        userdn = ldaputils.convEmailToAdminDN(username)
-
-        # Return True if auth success, otherwise return error msg.
-        self.auth_result = auth.Auth(userdn, password)
-
-        if self.auth_result == True:
-            session['username'] = username
-            session['logged'] = True
-
-            web.config.session_parameters['cookie_name'] = 'iRedAdmin'
-            # Session expire when client ip was changed.
-            web.config.session_parameters['ignore_change_ip'] = False
-
-            # Session timeout:
-            # number of second after a not-updated session will be considered expired
-            if save_pass == 'yes':
-                # Session timeout (in seconds).
-                web.config.session_parameters['timeout'] = 86400    # 24 hours
-            else:
-                # Expire session when browser closed.
-                web.config.session_parameters['timeout'] = 600      # 10 minutes
-
-            # Read preferred language from db.
-            try:
-                adminLib = admin.Admin()
-                lang = adminLib.getPreferredLanguage(userdn)
-                if lang is not False:
-                    session['lang'] = lang
-            except:
-                pass
-
-            web.seeother('/dashboard')
-        else:
-            session['failedTimes'] += 1
-            return render.login(msg=self.auth_result, webmaster=session.get('webmaster'))
-
-class logout:
-    def GET(self):
-        session.kill()
-        web.seeother('/login')
-
-class dashboard:
-    @base.require_login
-    def GET(self):
-        from socket import getfqdn
-        import os
-        try:
-            import netifaces
-            ifaces = netifaces.interfaces()
-            netif_data = {}
-            for i in ifaces:
-                addr = netifaces.ifaddresses(i)
-                if addr.has_key(netifaces.AF_INET):
-                    data = addr[netifaces.AF_INET][0]
-                    netif_data[i] = {'addr': data['addr'], 'netmask': data['netmask'],}
-        except:
-            netif_data = None
-        return render.dashboard(
-                version=__version__,
-                hostname=getfqdn(),
-                uptime=iredutils.getServerUptime(),
-                loadavg=os.getloadavg(),
-                netif_data=netif_data,
-                )
-
-class checknew:
-    @base.require_global_admin
-    @base.require_login
-    def GET(self):
-        import urllib2
-        try:
-            f = urllib2.urlopen(__url_iredadmin_lastest__)
-            info = f.read().strip().split('\n')[:3]
-        except Exception, e:
-            info = (None, str(e))
-        return render.checknew(version=__version__, info=info,)
-
-class dbinit:
-    def __init__(self):
-        self.dbwrap = core.LDAPWrap(app=web.app, session=session)

File controllers/ldap/domain.py

-#!/usr/bin/env python
-# encoding: utf-8
-
-# Author: Zhang Huangbin <michaelbibby (at) gmail.com>
-
-#---------------------------------------------------------------------
-# This file is part of iRedAdmin-OSE, which is official web-based admin
-# panel (Open Source Edition) for iRedMail.
-#
-# iRedMail is an open source mail server solution for Red Hat(R)
-# Enterprise Linux, CentOS, Debian and Ubuntu.
-#
-# iRedAdmin-OSE is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# iRedAdmin-OSE is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with iRedAdmin-OSE.  If not, see <http://www.gnu.org/licenses/>.
-#---------------------------------------------------------------------
-
-import sys
-import web
-from web import render
-from web import iredconfig as cfg
-from controllers import base
-from controllers.ldap.basic import dbinit
-from libs.ldaplib import core, admin, domain, attrs
-
-session = web.config.get('_session')
-
-adminLib = admin.Admin()
-domainLib = domain.Domain()
-
-#
-# Domain related.
-#
-class list(dbinit):
-    '''List all virtual mail domains.'''
-    @base.require_login
-    def GET(self):
-        i = web.input()
-        result = domainLib.list()
-        if result[0] is True:
-            allDomains = result[1]
-        else:
-            return result
-        return render.domains(allDomains=allDomains, msg=i.get('msg', None))
-
-    @base.require_global_admin
-    @base.require_login
-    def POST(self):
-        i = web.input(domainName=[])
-        domainName = i.get('domainName', None)
-        if i.has_key('delete'):
-            result = domainLib.delete(domains=domainName)
-            msg = 'DELETED_SUCCESS'
-        elif i.has_key('disable'):
-            result = domainLib.enableOrDisableAccount(domains=domainName, value='disabled',)
-            msg = 'DISABLED_SUCCESS'
-        elif i.has_key('enable'):
-            result = domainLib.enableOrDisableAccount(domains=domainName, value='active',)
-            msg = 'ENABLED_SUCCESS'
-        else:
-            msg = i.get('msg', None)
-
-        if result[0] is True:
-            web.seeother('/domains?msg=%s' % msg)
-        else:
-            web.seeother('/domains?' + result[1])
-
-class profile(dbinit):
-    @base.require_login
-    def GET(self, profile_type, domain):
-        i = web.input()
-        self.domain = web.safestr(domain.split('/', 1)[0])
-        self.profile_type = web.safestr(profile_type)
-        if self.domain == '' or self.domain is None:
-            web.seeother('/domains?msg=EMPTY_DOMAIN')
-
-        if self.profile_type not in attrs.DOMAIN_PROFILE_TYPE:
-            web.seeother('/domains?msg=INCORRECT_PROFILE_TYPE')
-
-        result = domainLib.profile(domain=self.domain)
-
-        if result[0] is True:
-            r = domainLib.list(attrs=['domainName'])
-            if r[0] is True:
-                allDomains = r[1]
-            else:
-                return r
-            allAdmins = adminLib.list()
-            domainAdmins = domainLib.admins(self.domain)
-
-            return render.domain_profile(
-                    cur_domain=self.domain,
-                    allDomains=allDomains,
-                    profile=result[1],
-                    profile_type=self.profile_type,
-                    admins=allAdmins,
-                    # We need only mail address of domain admins.
-                    domainAdmins=domainAdmins[0][1].get('domainAdmin', []),
-                    msg=i.get('msg', None),
-                    )
-        else:
-            web.seeother('/domains?' + result[1])
-
-    @base.require_login
-    def POST(self, profile_type, domain):
-        self.profile_type = web.safestr(profile_type)
-        self.domain = web.safestr(domain)
-
-        i = web.input(enabledService=[],)
-
-        result = domainLib.update(
-                profile_type=self.profile_type,
-                domain=self.domain,
-                data=i,
-                )
-        if result[0] is True:
-            web.seeother('/profile/domain/%s/%s?msg=PROFILE_UPDATED_SUCCESS' % (self.profile_type, self.domain) )
-        elif result[0] is False:
-            web.seeother('/profile/domain/%s/%s?' % (self.profile_type, self.domain) + result[1])
-
-class create(dbinit):
-    @base.require_global_admin
-    @base.require_login
-    def GET(self):
-        i = web.input()
-        return render.domain_create(msg=i.get('msg'))
-
-    @base.require_global_admin
-    @base.require_login
-    def POST(self):
-        i = web.input()
-        result = domainLib.add(data=i)
-        if result[0] is True:
-            web.seeother('/domains?msg=CREATED_SUCCESS')
-        else:
-            web.seeother('/create/domain?' + result[1])

File controllers/ldap/urls.py

-#!/usr/bin/env python
-# encoding: utf-8
-
-# Author: Zhang Huangbin <michaelbibby (at) gmail.com>
-
-#---------------------------------------------------------------------
-# This file is part of iRedAdmin-OSE, which is official web-based admin
-# panel (Open Source Edition) for iRedMail.
-#
-# iRedMail is an open source mail server solution for Red Hat(R)
-# Enterprise Linux, CentOS, Debian and Ubuntu.
-#
-# iRedAdmin-OSE is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# iRedAdmin-OSE is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with iRedAdmin-OSE.  If not, see <http://www.gnu.org/licenses/>.
-#---------------------------------------------------------------------
-
-# URL schema:
-#
-# accountType:    domain, admin, user, maillist, alias
-# account:        example.com, postmaster@example.com,
-#                 www@example.com, list01@example.com,
-#                 alias01@example.com
-#
-# * Create new domain:
-#   - /create/{accountType}
-#
-# * Create new account:
-#   - /create/{accountType}[/domain]
-#
-# * List all accounts:
-#   - /domains
-#   - /admins
-#   - /users
-#   - /maillists
-#   - /aliases
-#
-# * List all accounts under single domain.
-#   - /users/{domain}
-#   - /maillists/{domain}
-#   - /aliases/{domain}
-#
-# * View & Update account profile:
-#   - /profile/{accountType}/{profile_type}/{account}
-#
-
-# Regular expressions.
-re_email = r'[\w\-][\w\-\.]*@[\w\-][\w\-\.]+[a-zA-Z]{1,4}'
-re_domain = '[\w\-][\w\-\.]*[a-zA-Z]{1,4}'
-
-urls = (
-        # Make url ending with or without '/' going to the same class.
-        '/(.*)/',                           'controllers.base.redirect',
-
-        # used to display jpegPhoto.
-        '/img/(.*)',                        'controllers.base.img',
-
-        '/',                                'controllers.ldap.basic.login',
-        '/login',                           'controllers.ldap.basic.login',
-        '/logout',                          'controllers.ldap.basic.logout',
-        '/dashboard',                       'controllers.ldap.basic.dashboard',
-        '/checknew',                        'controllers.ldap.basic.checknew',
-
-        # Domain related.
-        '/domains',                                     'controllers.ldap.domain.list',
-        '/profile/domain/(general)/(%s)' % re_domain,   'controllers.ldap.domain.profile',
-        '/profile/domain/(services)/(%s)' % re_domain,  'controllers.ldap.domain.profile',
-        '/profile/domain/(admins)/(%s)' % re_domain,    'controllers.ldap.domain.profile',
-        '/profile/domain/(quotas)/(%s)' % re_domain,    'controllers.ldap.domain.profile',
-        '/profile/domain/(backupmx)/(%s)' % re_domain,  'controllers.ldap.domain.profile',
-        '/profile/domain/(bcc)/(%s)' % re_domain,       'controllers.ldap.domain.profile',
-        #'/profile/domain/(advanced)/(%s)' % re_domain,  'controllers.ldap.domain.profile',
-        '/profile/domain/(%s)' % re_domain,             'controllers.ldap.domain.profile',
-        '/create/domain',                               'controllers.ldap.domain.create',
-
-        # Admin related.
-        '/admins',                                      'controllers.ldap.admin.list',
-        '/profile/admin/(general)/(%s)' % re_email,     'controllers.ldap.admin.profile',
-        '/profile/admin/(password)/(%s)' % re_email,    'controllers.ldap.admin.profile',
-        '/profile/admin/(domains)/(%s)' % re_email,     'controllers.ldap.admin.profile',
-        '/create/admin',                                'controllers.ldap.admin.create',
-
-        # User related.
-        # /domain.ltd/users
-        '/users',                                       'controllers.ldap.user.list',
-        '/users/(%s)' % re_domain,                      'controllers.ldap.user.list',
-        '/profile/user/(general)/(%s)' % re_email,      'controllers.ldap.user.profile',
-        '/profile/user/(shadow)/(%s)' % re_email,       'controllers.ldap.user.profile',
-        '/profile/user/(members)/(%s)' % re_email,       'controllers.ldap.user.profile',
-        '/profile/user/(services)/(%s)' % re_email,     'controllers.ldap.user.profile',
-        '/profile/user/(forwarding)/(%s)' % re_email,   'controllers.ldap.user.profile',
-        '/profile/user/(bcc)/(%s)' % re_email,          'controllers.ldap.user.profile',
-        '/profile/user/(password)/(%s)' % re_email,     'controllers.ldap.user.profile',
-        '/profile/user/(advanced)/(%s)' % re_email,     'controllers.ldap.user.profile',
-        '/profile/user/(%s)' % re_email,                'controllers.ldap.user.profile',
-        '/create/user/(%s)' % re_domain,                'controllers.ldap.user.create',
-        '/create/user',                                 'controllers.ldap.user.create',
-
-        )

File controllers/ldap/user.py

-#!/usr/bin/env python
-# encoding: utf-8
-
-# Author: Zhang Huangbin <michaelbibby (at) gmail.com>
-
-#---------------------------------------------------------------------
-# This file is part of iRedAdmin-OSE, which is official web-based admin
-# panel (Open Source Edition) for iRedMail.
-#
-# iRedMail is an open source mail server solution for Red Hat(R)
-# Enterprise Linux, CentOS, Debian and Ubuntu.
-#
-# iRedAdmin-OSE is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# iRedAdmin-OSE is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with iRedAdmin-OSE.  If not, see <http://www.gnu.org/licenses/>.
-#---------------------------------------------------------------------
-
-import types, sys
-import web
-from web import render
-from web import iredconfig as cfg
-from controllers import base
-from controllers.ldap.basic import dbinit
-from libs.ldaplib import domain, user, attrs, iredldif, ldaputils
-
-session = web.config.get('_session')
-
-domainLib = domain.Domain()
-userLib = user.User()
-
-#
-# User related.
-#
-class list(dbinit):
-    def __del__(self):
-        pass
-
-    @base.require_login
-    def GET(self, domain=''):
-        domain = web.safestr(domain.split('/', 1)[0])
-        i = web.input()
-        result = domainLib.list(attrs=['domainName'])
-        if result[0] is True:
-            allDomains = result[1]
-        else:
-            return result
-
-        if domain == '' or domain is None:
-            # List users if only one domain available.
-            if isinstance(allDomains, types.ListType) is True and len(allDomains) == 1:
-                cur_domain = str(allDomains[0][1]['domainName'][0])
-                result = userLib.list(domain=cur_domain)
-                if result[0] is True:
-                    web.seeother('/users/' + cur_domain)
-                else:
-                    web.seeother('/domains?' + result[1] )
-            elif isinstance(allDomains, types.ListType) is True and len(allDomains) == 0:
-                return render.users(msg='NO_DOMAIN_AVAILABLE')
-            elif isinstance(allDomains, types.ListType) is True and len(allDomains) > 1:
-                return render.users(allDomains=allDomains, msg=i.get('msg'),)
-            else:
-                web.seeother('/domains?msg=NO_SUCH_DOMAIN')
-        else:
-            result = userLib.list(domain=domain)
-            if result[0] is True:
-                return render.users(
-                        users=result[1],
-                        cur_domain=domain,
-                        allDomains=allDomains,
-                        msg=i.get('msg'),
-                        )
-            else:
-                web.seeother('/domains?' + result[1])
-
-    @base.require_login
-    def POST(self, domain):
-        i = web.input(_unicode=False, mail=[])
-        self.domain = web.safestr(domain)
-        self.mails = i.get('mail', [])
-        if i.has_key('delete'):
-            result = userLib.delete(domain=self.domain, mails=self.mails,)
-            msg = 'DELETED_SUCCESS'
-        elif i.has_key('disable'):
-            result = userLib.enableOrDisableAccount(domain=self.domain, mails=self.mails, value='disabled',)
-            msg = 'DISABLED_SUCCESS'
-        elif i.has_key('enable'):
-            result = userLib.enableOrDisableAccount(domain=self.domain, mails=self.mails, value='active',)
-            msg = 'ENABLED_SUCCESS'
-        else:
-            msg = i.get('msg', None)
-
-        if result[0] is True:
-            web.seeother('/users/%s?msg=%s' % (self.domain, msg))
-        else:
-            web.seeother('/users/%s?' % (self.domain) + result[1])
-
-class profile(dbinit):
-    @base.require_login
-    def GET(self, profile_type, mail):
-        i = web.input(
-                enabledService=[],
-                telephoneNumber=[],
-                mailForwardingAddress=[],
-                memberOfGroup=[],
-                )
-        self.mail = web.safestr(mail)
-        self.profile_type = web.safestr(profile_type)
-
-        if len(self.mail.split('@')) != 2:
-            web.seeother('/domains?msg=INVALID_USER')
-
-        self.domain = self.mail.split('@')[1]
-        if self.profile_type not in attrs.USER_PROFILE_TYPE:
-            web.seeother('/users/%s?msg=INVALID_PROFILE_TYPE&profile_type=%s' % (self.domain, self.profile_type) )
-
-        result = userLib.profile(domain=self.domain, mail=self.mail)
-        if result[0] is True:
-            return render.user_profile(
-                    profile_type=self.profile_type,
-                    mail=self.mail,
-                    user_profile=result[1],
-                    min_passwd_length=cfg.general.get('min_passwd_length'),
-                    max_passwd_length=cfg.general.get('max_passwd_length'),
-                    msg=i.get('msg', None)
-                    )
-        else:
-            web.seeother('/users/%s?' % (self.domain) + result[1])
-
-    @base.require_login
-    def POST(self, profile_type, mail):
-        i = web.input(enabledService=[],telephoneNumber=[],mailForwardingAddress=[],)
-        self.profile_type = web.safestr(profile_type)
-        self.mail = web.safestr(mail)
-
-        result = userLib.update(
-                profile_type=self.profile_type,
-                mail=self.mail,
-                data=i,
-                )
-        if result[0] is True:
-            web.seeother('/profile/user/%s/%s?msg=PROFILE_UPDATED_SUCCESS' % (self.profile_type, self.mail))
-        else:
-            web.seeother('/profile/user/%s/%s?' % (self.profile_type, self.mail) + result[1])
-
-class create(dbinit):
-    @base.require_login
-    def GET(self, domainName=None):
-        if domainName is None:
-            self.domain = ''
-        else:
-            self.domain = web.safestr(domainName)
-
-        result = domainLib.list()
-        if result[0] is True:
-            allDomains = result[1]
-        else:
-            return result
-        return render.user_create(
-                domain=self.domain,
-                allDomains=allDomains,
-                default_quota=domainLib.getDomainDefaultUserQuota(self.domain),
-                min_passwd_length=cfg.general.get('min_passwd_length'),
-                max_passwd_length=cfg.general.get('max_passwd_length'),
-                )
-
-    @base.require_login
-    def POST(self):
-        i = web.input()
-
-        # Get domain name, username, cn.
-        self.domain = web.safestr(i.get('domainName'))
-        self.username = web.safestr(i.get('username'))
-
-        result = userLib.add(domain=self.domain, data=i)
-        if result[0] is True:
-            web.seeother('/profile/user/general/%s?msg=CREATED_SUCCESS' % (self.username + '@' + self.domain))
-        else:
-            self.cn = i.get('cn', '')
-            self.quota = i.get('quota', domainLib.getDomainDefaultUserQuota(self.domain))
-
-            r = domainLib.list()
-            if r[0] is True:
-                allDomains = r[1]
-            else:
-                return r
-
-            return render.user_create(
-                    domain=self.domain,
-                    username=self.username,
-                    cn=self.cn,
-                    quota=self.quota,
-                    allDomains=allDomains,
-                    default_quota=domainLib.getDomainDefaultUserQuota(self.domain),
-                    min_passwd_length=cfg.general.get('min_passwd_length'),
-                    max_passwd_length=cfg.general.get('max_passwd_length'),
-                    msg=result[1],
-                    )

File docs/.htaccess

-Order Deny,Allow
-Deny from all

File docs/HOWTO.i18n

-i18n support HOWTO
-==================
-
-*) Install necessary packages before we go further:
-    - Debian/Ubuntu:
-        # apt-get install python-babel gettext
-    - RHEL/CentOS:
-        # easy_install Babel
-
-*) Extract strings from templates:
-
-    # cd /path/to/iredadmin-x.y.z/i18n/
-    # bash translation.sh extract
-
-*) Translate '/path/to/iredadmin-x.y.z/i18n/iredadmin.po'.
-
-*) Convert po file to mo format:
-
-    # cd /path/to/iredadmin-x.y.z/i18n/
-    # python msgfmt.py iredadmin.po
-
-   You will get 'iredadmin.mo' under current directory.
-
-*) Create directory under 'i18n/' and copy 'iredadmin.mo' greneated
-   above into it. e.g. for French language(fr_FR):
-
-    # cd /path/to/iredadmin-x.y.z/i18n/
-    # mkdir -p fr_FR/LC_MESSAGES/
-    # cp iredadmin.mo fr_FR/LC_MESSAGES/
-
-   Directory format is '{LANGUAGE}/LC_MESSAGES/'.
-
-*) Configure iRedAdmin to use your translation in config/iredconf.py:
-
-    LANG = 'fr_FR'      # The name of directory name created above.
-
-*) Visit your iredadmin in web browser, it should work now.

File docs/HOWTO.skins

-iRedAdmin uses Jinja2 as template engine, you can read Jinja2
-<Template Designer Documentation> here:
-
-    - http://jinja.pocoo.org/2/documentation/templates
-

File docs/samples/iredadmin.sql

-#CREATE DATABASE iredadmin DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-#GRANT INSERT,UPDATE,DELETE,SELECT on iredadmin.* to iredadmin@localhost identified by 'secret_passwd';
-#USE iredadmin;
-
-#
-# Session table required by webpy session module.
-#
-CREATE TABLE IF NOT EXISTS `sessions` (
-    `session_id` CHAR(128) UNIQUE NOT NULL,
-    `atime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    `data` TEXT
-) ENGINE=MyISAM;
-
-#
-# Store all admin operations.
-#
-CREATE TABLE IF NOT EXISTS `log` (
-    `id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
-    `timestamp` TIMESTAMP(14) NOT NULL DEFAULT CURRENT_TIMESTAMP,
-    `admin` VARCHAR(255) NOT NULL,
-    `ip` VARCHAR(15) NOT NULL,
-    `domain` VARCHAR(255) NOT NULL DEFAULT '',
-    `username` VARCHAR(255) NOT NULL DEFAULT '',
-    `event` VARCHAR(10) NOT NULL DEFAULT '',
-    `loglevel` VARCHAR(10) NOT NULL DEFAULT 'info',
-    `msg` VARCHAR(255) NOT NULL,
-    KEY id (id),
-    INDEX (timestamp),
-    INDEX (admin),
-    INDEX (ip),
-    INDEX (domain),
-    INDEX (username),
-    INDEX (event),
-    INDEX (loglevel)
-) ENGINE=MyISAM;
-
-CREATE TABLE IF NOT EXISTS `updatelog` (
-    `id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
-    `date` DATE NOT NULL,
-    KEY id (id),
-    INDEX (date)
-) ENGINE=MyISAM;

File docs/samples/ldap_init.ldif

-dn: dc=iredmail,dc=org
-objectclass: dcObject
-objectclass: organization
-dc: iredmail
-o: iredmail
-
-dn: cn=vmail,dc=iredmail,dc=org
-objectClass: person
-objectClass: shadowAccount
-objectClass: top
-cn: vmail
-sn: vmail
-uid: vmail
-userPassword: passwd
-
-dn: cn=vmailadmin,dc=iredmail,dc=org
-objectClass: person
-objectClass: shadowAccount
-objectClass: top
-cn: vmailadmin
-sn: vmailadmin
-uid: vmailadmin
-userPassword: passwd
-
-dn: o=domains,dc=iredmail,dc=org
-objectClass: Organization
-o: domains
-
-dn: o=domainAdmins,dc=iredmail,dc=org
-objectClass: Organization
-o: domainAdmins
-
-dn: domainName=a.cn,o=domains,dc=iredmail,dc=org
-objectClass: mailDomain
-domainName: a.cn
-mtaTransport: dovecot
-accountStatus: active
-enabledService: mail
-
-dn: ou=Users,domainName=a.cn,o=domains,dc=iredmail,dc=org
-objectClass: organizationalUnit
-objectClass: top
-ou: Users
-
-dn: ou=Groups,domainName=a.cn,o=domains,dc=iredmail,dc=org
-objectClass: organizationalUnit
-objectClass: top
-ou: Groups
-
-dn: ou=Aliases,domainName=a.cn,o=domains,dc=iredmail,dc=org
-objectClass: organizationalUnit
-objectClass: top
-ou: Aliases
-
-dn: mail=postmaster@a.cn,o=domainAdmins,dc=iredmail,dc=org
-objectClass: mailAdmin
-objectClass: shadowAccount
-objectClass: top
-cn: postmaster
-uid: postmaster
-givenName: postmaster
-mail: postmaster@a.cn
-accountStatus: active
-userPassword: passwd
-domainGlobalAdmin: yes
-enabledService: awstats
-
-dn: mail=www@a.cn,ou=Users,domainName=a.cn,o=domains,dc=iredmail,dc=org
-objectClass: inetOrgPerson
-objectClass: shadowAccount
-objectClass: mailUser
-objectClass: top
-cn: www
-sn: www
-uid: www
-givenName: www
-mail: www@a.cn
-accountStatus: active
-mailMessageStore: a.cn/www/
-homeDirectory: /home/vmail
-mailQuota: 104857600
-userPassword: passwd
-enabledService: mail
-enabledService: smtp
-enabledService: pop3
-enabledService: imap
-enabledService: deliver
-enabledService: forward
-enabledService: senderbcc
-enabledService: recipientbcc
-enabledService: managesieve
-memberOfGroup: all@a.cn

File i18n/babel.cfg

-[jinja2: templates/**.html]
-encoding = utf-8
-line_statement_prefix = %

File i18n/de_DE/LC_MESSAGES/iredadmin.mo

Binary file removed.

File i18n/de_DE/LC_MESSAGES/iredadmin.po

-# Translations template for PROJECT.
-# Copyright (C) 2010 ORGANIZATION
-# This file is distributed under the same license as the PROJECT project.
-# Bronko <caparcona@web.de>, 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: iRedAdmin 1.1.0\n"
-"Report-Msgid-Bugs-To: michaelbibby@gmail.com\n"
-"POT-Creation-Date: 2010-02-05 00:01+0800\n"
-"PO-Revision-Date: 2010-02-28 10:24+0200\n"
-"Last-Translator: Bronko <caparcona@web.de>\n"
-"Language-Team: de_DE <LL@li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 0.9.4\n"
-
-#: ../templates/default/ldap/admin_create.html:41
-#: ../templates/default/ldap/admin_create.html:46
-#: ../templates/default/ldap/admins.html:32
-#: ../templates/default/ldap/macros.html:386
-msgid "Create new admin"
-msgstr "Neuen Administrator anlegen"
-
-#: ../templates/default/ldap/admin_create.html:57
-#: ../templates/default/ldap/admin_create.html:60
-#: ../templates/default/ldap/admin_profile.html:78
-#: ../templates/default/ldap/admins.html:49
-#: ../templates/default/ldap/alias_create.html:48
-#: ../templates/default/ldap/alias_profile.html:71
-#: ../templates/default/ldap/alias_profile.html:99
-#: ../templates/default/ldap/aliases.html:64
-#: ../templates/default/ldap/maillist_create.html:48
-#: ../templates/default/ldap/maillist_profile.html:83
-#: ../templates/default/ldap/maillist_profile.html:152
-#: ../templates/default/ldap/maillist_profile.html:237
-#: ../templates/default/ldap/maillists.html:68
-#: ../templates/default/ldap/user_create.html:58
-#: ../templates/default/ldap/user_profile.html:135
-#: ../templates/default/ldap/users.html:74
-msgid "Mail Address"
-msgstr "Mail Adresse"
-
-#: ../templates/default/ldap/admin_create.html:60
-#: ../templates/default/ldap/alias_create.html:48
-#: ../templates/default/ldap/domain_create.html:48
-#: ../templates/default/ldap/login.html:72
-#: ../templates/default/ldap/login.html:79
-#: ../templates/default/ldap/macros.html:425
-#: ../templates/default/ldap/macros.html:433
-#: ../templates/default/ldap/macros.html:441
-#: ../templates/default/ldap/maillist_create.html:48
-#: ../templates/default/ldap/user_create.html:58
-#: ../templates/default/ldap/user_import.html:55
-#: ../templates/default/ldap/user_import.html:66
-#: ../templates/default/ldap/user_import.html:74
-msgid "(Required)"
-msgstr "(Notwendig)"
-
-#: ../templates/default/ldap/admin_create.html:87
-#: ../templates/default/ldap/alias_create.html:64
-#: ../templates/default/ldap/dashboard.html:40
-#: ../templates/default/ldap/domain_create.html:58
-#: ../templates/default/ldap/maillist_create.html:64
-#: ../templates/default/ldap/user_create.html:83
-msgid "Create"
-msgstr "Anlegen"
-
-#: ../templates/default/ldap/admin_profile.html:45
-msgid "Edit admin profile"
-msgstr "Administrator Profil ändern"
-
-#: ../templates/default/ldap/admin_profile.html:49
-#: ../templates/default/ldap/alias_profile.html:39
-#: ../templates/default/ldap/domain_profile.html:57
-#: ../templates/default/ldap/maillist_profile.html:53
-#: ../templates/default/ldap/user_profile.html:62
-msgid "General"
-msgstr "Allgemein"
-
-#: ../templates/default/ldap/admin_profile.html:51
-msgid "Managed Domains"
-msgstr "Domänen verwalten"
-
-#: ../templates/default/ldap/admin_profile.html:53
-msgid "Reset password"
-msgstr "Paßwort zurücksetzen"
-
-#: ../templates/default/ldap/admin_profile.html:58
-msgid "Back to admin list"
-msgstr "Zurück zur Liste der Administratoren"
-
-#: ../templates/default/ldap/admin_profile.html:77
-#: ../templates/default/ldap/admin_profile.html:78
-#: ../templates/default/ldap/admin_profile.html:79
-#: ../templates/default/ldap/alias_profile.html:70
-#: ../templates/default/ldap/alias_profile.html:71
-#: ../templates/default/ldap/alias_profile.html:72
-#: ../templates/default/ldap/maillist_profile.html:82
-#: ../templates/default/ldap/maillist_profile.html:83
-#: ../templates/default/ldap/maillist_profile.html:84
-#: ../templates/default/ldap/user_profile.html:134
-#: ../templates/default/ldap/user_profile.html:135
-#: ../templates/default/ldap/user_profile.html:136
-#: ../templates/default/ldap/user_profile.html:137
-msgid ":"
-msgstr ":"
-
-#: ../templates/default/ldap/admin_profile.html:77
-#: ../templates/default/ldap/admins.html:48
-#: ../templates/default/ldap/alias_profile.html:70
-#: ../templates/default/ldap/aliases.html:63
-#: ../templates/default/ldap/macros.html:55
-#: ../templates/default/ldap/maillist_profile.html:82
-#: ../templates/default/ldap/maillist_profile.html:151
-#: ../templates/default/ldap/maillist_profile.html:236
-#: ../templates/default/ldap/maillists.html:67
-#: ../templates/default/ldap/user_profile.html:134
-#: ../templates/default/ldap/users.html:73
-msgid "Display Name"
-msgstr "Angezeigter Name"
-
-#: ../templates/default/ldap/admin_profile.html:79
-#: ../templates/default/ldap/alias_profile.html:72
-#: ../templates/default/ldap/domain_profile.html:145
-#: ../templates/default/ldap/maillist_profile.html:84
-#: ../templates/default/ldap/maillist_profile.html:141
-#: ../templates/default/ldap/maillist_profile.html:226
-#: ../templates/default/ldap/user_profile.html:137
-#: ../templates/default/ldap/users.html:62
-msgid "Created Date"
-msgstr "Angelegt am"
-
-#: ../templates/default/ldap/admin_profile.html:126
-#: ../templates/default/ldap/alias_profile.html:138
-#: ../templates/default/ldap/domain_profile.html:246
-#: ../templates/default/ldap/maillist_profile.html:300
-#: ../templates/default/ldap/user_profile.html:258
-msgid "Save changes"
-msgstr "Änderungen speichern"
-
-#: ../templates/default/ldap/admins.html:24
-msgid "Domain Admins"
-msgstr "Domänen Administratoren"
-
-#: ../templates/default/ldap/admins.html:28
-msgid "All mail administrators."
-msgstr "Alle Mail Administratoren."
-
-#: ../templates/default/ldap/admins.html:28
-#: ../templates/default/ldap/aliases.html:39
-#: ../templates/default/ldap/domains.html:34
-#: ../templates/default/ldap/maillists.html:43
-#: ../templates/default/ldap/users.html:40
-#, python-format
-msgid "Total: %s."
-msgstr "Gesamt: %s."
-
-#: ../templates/default/ldap/admins.html:50
-msgid "Global Admin"
-msgstr "Globaler Administrator"
-
-#: ../templates/default/ldap/admins.html:72
-msgid "Edit admin profile."
-msgstr "Administrator Profil ändern."
-
-#: ../templates/default/ldap/admins.html:85
-#: ../templates/default/ldap/alias_profile.html:123
-#: ../templates/default/ldap/aliases.html:99
-#: ../templates/default/ldap/domains.html:101
-#: ../templates/default/ldap/maillist_profile.html:198
-#: ../templates/default/ldap/maillist_profile.html:283
-#: ../templates/default/ldap/maillists.html:104
-#: ../templates/default/ldap/users.html:121
-#: ../templates/default/panel/log.html:135
-#: ../templates/default/policyd/wblist.html:138
-msgid "Select/Unselect all"
-msgstr "Alle Wählen/Abwählen"
-
-#: ../templates/default/ldap/admins.html:86
-#: ../templates/default/ldap/aliases.html:100
-#: ../templates/default/ldap/domains.html:102
-#: ../templates/default/ldap/maillists.html:105
-#: ../templates/default/ldap/users.html:122
-#: ../templates/default/panel/log.html:136
-#: ../templates/default/policyd/wblist.html:139
-msgid "Delete"
-msgstr "Entfernen"
-
-#: ../templates/default/ldap/admins.html:86
-#: ../templates/default/ldap/aliases.html:100
-#: ../templates/default/ldap/maillists.html:105
-#: ../templates/default/ldap/users.html:122
-msgid "Are you sure want to delete selected account(s)?"
-msgstr "Sind Sie sicher die gewählten Konten zu löschen?"
-
-#: ../templates/default/ldap/admins.html:87
-#: ../templates/default/ldap/aliases.html:101
-#: ../templates/default/ldap/domains.html:103
-#: ../templates/default/ldap/maillists.html:106
-#: ../templates/default/ldap/users.html:123
-msgid "Disable"
-msgstr "Deaktivieren"
-
-#: ../templates/default/ldap/admins.html:87
-#: ../templates/default/ldap/aliases.html:101
-#: ../templates/default/ldap/maillists.html:106
-#: ../templates/default/ldap/users.html:123
-msgid "Are you sure want to disable selected account(s)?"
-msgstr "Sind Sie sicher die gewählten Konten zu deaktivieren?"
-
-#: ../templates/default/ldap/admins.html:88
-#: ../templates/default/ldap/aliases.html:102
-#: ../templates/default/ldap/domains.html:104
-#: ../templates/default/ldap/maillists.html:107
-#: ../templates/default/ldap/users.html:124
-msgid "Enable"
-msgstr "Aktivieren"
-
-#: ../templates/default/ldap/admins.html:88
-#: ../templates/default/ldap/aliases.html:102
-#: ../templates/default/ldap/maillists.html:107
-#: ../templates/default/ldap/users.html:124
-msgid "Are you sure want to enable selected account(s)?"
-msgstr "Sind Sie sicher die gewählten Konten zu aktivieren?"
-
-#: ../templates/default/ldap/alias_create.html:30
-#: ../templates/default/ldap/alias_create.html:35
-#: ../templates/default/ldap/aliases.html:43
-msgid "Create new alias"
-msgstr "Neues Alias erstellen"
-
-#: ../templates/default/ldap/alias_profile.html:32
-msgid "Edit mail alias profile"
-msgstr "Mail Alias Profil ändern"
-
-#: ../templates/default/ldap/alias_profile.html:40
-#: ../templates/default/ldap/maillist_profile.html:54
-#: ../templates/default/ldap/maillist_profile.html:114
-msgid "Members"
-msgstr "Mitglieder"
-
-#: ../templates/default/ldap/alias_profile.html:44
-msgid "Back to mail alias list"
-msgstr "Zurück zur Liste der Mail Alias"
-
-#: ../templates/default/ldap/alias_profile.html:87
-#: ../templates/default/ldap/maillist_profile.html:127
-msgid "Current members"
-msgstr "Derzeitige Mitglieder"
-
-#: ../templates/default/ldap/alias_profile.html:87
-#: ../templates/default/ldap/maillist_profile.html:127
-#: ../templates/default/ldap/maillist_profile.html:128
-#: ../templates/default/ldap/maillist_profile.html:215
-#: ../templates/default/ldap/maillist_profile.html:216
-#: ../templates/default/ldap/user_profile.html:171
-#, python-format
-msgid "(%s)"
-msgstr "(%s)"
-
-#: ../templates/default/ldap/alias_profile.html:88
-msgid "Add members"
-msgstr "Mitglieder hinzufügen"
-
-#: ../templates/default/ldap/alias_profile.html:124
-msgid "Remove from alias"
-msgstr "Vom Alias entfernen"
-
-#: ../templates/default/ldap/alias_profile.html:124
-msgid "Are you sure want to remove selected account(s) from alias?"
-msgstr "Sind Sie sicher die gewählten Konten vom Alias zu entfernen?"
-
-#: ../templates/default/ldap/alias_profile.html:128
-msgid "Assign to alias"
-msgstr "Alias zuweisen"
-
-#: ../templates/default/ldap/alias_profile.html:128
-msgid "Are you sure want to assign selected account(s) to alias?"
-msgstr "Sind Sie sicher den gewählten Konten das Alias zuzuweisen"
-
-#: ../templates/default/ldap/aliases.html:25
-#: ../templates/default/ldap/domains.html:60
-msgid "Mail Aliases"
-msgstr "Mail Adresse"
-
-#: ../templates/default/ldap/aliases.html:30
-msgid "View aliases under domain:"
-msgstr "Zeige Aliasse der Domäne"
-
-#: ../templates/default/ldap/aliases.html:33
-#: ../templates/default/ldap/maillists.html:37
-#: ../templates/default/ldap/users.html:34
-msgid "Select a domain"
-msgstr "Domäne auswählen"
-
-#: ../templates/default/ldap/aliases.html:45
-#: ../templates/default/ldap/domain_profile.html:71
-#: ../templates/default/ldap/maillists.html:49
-#: ../templates/default/ldap/users.html:46
-msgid "View:"
-msgstr "Zeige:"
-
-#: ../templates/default/ldap/aliases.html:46
-#: ../templates/default/ldap/domain_profile.html:72
-#: ../templates/default/ldap/layout.html:60
-#: ../templates/default/ldap/maillists.html:50
-#: ../templates/default/panel/layout.html:60
-#: ../templates/default/policyd/layout.html:60
-msgid "Users"
-msgstr "Benutzer"
-
-#: ../templates/default/ldap/aliases.html:47
-#: ../templates/default/ldap/domain_profile.html:73
-#: ../templates/default/ldap/domains.html:59
-#: ../templates/default/ldap/layout.html:61
-#: ../templates/default/ldap/maillists.html:29
-#: ../templates/default/ldap/users.html:47
-#: ../templates/default/panel/layout.html:61
-#: ../templates/default/policyd/layout.html:61
-msgid "Mail Lists"
-msgstr "Mail Liste"
-
-#: ../templates/default/ldap/dashboard.html:25
-#: ../templates/default/ldap/layout.html:58
-#: ../templates/default/panel/layout.html:58
-#: ../templates/default/policyd/layout.html:58
-msgid "Dashboard"
-msgstr "Übersicht"
-
-#: ../templates/default/ldap/dashboard.html:34
-msgid "Available operations"
-msgstr "Verfügbare Optionen"
-
-#: ../templates/default/ldap/dashboard.html:43
-#: ../templates/default/ldap/macros.html:597
-msgid "Domain"
-msgstr "Domäne"
-
-#: ../templates/default/ldap/dashboard.html:44
-#: ../templates/default/panel/log.html:101
-msgid "Admin"
-msgstr "Administrator"
-
-#: ../templates/default/ldap/dashboard.html:46
-msgid "User"
-msgstr "Benutzer"
-
-#: ../templates/default/ldap/dashboard.html:47
-msgid "List"
-msgstr "Liste"
-
-#: ../templates/default/ldap/dashboard.html:48
-msgid "Alias"
-msgstr "Alias"
-
-#: ../templates/default/ldap/dashboard.html:65
-msgid "System info"
-msgstr "System Informationen"
-
-#: ../templates/default/ldap/dashboard.html:71
-msgid "iRedAdmin version"
-msgstr "iRedAdmin Version"
-
-#: ../templates/default/ldap/dashboard.html:76
-#, python-format
-msgid "Update available: v%s, <a href=\"%s\">release note</a>."
-msgstr "Update verfügbar: v%s, <a href=\"%s\">release note</a>."
-
-#: ../templates/default/ldap/dashboard.html:79
-#, python-format
-msgid "Error while check new version: %s"
-msgstr "Fehler bei Update Prüfung: %s"
-
-#: ../templates/default/ldap/dashboard.html:85
-msgid "Hostname"
-msgstr "Hostname"
-
-#: ../templates/default/ldap/dashboard.html:91
-msgid "Uptime"
-msgstr "Uptime"
-
-#: ../templates/default/ldap/dashboard.html:92
-#, python-format
-msgid "%s days, %s hours, %s minutes."
-msgstr "%s Tage, %s Stunden, %s Minuten."
-
-#: ../templates/default/ldap/dashboard.html:97
-msgid "Server load"
-msgstr "Server load"
-
-#: ../templates/default/ldap/dashboard.html:107
-msgid "Network interfaces"
-msgstr "Netzwerk Schnittstellen"
-
-#: ../templates/default/ldap/domain_create.html:30
-#: ../templates/default/ldap/domain_create.html:35
-#: ../templates/default/ldap/domains.html:39
-msgid "Create new domain"
-msgstr "Neue Domäne anlegen"
-
-#: ../templates/default/ldap/domain_create.html:45
-#: ../templates/default/ldap/domain_create.html:48
-#: ../templates/default/ldap/domain_profile.html:133
-#: ../templates/default/ldap/domains.html:54
-msgid "Domain Name"
-msgstr "Domänen Name"
-
-#: ../templates/default/ldap/domain_profile.html:53
-msgid "Edit domain profile."
-msgstr "Domänen Profil ändern."
-
-#: ../templates/default/ldap/domain_profile.html:59
-#: ../templates/default/ldap/layout.html:65
-#: ../templates/default/panel/layout.html:65
-#: ../templates/default/policyd/layout.html:65
-msgid "Admins"
-msgstr "Administratoren"
-
-#: ../templates/default/ldap/domain_profile.html:60
-#: ../templates/default/ldap/user_profile.html:66
-msgid "Services"
-msgstr "Services"
-
-#: ../templates/default/ldap/domain_profile.html:61
-#: ../templates/default/ldap/user_profile.html:68
-msgid "Relay"
-msgstr "Relay"
-
-#: ../templates/default/ldap/domain_profile.html:62
-#: ../templates/default/ldap/user_profile.html:69
-msgid "BCC"
-msgstr "BCC"
-
-#: ../templates/default/ldap/domain_profile.html:63
-#: ../templates/default/ldap/domain_profile.html:232
-msgid "Disclaimer"
-msgstr "Haftungsausschluß"
-
-#: ../templates/default/ldap/domain_profile.html:74
-#: ../templates/default/ldap/layout.html:62
-#: ../templates/default/ldap/maillists.html:51
-#: ../templates/default/ldap/users.html:48
-#: ../templates/default/panel/layout.html:62
-#: ../templates/default/policyd/layout.html:62
-msgid "Aliases"
-msgstr "Aliasse"
-
-#: ../templates/default/ldap/domain_profile.html:144
-#: ../templates/default/ldap/macros.html:53
-msgid "Company/Organization"
-msgstr "Unternehmen/Organisation"
-
-#: ../templates/default/ldap/domain_profile.html:162
-msgid "If no admin assigned for domain, you can also manage it with global admin."
-msgstr "Falls kein Domänen Administrator angelegt wird, kann der globale Administrator genutzt werden."
-
-#: ../templates/default/ldap/domain_profile.html:176
-msgid ""
-"Per-user relay setting will override per-domain relay setting you set in "
-"this page."
-msgstr "Die hier gesetzten Benutzer Relay-Einstellungen überschreiben die Domänen Relay-Einstellungen"
-
-#: ../templates/default/ldap/domain_profile.html:176
-#: ../templates/default/ldap/domain_profile.html:208
-msgid "WARNING!"
-msgstr "Achtung!"
-
-#: ../templates/default/ldap/domain_profile.html:208
-msgid "Domain BCC setting will override per-user bcc settings."
-msgstr "Domänen BCC Einstellungen überschreiben Benutzer bcc Einstellungen."
-
-#: ../templates/default/ldap/domain_profile.html:220
-msgid "NOTE:"
-msgstr "Hinweis:"
-
-#: ../templates/default/ldap/domain_profile.html:220
-msgid ""
-"Please make sure you have enable signing disclaimer on outgoing mails and"
-" have crontab job to dump disclaimer text automaticly."
-msgstr "Bitte bei Aktivierung der Haftungsausschluß Signatur ausgehender Mails an den crontab job zur Sicherung des selbigen denken."
-
-#: ../templates/default/ldap/domain_profile.html:220
-msgid "Reference:"
-msgstr "Quelle:"
-
-#: ../templates/default/ldap/domain_profile.html:222
-msgid "How to enable signing disclaimer on outgoing mails."
-msgstr "Wie aktiviert man den Haftungsausschluß als Signatur ausgehender Mails."
-
-#: ../templates/default/ldap/domain_profile.html:223
-msgid "How to dump disclaimer text from LDAP/MySQL automaticly."
-msgstr "Wie sichere ich den Text der Haftungsausschluß Signatur aus LDAP/MySQL automatisch."
-
-#: ../templates/default/ldap/domain_profile.html:234
-msgid "Plain text only."
-msgstr "Nur Reintext."
-
-#: ../templates/default/ldap/domains.html:30
-msgid "Mail Domains"
-msgstr "Mail Domänen"
-
-#: ../templates/default/ldap/domains.html:34
-msgid "All domains under your control."
-msgstr "Alle kontrollierten Domänen."
-
-#: ../templates/default/ldap/domains.html:58
-#: ../templates/default/ldap/users.html:26
-msgid "Mail Users"
-msgstr "Mail Benutzer"
-
-#: ../templates/default/ldap/domains.html:77
-msgid "Edit domain profile"
-msgstr "Domänen Profil ändern"
-
-#: ../templates/default/ldap/domains.html:86
-msgid "List all mail users."
-msgstr "Alle Mail Benutzer zeigen."
-
-#: ../templates/default/ldap/domains.html:89
-msgid "List all mail lists."
-msgstr "Alle Mail Listen zeigen."
-
-#: ../templates/default/ldap/domains.html:92
-msgid "List all mail aliases."
-msgstr "Alle Mail Aliasse zeigen."
-
-#: ../templates/default/ldap/domains.html:102
-#: ../templates/default/panel/log.html:136
-#: ../templates/default/policyd/wblist.html:139
-msgid "Are you sure want to delete selected domain(s) and accounts under it?"
-msgstr "Sind Sie sicher alle ausgewählten Domänen und derer Konten zu löschen?"
-
-#: ../templates/default/ldap/domains.html:103
-msgid "Are you sure want to disable selected domain(s)?"
-msgstr "Sind Sie sicher alle markierten Domänen zu deaktivieren?"
-
-#: ../templates/default/ldap/domains.html:104
-msgid "Are you sure want to enable selected domain(s)?"
-msgstr "Sind Sie sicher alle markierten Domänen zu aktivieren?"
-
-#: ../templates/default/ldap/error404.html:26
-#: ../templates/default/ldap/error404.html:32
-msgid "Page not found."
-msgstr "Seite nicht gefunden."
-
-#: ../templates/default/ldap/error404.html:26
-#: ../templates/default/ldap/error404.html:32
-#: ../templates/default/ldap/msgHandlers.html:27
-msgid "Error:"
-msgstr "Fehler:"
-
-#: ../templates/default/ldap/error404.html:32
-msgid "Go back."
-msgstr "Zurück."
-
-#: ../templates/default/ldap/layout.html:46
-#: ../templates/default/panel/layout.html:46
-#: ../templates/default/policyd/layout.html:46
-#, python-format
-msgid "Logged in as %s."
-msgstr "Angemeldet als %s."
-
-#: ../templates/default/ldap/layout.html:47
-#: ../templates/default/panel/layout.html:47
-#: ../templates/default/policyd/layout.html:47
-msgid "Preferences"
-msgstr "Einstellungen"
-
-#: ../templates/default/ldap/layout.html:48
-#: ../templates/default/panel/layout.html:48
-#: ../templates/default/policyd/layout.html:48
-msgid "Logout"
-msgstr "Abmelden"
-
-#: ../templates/default/ldap/layout.html:52
-#: ../templates/default/panel/layout.html:52
-#: ../templates/default/policyd/layout.html:52
-msgid "iRedMail Management"
-msgstr "iRedMail Verwaltung"
-
-#: ../templates/default/ldap/layout.html:59
-#: ../templates/default/panel/layout.html:59
-#: ../templates/default/policyd/layout.html:59
-msgid "Domains"
-msgstr "Domänen"
-
-#: ../templates/default/ldap/layout.html:68
-#: ../templates/default/panel/layout.html:68
-#: ../templates/default/policyd/layout.html:68
-msgid "System"
-msgstr "System"
-
-#: ../templates/default/ldap/layout.html:89
-#: ../templates/default/panel/layout.html:89
-#: ../templates/default/policyd/layout.html:89
-msgid "Feature request & get support"
-msgstr "Unterstützung und Anregungen"
-
-#: ../templates/default/ldap/layout.html:91
-#: ../templates/default/panel/layout.html:91
-#: ../templates/default/policyd/layout.html:91
-msgid "Contact webmaster"
-msgstr "Webmaster kontaktieren"
-
-#: ../templates/default/ldap/login.html:27
-#: ../templates/default/ldap/login.html:52
-msgid "Login to manage your mail domains & users"
-msgstr "Anmeldung zur Domänen und Benutzer Verwaltung"
-
-#: ../templates/default/ldap/login.html:72
-msgid "Username"
-msgstr "Benutzername"
-
-#: ../templates/default/ldap/login.html:72
-msgid "Must be a valid domain admin email address."
-msgstr "Muß eine gültige Domänen Administrator E-Mail Adresse sein."
-
-#: ../templates/default/ldap/login.html:79
-msgid "Password"
-msgstr "Paßwort"
-
-#: ../templates/default/ldap/login.html:87
-msgid "Remember me"
-msgstr "Merken"
-
-#: ../templates/default/ldap/login.html:87
-msgid "Log me in automatically each time I visit."
-msgstr "Bei jedem Besuch automatisch anmelden."
-
-#: ../templates/default/ldap/login.html:93
-msgid "Login"
-msgstr "Anmelden"
-
-#: ../templates/default/ldap/macros.html:25
-msgid "Status:"
-msgstr "Status:"
-
-#: ../templates/default/ldap/macros.html:72
-#: ../templates/default/ldap/maillist_profile.html:153
-#: ../templates/default/ldap/maillist_profile.html:238
-#: ../templates/default/ldap/user_profile.html:136
-#: ../templates/default/ldap/users.html:75
-msgid "User ID"
-msgstr "Benutzer ID"
-
-#: ../templates/default/ldap/macros.html:83
-#: ../templates/default/ldap/macros.html:87
-#: ../templates/default/ldap/macros.html:93
-msgid "Telephone Number"
-msgstr "Telefonnummer"
-
-#: ../templates/default/ldap/macros.html:106
-msgid "Preferred language"
-msgstr "Bevorzugte Sprache"
-
-#: ../templates/default/ldap/macros.html:122
-msgid "Display mail address in global LDAP address book"
-msgstr "Zeige Mail Adresse im globalen LDAP Adressbuch"
-
-#: ../templates/default/ldap/macros.html:129
-msgid "Mark as global admin"
-msgstr "Als globalen Administrator verwenden"
-
-#: ../templates/default/ldap/macros.html:135
-#: ../templates/default/ldap/macros.html:140
-#: ../templates/default/ldap/macros.html:456
-#: ../templates/default/ldap/maillist_profile.html:187
-#: ../templates/default/ldap/maillist_profile.html:272
-#: ../templates/default/ldap/users.html:110
-msgid "Unlimited"
-msgstr "Unbegrenzt"
-
-#: ../templates/default/ldap/macros.html:161
-msgid "Max quota size"
-msgstr "Maximales Kontingent"
-
-#: ../templates/default/ldap/macros.html:164
-msgid "Max quota size (in MB)"
-msgstr "Maximales Kontingent (in MB)"
-
-#: ../templates/default/ldap/macros.html:166
-#, python-format
-msgid "Current quota size: <strong>%s</strong>."
-msgstr "Derzeitiges Kontingent: <strong>%s</strong>."
-
-#: ../templates/default/ldap/macros.html:167
-#: ../templates/default/ldap/macros.html:175
-#: ../templates/default/ldap/macros.html:183
-#: ../templates/default/ldap/macros.html:191
-msgid "Tip: 0 means unlimited."
-msgstr "Tipp: 0 bedeutet unbegrenzt."
-
-#: ../templates/default/ldap/macros.html:172
-msgid "Max number of mail users"
-msgstr "Maximale Mail Benutzer Anzahl"
-
-#: ../templates/default/ldap/macros.html:174
-#: ../templates/default/ldap/macros.html:182
-#: ../templates/default/ldap/macros.html:190
-#, python-format
-msgid "Current number: <strong>%s</strong>."
-msgstr "Derzeitge Anzahl: <strong>%s</strong>."
-
-#: ../templates/default/ldap/macros.html:180
-msgid "Max number of mail lists"
-msgstr "Maximale Mail Listen Anzahl"
-
-#: ../templates/default/ldap/macros.html:188
-msgid "Max number of mail aliases"
-msgstr "Maximale Mail Aliasse Anzahl"
-
-#: ../templates/default/ldap/macros.html:207
-msgid "Enable this domain"
-msgstr "Diese Domäne aktivieren"
-
-#: ../templates/default/ldap/macros.html:209
-msgid "Enable this account"
-msgstr "Dieses Konto aktivieren"
-
-#: ../templates/default/ldap/macros.html:225
-msgid "Check this box to relay all mails of this account"
-msgstr "Markieren um alle Mails dieses Kontos weiterzuleiten"
-
-#: ../templates/default/ldap/macros.html:225
-msgid "Check this box to relay all mails of this domain"
-msgstr "Markieren um alle Mails dieser Domäne weiterzuleiten"
-
-#: ../templates/default/ldap/macros.html:233
-#: ../templates/default/ldap/macros.html:251
-msgid "Relay Setting"
-msgstr "Weiterleiten zu"
-
-#: ../templates/default/ldap/macros.html:234
-#, python-format
-msgid "Default is: <strong>%s</strong>"
-msgstr "Standard ist: <strong>%s</strong>"
-
-#: ../templates/default/ldap/macros.html:234
-msgid "Default is using domain setting."
-msgstr "Standard ist die Domänen Einstellung."
-
-#: ../templates/default/ldap/macros.html:245
-msgid "Some examples of mail relay setting"
-msgstr "Einige Beispiele für Mail Weiterleitungen"
-
-#: ../templates/default/ldap/macros.html:245
-#, python-format
-msgid "(You can find more examples <a target=\"_blank\" href=\"%s\">here</a>):"
-msgstr "(Mehr Beispiele <a target=\"_blank\" href=\"%s\">hier</a>):"
-
-#: ../templates/default/ldap/macros.html:250
-msgid "Destination"
-msgstr "Ziel"
-
-#: ../templates/default/ldap/macros.html:257
-msgid ""
-"Relay all mails to host \"gateway.example.com\" <strong>with</strong> MX "
-"lookups."
-msgstr "Alle Mails zum host \"gateway.example.com\" <strong>mit</strong> MX lookups weiterleiten."
-
-#: ../templates/default/ldap/macros.html:262
-msgid ""
-"Relay all mails to host \"gateway.example.com\" <strong>without</strong> "
-"MX lookups."
-msgstr "Alle Mails zum host \"gateway.example.com\" <strong>ohne</strong> MX lookups weiterleiten."
-
-#: ../templates/default/ldap/macros.html:273
-#: ../templates/default/ldap/macros.html:275
-msgid "Backup MX"
-msgstr "Backup MX"
-
-#: ../templates/default/ldap/macros.html:279
-msgid "Enabled"
-msgstr "Aktivieren"
-
-#: ../templates/default/ldap/macros.html:283
-msgid "Disabled"
-msgstr "Deaktivieren"
-
-#: ../templates/default/ldap/macros.html:297
-#: ../templates/default/ldap/macros.html:299
-msgid "Service Control"
-msgstr "Service Kontrolle"
-
-#: ../templates/default/ldap/macros.html:304
-msgid "Mail service."
-msgstr "Mail Service."
-
-#: ../templates/default/ldap/macros.html:304
-msgid "Check this box in order to enable all mail related services."
-msgstr "Markieren um alle Mail relevanten Services zu aktivieren."
-
-#: ../templates/default/ldap/macros.html:310
-msgid "Fetch mails via POP3."
-msgstr "Mails via POP3 abholen."
-
-#: ../templates/default/ldap/macros.html:315
-msgid "Fetch mails via POP3S (POP3 over TLS/SSL)."
-msgstr "Mails via POP3S (POP3 over TLS/SSL) abholen."
-
-#: ../templates/default/ldap/macros.html:320
-msgid "Fetch mails via IMAP."
-msgstr "Mails via IMAP abholen."
-
-#: ../templates/default/ldap/macros.html:325
-msgid "Fetch mails via IMAPS (IMAP over TLS/SSL)."
-msgstr "Mails via IMAPS (IMAP over TLS/SSL) abholen."
-
-#: ../templates/default/ldap/macros.html:330
-msgid "Sending mail via SMTP."
-msgstr "Mails via SMTP versenden."
-
-#: ../templates/default/ldap/macros.html:335
-msgid "Receiving mails."
-msgstr "Mails empfangen."
-
-#: ../templates/default/ldap/macros.html:340
-msgid "Customize mail filter rule."
-msgstr "Persönliche Mail Filter setzen."
-
-#: ../templates/default/ldap/macros.html:345
-msgid "Customize mail filter rule over TLS/SSL."
-msgstr "Persönliche Mail Filter über TLS/SSL setzen."
-
</