@Cube, macht er leider nicht.
Ich bin für jede Hilfe dankbar.
Code:
<?php
/**
 * ispCP ω (OMEGA) a Virtual Hosting Control System
 *
 * @copyright     2001-2006 by moleSoftware GmbH
 * @copyright     2006-2008 by ispCP | http://isp-control.net
 * @version     SVN: $ID$
 * @link         http://isp-control.net
 * @author         ispCP Team
 *
 * @license
 *   This program is free software; you can redistribute it and/or modify it under
 *   the terms of the MPL General Public License as published by the Free Software
 *   Foundation; either version 1.1 of the License, or (at your option) any later
 *   version.
 *   You should have received a copy of the MPL Mozilla Public License along with
 *   this program; if not, write to the Open Source Initiative (OSI)
 *   http://opensource.org | osi@opensource.org
 */
require '../include/ispcp-lib.php';
check_login(__FILE__);
$tpl = new pTemplate();
$tpl->define_dynamic('page', Config::get('CLIENT_TEMPLATE_PATH') . '/mail_add.tpl');
$tpl->define_dynamic('page_message', 'page');
$tpl->define_dynamic('logged_from', 'page');
$tpl->define_dynamic('als_list', 'page');
$tpl->define_dynamic('sub_list', 'page');
$tpl->define_dynamic('to_subdomain', 'page');
$tpl->define_dynamic('to_alias_domain', 'page');
$tpl->define_dynamic('js_to_subdomain', 'page');         //JavaScript has to be generated, too
$tpl->define_dynamic('js_to_alias_domain', 'page');     //JavaScript has to be generated, too
$tpl->define_dynamic('js_to_all_domain', 'page');        //JavaScript has to be generated, too
$tpl->define_dynamic('js_not_domain', 'page');             //JavaScript has to be generated, too
// page functions.
function gen_page_form_data(&$tpl, $dmn_name, $post_check) {
    $dmn_name = decode_idna($dmn_name);
    if ($post_check === 'no') {
        $tpl->assign(array('USERNAME' => "",
                'DOMAIN_NAME' => $dmn_name,
                'MAIL_DMN_CHECKED' => "checked=\"checked\"",
                'MAIL_ALS_CHECKED' => "",
                'MAIL_SUB_CHECKED' => "",
                'NORMAL_MAIL_CHECKED' => "checked=\"checked\"",
                'FORWARD_MAIL_CHECKED' => "",
                'FORWARD_LIST' => ""));
    } else {
            if (!isset($_POST['forward_list'])) {
                $f_list = '';
            } else {
                $f_list = $_POST['forward_list'];
            }
            $tpl->assign(
                    array(
                        'USERNAME' => clean_input($_POST['username']),
                        'DOMAIN_NAME' => $dmn_name,
                        'MAIL_DMN_CHECKED' => ($_POST['dmn_type'] === 'dmn') ? "checked=\"checked\"" : "",
                        'MAIL_ALS_CHECKED' => ($_POST['dmn_type'] === 'als') ? "checked=\"checked\"" : "",
                        'MAIL_SUB_CHECKED' => ($_POST['dmn_type'] === 'sub') ? "checked=\"checked\"" : "",
                        'NORMAL_MAIL_CHECKED' => (isset($_POST['mail_type_normal'])) ? "checked=\"checked\"" : "",
                        'FORWARD_MAIL_CHECKED' => (isset($_POST['mail_type_forward'])) ? "checked=\"checked\"" : "",
                        'FORWARD_LIST' => $f_list
                        )
                    );
    }
}
function gen_dmn_als_list(&$tpl, &$sql, $dmn_id, $post_check) {
    $ok_status = Config::get('ITEM_OK_STATUS');
    $query = <<<SQL_QUERY
        SELECT
          alias_id, alias_name
        FROM
          domain_aliasses
        WHERE
          domain_id = ?
        AND
          alias_status = ?
        ORDER BY
          alias_name
SQL_QUERY;
    $rs = exec_query($sql, $query, array($dmn_id, $ok_status));
    if ($rs->RecordCount() == 0) {
        $tpl->assign(
                array(
                    'ALS_ID' => '0',
                    'ALS_SELECTED' => 'selected',
                    'ALS_NAME' => tr('Empty list')
                    )
                );
        $tpl->parse('ALS_LIST', 'als_list');
        $tpl->assign('TO_ALIAS_DOMAIN', '');
        $_SESSION['alias_count'] = "no";
    } else {
        $first_passed = false;
        while (!$rs->EOF) {
            if ($post_check === 'yes') {
                if (!isset($_POST['als_id'])) {
                    $als_id = "";
                } else {
                    $als_id = $_POST['als_id'];
                }
                if ($als_id == $rs->fields['alias_id']) {
                    $als_selected = 'selected';
                } else {
                    $als_selected = '';
                }
            } else {
                if (!$first_passed) {
                    $als_selected = 'selected';
                } else {
                    $als_selected = '';
                }
            }
            $alias_name = decode_idna($rs->fields['alias_name']);
            $tpl->assign(array('ALS_ID' => $rs->fields['alias_id'],
                    'ALS_SELECTED' => $als_selected,
                    'ALS_NAME' => $alias_name));
            $tpl->parse('ALS_LIST', '.als_list');
            $rs->MoveNext();
            if (!$first_passed)
                $first_passed = true;
        }
    }
}
function gen_dmn_sub_list(&$tpl, &$sql, $dmn_id, $dmn_name, $post_check) {
    $ok_status = Config::get('ITEM_OK_STATUS');
    $query = <<<SQL_QUERY
        SELECT
            subdomain_id as sub_id, subdomain_name as sub_name
        FROM
            subdomain
        WHERE
            domain_id = ?
        AND
            subdomain_status = ?
        ORDER BY
            subdomain_name
SQL_QUERY;
    $rs = exec_query($sql, $query, array($dmn_id, $ok_status));
    if ($rs->RecordCount() == 0) {
        $tpl->assign(array('SUB_ID' => '0',
                'SUB_SELECTED' => 'selected',
                'SUB_NAME' => tr('Empty list')));
        $tpl->parse('SUB_LIST', 'sub_list');
        $tpl->assign('TO_SUBDOMAIN', '');
        $_SESSION['subdomain_count'] = "no";
    } else {
        $first_passed = false;
        while (!$rs->EOF) {
            if ($post_check === 'yes') {
                if (!isset($_POST['sub_id'])) {
                    $sub_id = "";
                } else {
                    $sub_id = $_POST['sub_id'];
                }
                if ($sub_id == $rs->fields['sub_id']) {
                    $sub_selected = 'selected';
                } else {
                    $sub_selected = '';
                }
            } else {
                if (!$first_passed) {
                    $sub_selected = 'selected';
                } else {
                    $sub_selected = '';
                }
            }
            $sub_name = decode_idna($rs->fields['sub_name']);
            $dmn_name = decode_idna($dmn_name);
            $tpl->assign(
                    array(
                        'SUB_ID' => $rs->fields['sub_id'],
                        'SUB_SELECTED' => $sub_selected,
                        'SUB_NAME' => $sub_name . '.' . $dmn_name
                        )
                    );
            $tpl->parse('SUB_LIST', '.sub_list');
            $rs->MoveNext();
            if (!$first_passed)
                $first_passed = true;
        }
    }
}
function schedule_mail_account(&$sql, $domain_id, $dmn_name) {
    // 20080218: added support for the mail_addr field: complete mail address in the db
    // standard whithout encoding
    // $mail_acc = $_POST['username'];
    // lets encode the mail ??? only crazy ones encode the local_part
    $mail_acc_tmp = strtolower(clean_input($_POST['username']));
    if (ispcp_check_local_part($mail_acc_tmp) == "0") {
        set_page_message(tr("Invalid Mail Localpart Format used!"));
        return;
    } else {
        $mail_acc = $mail_acc_tmp;
    }
    $mail_auto_respond = false;
    $mail_auto_respond_text = '';
    $mail_addr = '';
    if ($_POST['mail_type_normal'] || $_POST['mail_type_forward']) {
        if ($_POST['mail_type_normal']) {
            if ($_POST['dmn_type'] === 'dmn') {
                $mail_pass = $_POST['pass'];
                $mail_forward = '_no_';
                $mail_type[] = 'normal_mail';
                $sub_id = '0';
                $mail_addr = $mail_acc.'@'.$dmn_name; // the complete address
            } else if ($_POST['dmn_type'] === 'sub') {
                $mail_pass = $_POST['pass'];
                $mail_forward = '_no_';
                $mail_type[] = 'subdom_mail';
                $sub_id = $_POST['sub_id'];
                // search the complete address
                $query = <<<SQL_QUERY
                    SELECT
                        `subdomain_name`
                    FROM
                        `subdomain`
                    WHERE
                        `subdomain_id` = ?
SQL_QUERY;
            $rs = exec_query($sql, $query, array($sub_id));
            $mail_addr = $mail_acc.'@'.decode_idna($rs->fields['subdomain_name']).'.'.$dmn_name; // the complete address
            } else if ($_POST['dmn_type'] === 'als') {
                $mail_pass = $_POST['pass'];
                $mail_forward = '_no_';
                $mail_type[] = 'alias_mail';
                $sub_id = $_POST['als_id'];
                // search the complete address
                $query = <<<SQL_QUERY
                    SELECT
                        `alias_name`
                    FROM
                        `domain_aliasses`
                    WHERE
                        `alias_id` = ?
SQL_QUERY;
                $rs = exec_query($sql, $query, array($sub_id));
                $mail_addr = $mail_acc.'@'.decode_idna($rs->fields['alias_name']); // the complete address
            } else {
                set_page_message(tr('Unknown domain type'));
                return false;
            }
        }
        if ($_POST['mail_type_forward']) {
            if ($_POST['dmn_type'] === 'dmn') {
                $mail_type[] = 'normal_forward';
                $sub_id = '0';
            } else if ($_POST['dmn_type'] === 'sub') {
                $mail_type[] = 'subdom_forward';
                $sub_id = $_POST['sub_id'];
            } else if ($_POST['dmn_type'] === 'als') {
                $mail_type[] = 'alias_forward';
                $sub_id = $_POST['als_id'];
            } else {
                set_page_message(tr('Unknown domain type'));
                return false;
            }
            if (!isset($_POST['mail_type_normal'])) {
                $mail_pass = '_no_';
            }
            $mail_forward = $_POST['forward_list'];
            $farray = preg_split("/[\n,]+/", $mail_forward);
            $mail_accs = array();
            foreach ($farray as $value) {
                $value = trim($value);
                if (!chk_email($value) && $value !== '') {
                    /* ERR .. strange :) not email in this line - warning */
                    set_page_message(tr("Mailformat of an address in your forward list is incorrect!"));
                    return false;
                } else if ($value === '') {
                    set_page_message(tr("Mail forward list empty!"));
                    return false;
                }
                $mail_accs[] = $value;
            }
             $mail_forward = implode(',', $mail_accs);
        }
        $mail_type = implode(',', $mail_type);
        list($dmn_type, $type) = split('_', $mail_type, 2);
        $check_acc_query = <<<SQL_QUERY
            SELECT
                COUNT(mail_id) AS cnt
            FROM
                `mail_users`
            WHERE
                `mail_acc` = ?
                AND
                `domain_id` = ?
                AND
                `sub_id` = ?
                AND
                LEFT (`mail_type`, LOCATE('_', `mail_type`)-1) = ?
SQL_QUERY;
        $rs = exec_query($sql, $check_acc_query, array($mail_acc, $domain_id, $sub_id, $dmn_type));
    }
    if ($rs->fields['cnt'] > 0) {
        set_page_message(tr('Mail account already exists!'));
        return false;
    }
    check_for_lock_file();
    $query = <<<SQL_QUERY
        INSERT INTO mail_users
            (mail_acc,
             mail_pass,
             mail_forward,
             domain_id,
             mail_type,
             sub_id,
             status,
             mail_auto_respond,
             mail_auto_respond_text,
             mail_addr)
        VALUES
            (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
SQL_QUERY;
    $rs = exec_query($sql, $query, array($mail_acc,
            $mail_pass,
            $mail_forward,
            $domain_id,
            $mail_type,
            $sub_id,
            Config::get('ITEM_ADD_STATUS'),
            $mail_auto_respond,
            $mail_auto_respond_text,
            $mail_addr));
    write_log($_SESSION['user_logged'] . ": adds new mail account: " . (isset($mail_addr) ? $mail_addr : $mail_acc));
    set_page_message(tr('Mail account scheduled for addition!'));
    send_request();
    header("Location: mail_accounts.php");
    exit(0);
}
function check_mail_acc_data(&$sql, $dmn_id, $dmn_name) {
    $mail_type_normal = isset($_POST['mail_type_normal']) ? $_POST['mail_type_normal'] : false;
    $mail_type_forward = isset($_POST['mail_type_forward']) ? $_POST['mail_type_forward'] : false;
    if (($mail_type_normal == false) && ($mail_type_forward == false)) {
        set_page_message(tr('Please select at least one mail type!'));
        return false;
    }
    if ($mail_type_normal) {
        $pass = clean_input($_POST['pass']);
        $pass_rep = clean_input($_POST['pass_rep']);
    }
    if (!isset($_POST['username']) || $_POST['username'] === '') {
        set_page_message(tr('Please enter mail account username!'));
        return false;
    }
    if ($mail_type_normal) {
        if (trim($pass) === '' || trim($pass_rep) === '') {
            set_page_message(tr('Password data is missing!'));
            return false;
        } else if ($pass !== $pass_rep) {
            set_page_message(tr('Entered passwords differ!'));
            return false;
        } else if (!chk_password($pass, 50, "/[`\xb4'\"\\\\\x01-\x1f\015\012|<>^$]/i")) {
            // Not permitted chars
            set_page_message(tr('Password data is shorter than %s signs or includes not permitted signs!'), Config::get('PASSWD_CHARS'));
            return false;
        }
    }
    if ($_POST['dmn_type'] === 'sub' && !isset($_POST['sub_id'])) {
        set_page_message(tr('Subdomain list is empty! You cannot add mail accounts!'));
        return false;
    }
    if ($_POST['dmn_type'] === 'als' && !isset($_POST['als_id'])) {
        set_page_message(tr('Alias list is empty! You cannot add mail accounts!'));
        return false;
    }
    if ($mail_type_forward && empty($_POST['forward_list'])) {
        set_page_message(tr('Forward list is empty!'));
        return false;
    }
    schedule_mail_account($sql, $dmn_id, $dmn_name);
}
function gen_page_mail_acc_props(&$tpl, &$sql, $user_id) {
    list($dmn_id,
        $dmn_name,
        $dmn_gid,
        $dmn_uid,
        $dmn_created_id,
        $dmn_created,
        $dmn_last_modified,
        $dmn_mailacc_limit,
        $dmn_ftpacc_limit,
        $dmn_traff_limit,
        $dmn_sqld_limit,
        $dmn_sqlu_limit,
        $dmn_status,
        $dmn_als_limit,
        $dmn_subd_limit,
        $dmn_ip_id,
        $dmn_disk_limit,
        $dmn_disk_usage,
        $dmn_php,
        $dmn_cgi) = get_domain_default_props($sql, $user_id);
    list($mail_acc_cnt,
        $dmn_mail_acc_cnt,
        $sub_mail_acc_cnt,
        $als_mail_acc_cnt) = get_domain_running_mail_acc_cnt($sql, $dmn_id);
    if ($dmn_mailacc_limit != 0 && $mail_acc_cnt >= $dmn_mailacc_limit) {
        set_page_message(tr('Mail accounts limit reached!'));
        header("Location: mail_accounts.php");
        die();
    } else {
        if (!isset($_POST['uaction'])) {
            gen_page_form_data($tpl, $dmn_name, 'no');
            gen_dmn_als_list($tpl, $sql, $dmn_id, 'no');
            gen_dmn_sub_list($tpl, $sql, $dmn_id, $dmn_name, 'no');
            gen_page_js($tpl);
        } else if (isset($_POST['uaction']) && $_POST['uaction'] === 'add_user') {
            gen_page_form_data($tpl, $dmn_name, 'yes');
            gen_dmn_als_list($tpl, $sql, $dmn_id, 'yes');
            gen_dmn_sub_list($tpl, $sql, $dmn_id, $dmn_name, 'yes');
            check_mail_acc_data($sql, $dmn_id, $dmn_name);
        }
    }
}
function gen_page_js(&$tpl) {
    if (isset($_SESSION['subdomain_count']) && isset($_SESSION['alias_count'])) { // no subdomains and no alias
        $tpl->parse('JS_NOT_DOMAIN', 'js_not_domain');
        $tpl->assign('JS_TO_SUBDOMAIN', '');
        $tpl->assign('JS_TO_ALIAS_DOMAIN', '');
        $tpl->assign('JS_TO_ALL_DOMAIN', '');
    } else if (isset($_SESSION['subdomain_count']) && !isset($_SESSION['alias_count'])) { // no subdomains - alaias available
        $tpl->assign('JS_NOT_DOMAIN', '');
        $tpl->assign('JS_TO_SUBDOMAIN', '');
        $tpl->parse('JS_TO_ALIAS_DOMAIN', 'js_to_alias_domain');
        $tpl->assign('JS_TO_ALL_DOMAIN', '');
    } else if (!isset($_SESSION['subdomain_count']) && isset($_SESSION['alias_count'])) { // no alias - subdomain available
        $tpl->assign('JS_NOT_DOMAIN', '');
        $tpl->parse('JS_TO_SUBDOMAIN', 'js_to_subdomain');
        $tpl->assign('JS_TO_ALIAS_DOMAIN', '');
        $tpl->assign('JS_TO_ALL_DOMAIN', '');
    } else { // there are subdomains and aliases
        $tpl->assign('JS_NOT_DOMAIN', '');
        $tpl->assign('JS_TO_SUBDOMAIN', '');
        $tpl->assign('JS_TO_ALIAS_DOMAIN', '');
        $tpl->parse('JS_TO_ALL_DOMAIN', 'js_to_all_domain');
    }
    if (isset($GLOBALS['subdomain_count']))
        unset($GLOBALS['subdomain_count']);
    if (isset($GLOBALS['alias_count']))
        unset($GLOBALS['alias_count']);
    if (isset($_SESSION['subdomain_count']))
        unset($_SESSION['subdomain_count']);
    if (isset($_SESSION['alias_count']))
        unset($_SESSION['alias_count']);
}
// common page data.
if (isset($_SESSION['email_support']) && $_SESSION['email_support'] == "no") {
    header("Location: index.php");
}
$theme_color = Config::get('USER_INITIAL_THEME');
$tpl->assign(
            array(
                'TR_CLIENT_ADD_MAIL_ACC_PAGE_TITLE' => tr('ispCP - Client/Add Mail User'),
                'THEME_COLOR_PATH' => "../themes/$theme_color",
                'THEME_CHARSET' => tr('encoding'),
                'ISP_LOGO' => get_logo($_SESSION['user_id'])
                )
            );
// dynamic page data.
gen_page_mail_acc_props($tpl, $sql, $_SESSION['user_id']);
// static page messages.
gen_client_mainmenu($tpl, Config::get('CLIENT_TEMPLATE_PATH') . '/main_menu_email_accounts.tpl');
gen_client_menu($tpl, Config::get('CLIENT_TEMPLATE_PATH') . '/menu_email_accounts.tpl');
gen_logged_from($tpl);
check_permissions($tpl);
$tpl->assign(
        array(
            'TR_ADD_MAIL_USER' => tr('Add mail users'),
            'TR_USERNAME' => tr('Username'),
            'TR_TO_MAIN_DOMAIN' => tr('To main domain'),
            'TR_TO_DMN_ALIAS' => tr('To domain alias'),
            'TR_TO_SUBDOMAIN' => tr('To subdomain'),
            'TR_NORMAL_MAIL' => tr('Normal mail'),
            'TR_PASSWORD' => tr('Password'),
            'TR_PASSWORD_REPEAT' => tr('Repeat password'),
            'TR_FORWARD_MAIL' => tr('Forward mail'),
            'TR_FORWARD_TO' => tr('Forward to'),
            'TR_FWD_HELP' => tr("Separate multiple email addresses with a line-break."),
            'TR_ADD' => tr('Add')
            )
        );
gen_page_message($tpl);
$tpl->parse('PAGE', 'page');
$tpl->prnt();
if (Config::get('DUMP_GUI_DEBUG'))
    dump_gui_debug();
?>