diff --git a/emailadmin/inc/class.defaultimap.inc.php b/emailadmin/inc/class.defaultimap.inc.php index 396f969f0f..9fc6b8e75a 100644 --- a/emailadmin/inc/class.defaultimap.inc.php +++ b/emailadmin/inc/class.defaultimap.inc.php @@ -337,20 +337,26 @@ class defaultimap extends Net_IMAP */ function getMailBoxUserName($_username) { - if ($this->loginType == 'email') + switch ($this->loginType) { - $_username = $_username; - $accountID = $GLOBALS['egw']->accounts->name2id($_username); - $accountemail = $GLOBALS['egw']->accounts->id2name($accountID,'account_email'); - //$accountemail = $GLOBALS['egw']->accounts->read($GLOBALS['egw']->accounts->name2id($_username,'account_email')); - if (!empty($accountemail)) - { - list($lusername,$domain) = explode('@',$accountemail,2); - if (strtolower($domain) == strtolower($this->domainName) && !empty($lusername)) + case 'email': + $_username = $_username; + $accountID = $GLOBALS['egw']->accounts->name2id($_username); + $accountemail = $GLOBALS['egw']->accounts->id2name($accountID,'account_email'); + //$accountemail = $GLOBALS['egw']->accounts->read($GLOBALS['egw']->accounts->name2id($_username,'account_email')); + if (!empty($accountemail)) { - $_username = $lusername; + list($lusername,$domain) = explode('@',$accountemail,2); + if (strtolower($domain) == strtolower($this->domainName) && !empty($lusername)) + { + $_username = $lusername; + } } - } + break; + + case 'uidNumber': + $_username = 'u'.$GLOBALS['egw']->accounts->name2id($_username); + break; } return $_username; } @@ -370,7 +376,7 @@ class defaultimap extends Net_IMAP } $_username = $this->getMailBoxUserName($_username); - if($this->loginType == 'vmailmgr' || $this->loginType == 'email') { + if($this->loginType == 'vmailmgr' || $this->loginType == 'email' || $this->loginType == 'uidNumber') { $_username .= '@'. $this->domainName; } diff --git a/emailadmin/inc/class.emailadmin_smtp_ldap.inc.php b/emailadmin/inc/class.emailadmin_smtp_ldap.inc.php index 696f6bb2d0..b43570bebf 100644 --- a/emailadmin/inc/class.emailadmin_smtp_ldap.inc.php +++ b/emailadmin/inc/class.emailadmin_smtp_ldap.inc.php @@ -141,10 +141,10 @@ class emailadmin_smtp_ldap extends defaultsmtp { $newData[$this->config['mail_enable_attr']] = $this->config['mail_enabled']; } - // does schema support an explicit mailbox name --> set it with $uid@$domain + // does schema support an explicit mailbox name --> set it if ($this->config['mailbox_attr']) { - $newData[$this->config['mailbox_attr']] = $_hookValues['account_lid'].'@'.$this->defaultDomain; + $newData[$this->config['mailbox_attr']] = self::mailbox_addr($_hookValues); } if (!($ret = ldap_mod_replace($ds, $accountDN, $newData)) || $this->debug) @@ -419,4 +419,38 @@ class emailadmin_smtp_ldap extends defaultsmtp return ldap_modify ($ds, $allValues[0]['dn'], $newData); } } + + /** + * Build mailbox address for given account and mail_addr_type + * + * @param int|array $account account_id or whole account array with values for keys + * @param string $domain=null domain, default use $this->defaultDomain + * @param string $mail_login_type=null standard(uid), vmailmgr(uid@domain), email or uidNumber, + * default use $GLOBALS['egw_info']['server']['mail_login_type'] + * @return string + */ + static public function mailbox_addr($account,$domain=null,$mail_login_type=null) + { + if (is_null($domain)) $domain = $this->domain; + if (is_null($mail_login_type)) $mail_login_type = $GLOBALS['egw_info']['server']['mail_login_type']; + + switch($mail_login_type) + { + case 'email': + return is_array($account) ? $account['account_email'] : $GLOBALS['egw']->accounts->id2name($account,'account_email'); + + case 'uidNumber': + if (is_array($account)) $account = $account['account_id']; + return 'u'.$account.'@'.$domain; + + case 'standard': + if (is_array($account)) $account = $account['account_id']; + return $GLOBALS['egw']->accounts->id2name($account); + + case 'vmailmgr': + default: + if (is_array($account)) $account = $account['account_id']; + return $GLOBALS['egw']->accounts->id2name($account).'@'.$domain; + } + } } diff --git a/emailadmin/inc/class.emailadmin_ui.inc.php b/emailadmin/inc/class.emailadmin_ui.inc.php index 137cccf425..17455799a0 100644 --- a/emailadmin/inc/class.emailadmin_ui.inc.php +++ b/emailadmin/inc/class.emailadmin_ui.inc.php @@ -233,9 +233,10 @@ class emailadmin_ui extends emailadmin_bo { //error_log(__METHOD__.' called with:'.$serverclass." with capabilities:".parent::$IMAPServerType[$serverclass]['imapcapabilities']); $returnval = array( - 'standard' =>lang('username (standard)'), - 'vmailmgr' =>lang('username@domainname (Virtual MAIL ManaGeR)'), - 'admin' =>lang('Username/Password defined by admin'), + 'standard' => lang('username (standard)'), + 'vmailmgr' => lang('username@domainname (Virtual MAIL ManaGeR)'), + 'admin' => lang('Username/Password defined by admin'), + 'uidNumber' => lang('UserId@domain eg. u1234@domain'), ); if (!empty($serverclass) && stripos(constant($serverclass.'::CAPABILITIES'),'logintypeemail') !== false) {