From 4bd8d4331839b310b8017b5d0a65342e418b59ab Mon Sep 17 00:00:00 2001 From: Klaus Leithoff Date: Tue, 29 Oct 2013 16:16:56 +0000 Subject: [PATCH] steps to get back to a working list in ui --- mail/inc/class.mail_bo.inc.php | 219 ++++++++-------------- mail/inc/class.mail_bopreferences.inc.php | 163 ++++++++-------- mail/inc/class.mail_hooks.inc.php | 4 +- mail/inc/class.mail_ui.inc.php | 10 +- 4 files changed, 160 insertions(+), 236 deletions(-) diff --git a/mail/inc/class.mail_bo.inc.php b/mail/inc/class.mail_bo.inc.php index 87b394dfe1..ee2aa86157 100644 --- a/mail/inc/class.mail_bo.inc.php +++ b/mail/inc/class.mail_bo.inc.php @@ -31,13 +31,6 @@ class mail_bo static $folderStatusCache; - /** - * Instance of bopreference - * - * @var bopreferences object - */ - var $bopreferences; - /** * Active preferences * @@ -175,6 +168,7 @@ class mail_bo */ public static function getInstance($_restoreSession=true, $_profileID=0, $_validate=true) { +$_restoreSession=false; //error_log(__METHOD__.__LINE__.' RestoreSession:'.$_restoreSession.' ProfileId:'.$_profileID.' called from:'.function_backtrace()); if ($_profileID == 0) { @@ -184,7 +178,7 @@ class mail_bo } else { - $profileID = emailadmin_bo::getUserDefaultProfileID(); + $profileID = emailadmin_bo::getUserDefaultAccID(); } if ($profileID!=$_profileID) $_restoreSession==false; $_profileID=$profileID; @@ -192,7 +186,7 @@ class mail_bo } if ($_profileID != 0 && $_validate) { - $profileID = self::validateProfileID($_restoreSession, $_profileID); + $profileID = self::validateProfileID($_profileID); if ($profileID != $_profileID) { if (self::$debug) @@ -214,43 +208,19 @@ class mail_bo } else { - // make sure the prefs are up to date for the profile to load - $loadfailed = $alreadytriedreloading = false; - self::$instances[$_profileID]->mailPreferences = self::$instances[$_profileID]->bopreferences->getPreferences(true,$_profileID); - //error_log(__METHOD__.__LINE__." ReRead the Prefs for ProfileID ".$_profileID.' called from:'.function_backtrace()); - if (self::$instances[$_profileID]->mailPreferences) + //refresh objects + try { - self::$instances[$_profileID]->icServer = self::$instances[$_profileID]->mailPreferences->getIncomingServer($_profileID); - // if we do not get an icServer object, session restore failed on bopreferences->getPreferences - if (!self::$instances[$_profileID]->icServer) $loadfailed=true; - if ($_profileID != 0) self::$instances[$_profileID]->mailPreferences->setIncomingServer(self::$instances[$_profileID]->icServer,0); - self::$instances[$_profileID]->ogServer = self::$instances[$_profileID]->mailPreferences->getOutgoingServer($_profileID); - if ($_profileID != 0) self::$instances[$_profileID]->mailPreferences->setOutgoingServer(self::$instances[$_profileID]->ogServer,0); - self::$instances[$_profileID]->htmlOptions = self::$instances[$_profileID]->mailPreferences->preferences['htmlOptions']; - } - else + self::$instances[$this->profileID]->icServer = emailadmin_account::read($this->profileID)->imapServer(); + self::$instances[$this->profileID]->ogServer = emailadmin_account::read($this->profileID)->smtpServer(); + // TODO: merge mailprefs into userprefs, for easy treatment + self::$instances[$this->profileID]->mailPreferences = $GLOBALS['egw_info']['user']['preferences']['mail']; + self::$instances[$this->profileID]->htmlOptions = self::$instances[$this->profileID]->mailPreferences['htmlOptions']; + } catch (egw_exception $e) { - // first try reloading without restore - if ($_restoreSession==true) self::$instances[$_profileID] = new mail_bo('utf-8',false,$_profileID); - if (!self::$instances[$_profileID]->mailPreferences) { - if (self::$debug) error_log(__METHOD__.__LINE__.' something wrong:'.array2string($_restoreSession).' mailPreferences could not be loaded!'); - $loadfailed=$alreadytriedreloading=true; - } - } - if ($_profileID>0 && empty(self::$instances[$_profileID]->icServer->host)&&$alreadytriedreloading==false) - { - if ($_restoreSession==true) self::$instances[$_profileID] = new mail_bo('utf-8',false,$_profileID); - if (empty(self::$instances[$_profileID]->icServer->host)) - { - if (self::$debug) error_log(__METHOD__.__LINE__.' something critically wrong for '.$_profileID.' RestoreSession:'.array2string($_restoreSession).'->'.array2string(self::$instances[$_profileID]->icServer).' No Server host set!'); - $loadfailed=$alreadytriedreloading=true; - } - } - if ($loadfailed) - { - $newprofileID = ($alreadytriedreloading ? emailadmin_bo::getUserDefaultProfileID():$_profileID); - if ($alreadytriedreloading) error_log(__METHOD__.__LINE__." Loading the Profile for ProfileID ".$_profileID.' failed for icServer; trigger new instance for Default-Profile '.$newprofileID.'. called from:'.function_backtrace()); + $newprofileID = emailadmin_bo::getUserDefaultAccID(); // try loading the default profile for the user + error_log(__METHOD__.__LINE__." Loading the Profile for ProfileID ".$_profileID.' failed for icServer; '.$e->getMessage().' Trigger new instance for Default-Profile '.$newprofileID.'. called from:'.function_backtrace()); self::$instances[$newprofileID] = new mail_bo('utf-8',false,$newprofileID); $_profileID = $newprofileID; } @@ -265,58 +235,43 @@ class mail_bo /** * validate the given profileId to make sure it is valid for the active user * - * @param boolean $_restoreSession=true - needed to pass on to getInstance * @param int $_profileID=0 * @return int validated profileID -> either the profileID given, or a valid one */ - public static function validateProfileID($_restoreSession=true, $_profileID=0) + public static function validateProfileID($_profileID=0) { - $identities = array(); - $mail = mail_bo::getInstance($_restoreSession, $_profileID, $validate=false); // we need an instance of mail_bo - $selectedID = $mail->getIdentitiesWithAccounts($identities); - if (is_object($mail->mailPreferences)) $activeIdentity =& $mail->mailPreferences->getIdentity($_profileID, true); + $availableServers = array(); // if you use user defined accounts you may want to access the profile defined with the emailadmin available to the user // as we validate the profile in question and may need to return an emailadminprofile, we fetch this one all the time - $boemailadmin = new emailadmin_bo(); - $defaultProfile = $boemailadmin->getUserProfile() ; + $icServers = emailadmin_account::search($only_current_user=true, $just_name=false, $order_by=null); + $_profileIDs = array_keys($icServers); + $defaultProfileID = $_profileIDs[0]; + $defaultProfile = $icServers[$defaultProfileID]; //error_log(__METHOD__.__LINE__.array2string($defaultProfile)); - $identitys =& $defaultProfile->identities; - $icServers =& $defaultProfile->ic_server; - foreach ($identitys as $tmpkey => $identity) + $profiles = emailadmin_account::search($only_current_user=true, $just_name=true, $order_by=null); + foreach ($profiles as $tmpkey => $prof) { - if (empty($icServers[$tmpkey]->host)) continue; - $identities[$identity->id] = $identity->realName.' '.$identity->organization.' <'.$identity->emailAddress.'>'; + //error_log(__METHOD__.__LINE__.' Key:'.$tmpkey.'->'.array2string($icServers[$tmpkey]->acc_imap_host)); + $host = $icServers[$tmpkey]->acc_imap_host; + if (empty($host)) continue; + $availableServers[$icServers[$tmpkey]->acc_id] = $icServers[$tmpkey]->ident_realname.' '.$icServers[$tmpkey]->ident_org.' <'.$icServers[$tmpkey]->ident_email.'>'; } //error_log(__METHOD__.__LINE__.array2string($identities)); - if (array_key_exists($_profileID,$identities)) + if (array_key_exists($_profileID,$availableServers)) { // everything seems to be in order self::$profileID REMAINS UNCHANGED } else { - if (array_key_exists($selectedID,$identities)) + if (self::$debug) error_log(__METHOD__.__LINE__.' Profile Selected (after trying to fetch DefaultProfile):'.array2string($_profileID)); + if (!array_key_exists($_profileID,$availableServers)) { - $_profileID = $selectedID; - } - else - { - foreach (array_keys((array)$identities) as $k => $ident) - { - //error_log(__METHOD__.__LINE__.' Testing Identity with ID:'.$ident.' for being provided by emailadmin.'); - if ($ident <0) $_profileID = $ident; - } - if (self::$debug) error_log(__METHOD__.__LINE__.' Profile Selected (after trying to fetch DefaultProfile):'.array2string($_profileID)); - if (!array_key_exists($_profileID,$identities)) - { - // everything failed, try first profile found - $keys = array_keys((array)$identities); - if (count($keys)>0) $_profileID = array_shift($keys); - else $_profileID = 0; - } + // everything failed, try first profile found + $_profileID = $defaultProfileID; } } - if (self::$debug) error_log(__METHOD__.'::'.__LINE__.' ProfileSelected:'.$_profileID.' -> '.$identities[$_profileID]); + if (self::$debug) error_log(__METHOD__.'::'.__LINE__.' ProfileSelected:'.$_profileID.' -> '.$availableServers[$_profileID]); return $_profileID; } @@ -346,23 +301,20 @@ class mail_bo $this->sessionData = array(); $this->forcePrefReload(); } - + $this->profileID = self::validateProfileID($_profileID); $this->accountid = $GLOBALS['egw_info']['user']['account_id']; - $this->bopreferences = CreateObject('mail.mail_bopreferences',$_restoreSession); - - $this->mailPreferences = $this->bopreferences->getPreferences(true,$this->profileID); //error_log(__METHOD__.__LINE__." ProfileID ".$this->profileID.' called from:'.function_backtrace()); - if ($this->mailPreferences) { - $this->icServer = $this->mailPreferences->getIncomingServer($this->profileID); - if ($this->profileID != 0) $this->mailPreferences->setIncomingServer($this->icServer,0); - $this->ogServer = $this->mailPreferences->getOutgoingServer($this->profileID); - if ($this->profileID != 0) $this->mailPreferences->setOutgoingServer($this->ogServer,0); - $this->htmlOptions = $this->mailPreferences->preferences['htmlOptions']; - if (isset($this->icServer->ImapServerId) && !empty($this->icServer->ImapServerId)) - { - $_profileID = $this->profileID = $GLOBALS['egw_info']['user']['preferences']['mail']['ActiveProfileID'] = $this->icServer->ImapServerId; - } + $acc = emailadmin_account::read($this->profileID); + error_log(__METHOD__.__LINE__.array2string($acc->imapServer())); + $this->icServer = $acc->imapServer(); + $this->ogServer = $acc->smtpServer(); + // TODO: merge mailprefs into userprefs, for easy treatment + $this->mailPreferences = $GLOBALS['egw_info']['user']['preferences']['mail']; + $this->htmlOptions = $this->mailPreferences['htmlOptions']; + if (isset($this->icServer->ImapServerId) && !empty($this->icServer->ImapServerId)) + { + $_profileID = $this->profileID = $GLOBALS['egw_info']['user']['preferences']['mail']['ActiveProfileID'] = $this->icServer->ImapServerId; } if (is_null(self::$mailConfig)) self::$mailConfig = config::read('mail'); @@ -379,9 +331,9 @@ class mail_bo { $mail = mail_bo::getInstance(false, $_profile_id,false); //_debug_array( $_profile_id); - $mail->mailPreferences = $mail->bopreferences->getPreferences(false,$_profile_id,'mail',$_profile_id); - $mail->icServer = $mail->mailPreferences->getIncomingServer($_profile_id); - $mail->ogServer = $mail->mailPreferences->getOutgoingServer($_profile_id); + //$mail->mailPreferences = $mail->bopreferences->getPreferences($_profile_id,1); + $this->icServer = emailadmin_account::read($_profile_id)->imapServer(); + $this->ogServer = emailadmin_account::read($_profile_id)->smtpServer(); return $mail; } @@ -539,22 +491,21 @@ class mail_bo { // account select box $selectedID = $this->profileID; - if($this->mailPreferences->userDefinedAccounts) $allAccountData = $this->bopreferences->getAllAccountData($this->mailPreferences); - + $allAccountData = emailadmin_account::search($only_current_user=true, $just_name=false, $order_by=null); if ($allAccountData) { - foreach ($allAccountData as $tmpkey => $accountData) + $rememberFirst=$selectedFound=null; + foreach ($allAccountData as $tmpkey => $prof) { - $identity =& $accountData['identity']; - $icServer =& $accountData['icServer']; - //_debug_array($identity); - //_debug_array($icServer); - if (empty($icServer->host)) continue; - $identities[$identity->id]=$identity->realName.' '.$identity->organization.' <'.$identity->emailAddress.'>'; - if (!empty($identity->default)) $selectedID = $identity->id; + if (is_null($rememberFirst)) $rememberFirst = $tmpkey; + if ($tmpkey == $selectedID) $selectedFound=true; + //error_log(__METHOD__.__LINE__.' Key:'.$tmpkey.'->'.array2string($icServers[$tmpkey]->acc_imap_host)); + $host = $icServers[$tmpkey]->acc_imap_host; + if (empty($host)) continue; + $identities[$icServers[$tmpkey]->acc_id] = $icServers[$tmpkey]->ident_realname.' '.$icServers[$tmpkey]->ident_org.' <'.$icServers[$tmpkey]->ident_email.'>'; } } - return $selectedID; + return ($selectedFound?$selectedID:$rememberFirst); } /** @@ -594,7 +545,7 @@ class mail_bo */ function closeConnection() { //if ($icServer->_connected) error_log(__METHOD__.__LINE__.' disconnect from Server'); - if ($this->icServer->_connected) $this->icServer->disconnect(); + $this->icServer->disconnect(); } /** @@ -612,11 +563,8 @@ class mail_bo //{ //error_log( __METHOD__.__LINE__." $_foldername ".function_backtrace()); //error_log(__METHOD__.__LINE__.' Connected with icServer for Profile:'.$this->profileID.'?'.print_r($this->icServer->_connected,true)); - if (!($this->icServer->_connected == 1)) { - $tretval = $this->openConnection($this->profileID,false); - } - if ($this->icServer->_connected == 1 && $this->folderIsSelectable($_foldername)) { - $tretval = $this->icServer->selectMailbox($_foldername); + if ($this->folderIsSelectable($_foldername)) { + $tretval = $this->icServer->openMailbox($_foldername); } $folderOpened = $_foldername; //} @@ -679,25 +627,11 @@ class mail_bo } //error_log( "-------------------------->open connection ".function_backtrace()); //error_log(__METHOD__.__LINE__.' ->'.array2string($this->icServer)); - if ($this->icServer->_connected == 1) { - if (!empty($this->icServer->currentMailbox)) $tretval = $this->icServer->selectMailbox($this->icServer->currentMailbox); - if ( PEAR::isError($tretval) ) $isError[$_icServerID] = $tretval->message; - //error_log(__METHOD__." using existing Connection ProfileID:".$_icServerID.' Status:'.print_r($this->icServer->_connected,true)); - } else { - //error_log(__METHOD__.__LINE__."->open connection for Server with profileID:".$_icServerID.function_backtrace()); - $timeout = mail_bo::getTimeOut(); - $tretval = $this->icServer->openConnection($_adminConnection,$timeout); - if ( PEAR::isError($tretval) || $tretval===false) - { - $isError[$_icServerID] = ($tretval?$tretval->message:$this->icServer->_connectionErrorObject->message); - if (self::$debug) - { - error_log(__METHOD__.__LINE__." # failed to open new Connection ProfileID:".$_icServerID.' Status:'.print_r($this->icServer->_connected,true).' Message:'.$isError[$_icServerID].' called from '.function_backtrace()); - error_log(__METHOD__.__LINE__.' # Instance='.$GLOBALS['egw_info']['user']['domain'].', User='.$GLOBALS['egw_info']['user']['account_lid']); - } - } - if (!PEAR::isError($tretval) && isset($this->sessionData['mailbox']) && !empty($this->sessionData['mailbox'])) $smretval = $this->icServer->selectMailbox($this->sessionData['mailbox']);//may fail silently - } + $tretval = $this->icServer->openMailbox($this->icServer->currentMailbox); + //if ( PEAR::isError($tretval) ) $isError[$_icServerID] = $tretval->message; + //error_log(__METHOD__." using existing Connection ProfileID:".$_icServerID.' Status:'.print_r($this->icServer->_connected,true)); + //error_log(__METHOD__.__LINE__."->open connection for Server with profileID:".$_icServerID.function_backtrace()); + if ( PEAR::isError($tretval) ) egw_cache::setCache(egw_cache::INSTANCE,'email','icServerIMAP_connectionError'.trim($GLOBALS['egw_info']['user']['account_id']),$isError,$expiration=60*15); //error_log(print_r($this->icServer->_connected,true)); //make sure we are working with the correct hierarchyDelimiter on the current connection, calling getHierarchyDelimiter with false to reset the cache @@ -853,7 +787,7 @@ class mail_bo self::$specialUseFolders = $_specialUseFolders[$this->icServer->ImapServerId]; // make sure this one is set on function call return $_specialUseFolders[$this->icServer->ImapServerId]; } - if(($this->icServer instanceof defaultimap) && $this->icServer->_connected) + if(($this->icServer instanceof defaultimap) ) { //error_log(__METHOD__.__LINE__); if(($this->hasCapability('SPECIAL-USE'))) @@ -963,7 +897,7 @@ class mail_bo if (isset($folderInfoCache[$_folderName]) && $ignoreStatusCache==false && $basicInfoOnly) return $folderInfoCache[$_folderName]; $retValue = array(); $retValue['subscribed'] = false; - if(!$icServer = $this->mailPreferences->getIncomingServer($this->profileID)) { + if(!$icServer = emailadmin_account::read($this->profileID)) { if (self::$debug) error_log(__METHOD__." no Server found for Folder:".$_folderName); return false; } @@ -1075,7 +1009,7 @@ class mail_bo error_log(__METHOD__. " time used for reopen: ".$endtime.' for Folder:'.$_folderName); } //$currentFolder = $this->icServer->getCurrentMailbox(); - //if ($currentFolder != $_folderName); $this->icServer->selectMailbox($_folderName); + //if ($currentFolder != $_folderName); $this->icServer->openMailbox($_folderName); $rByUid = true; // try searching by uid. this var will be passed by reference to getSortedList, and may be set to false, if UID retrieval fails #print "
";
 		#$this->icServer->setDebug(true);
@@ -1206,12 +1140,12 @@ class mail_bo
 				//error_log(__METHOD__.__LINE__.array2string($_headerObject));
 				$headerObject['MSG_NUM'] = $_headerObject->getSeq();
 				$headerObject['SIZE'] = $_headerObject->getSize();
-				$headerObject['DATE'] = $_headerObject->getEnvelope()->__get('date');
+				$headerObject['DATE'] = $_headerObject->getEnvelope()->date;
 				$headerObject['INTERNALDATE'] = $_headerObject->getImapDate();
-				$headerObject['SUBJECT'] = $_headerObject->getEnvelope()->__get('subject');
-				$headerObject['FROM'] = $_headerObject->getEnvelope()->__get('from')->__get('addresses');
-				$headerObject['TO'] = $_headerObject->getEnvelope()->__get('to')->__get('addresses');
-				$headerObject['CC'] = $_headerObject->getEnvelope()->__get('cc')->__get('addresses');
+				$headerObject['SUBJECT'] = $_headerObject->getEnvelope()->subject;
+				$headerObject['FROM'] = $_headerObject->getEnvelope()->from->addresses;
+				$headerObject['TO'] = $_headerObject->getEnvelope()->to->addresses;
+				$headerObject['CC'] = $_headerObject->getEnvelope()->cc->addresses;
 				$headerObject['FLAGS'] = $_headerObject->getFlags();
 				//error_log(__METHOD__.__LINE__.array2string($headerObject));
 
@@ -2529,11 +2463,10 @@ class mail_bo
 
 		// does the folder exist???
 		//error_log(__METHOD__."->Connected?".$this->icServer->_connected.", ".$_folder.", ".($forceCheck?' forceCheck activated':'dont check on server'));
-		if ((!($this->icServer->_connected == 1)) && $forceCheck || empty($folderInfo) || !isset($folderInfo[$this->profileID]) || !isset($folderInfo[$this->profileID][$_folder])) {
+		if ( $forceCheck || empty($folderInfo) || !isset($folderInfo[$this->profileID]) || !isset($folderInfo[$this->profileID][$_folder])) {
 			//error_log(__METHOD__."->NotConnected and forceCheck with profile:".$this->profileID);
 			//return false;
 			//try to connect
-			if (!$this->icServer->_connected) $this->openConnection($this->profileID,false);
 		}
 		if(($this->icServer instanceof defaultimap))
 		{
@@ -2583,7 +2516,7 @@ class mail_bo
 		$deleteOptions	= $GLOBALS['egw_info']['user']['preferences']['mail']['deleteOptions'];
 		$trashFolder	= $this->getTrashFolder();
 
-		$this->icServer->selectMailbox($folderName);
+		$this->icServer->openMailbox($folderName);
 
 		if($folderName == $trashFolder && $deleteOptions == "move_to_trash") {
 			$this->icServer->deleteMessages('1:*');
@@ -2632,7 +2565,7 @@ class mail_bo
 		}
 		if($this->icServer->getCurrentMailbox() != $_folder) {
 			$oldMailbox = $this->icServer->getCurrentMailbox();
-			$this->icServer->selectMailbox($_folder);
+			$this->icServer->openMailbox($_folder);
 		}
 		$updateCache = false;
 		switch($deleteOptions) {
@@ -2715,7 +2648,7 @@ class mail_bo
 			if ($cachemodified) egw_cache::setCache(egw_cache::INSTANCE,'email','structureCache'.trim($GLOBALS['egw_info']['user']['account_id']),$structure,$expiration=60*60*1);
 		}
 		if($oldMailbox != '') {
-			$this->icServer->selectMailbox($oldMailbox);
+			$this->icServer->openMailbox($oldMailbox);
 		}
 
 		return true;
@@ -2792,7 +2725,7 @@ class mail_bo
 			}
 		}
 
-		$this->icServer->selectMailbox(($_folder?$_folder:$this->sessionData['mailbox']));
+		$this->icServer->openMailbox(($_folder?$_folder:$this->sessionData['mailbox']));
 
 		switch($_flag) {
 			case "undelete":
diff --git a/mail/inc/class.mail_bopreferences.inc.php b/mail/inc/class.mail_bopreferences.inc.php
index 16e948be7b..8fc456c633 100644
--- a/mail/inc/class.mail_bopreferences.inc.php
+++ b/mail/inc/class.mail_bopreferences.inc.php
@@ -214,7 +214,9 @@ class mail_bopreferences extends mail_sopreferences
 
 	function getUserDefinedIdentities()
 	{
-		$profileID = emailadmin_bo::getUserDefaultProfileID();
+		$profileID = emailadmin_bo::getUserDefaultAccID();
+error_log(__METHOD__.__LINE__.' Not done jet');
+/*
 		$profileData        = $this->boemailadmin->getUserProfile('mail');
 		if(!($profileData instanceof ea_preferences) || !($profileData->ic_server[$profileID] instanceof defaultimap)) {
 			return false;
@@ -232,19 +234,18 @@ class mail_bopreferences extends mail_sopreferences
 				return $accountArray;
 			}
 		}
+*/
 		return array();
 	}
 
 	/**
 	 * getPreferences - fetches the active profile for a user
 	 *
-	 * @param boolean $getUserDefinedProfiles
 	 * @param int $_profileID - use this profile to be set its prefs as active profile (0)
-	 * @param string $_appName - the app the profile is fetched for
-	 * @param int $_singleProfileToFetch - single Profile to fetch no merging of profileData; emailadminprofiles only; for Administrative use only (by now)
+	 * @param int $_singleProfileToFetch - single Profile to fetch
 	 * @return object ea_preferences object with the active emailprofile set to ID = 0
 	 */
-	function getPreferences($getUserDefinedProfiles=true,$_profileID=0,$_appName='mail',$_singleProfileToFetch=0)
+	function getPreferences($_profileID=0,$_singleProfileToFetch=0)
 	{
 		if (isset($this->sessionData['profileData']) && ($this->sessionData['profileData'] instanceof ea_preferences))
 		{
@@ -257,110 +258,104 @@ class mail_bopreferences extends mail_sopreferences
 			$userPreferences = $GLOBALS['egw_info']['user']['preferences']['mail'];
 
 			$imapServerTypes	= $this->boemailadmin->getIMAPServerTypes();
-			$profileData = $this->boemailadmin->getUserProfile($_appName,'',($_singleProfileToFetch<0?-$_singleProfileToFetch:'')); // by now we assume only one profile to be returned
-			$icServerKeys = array_keys((array)$profileData->ic_server);
-			$icProfileID = array_shift($icServerKeys);
-			$ogServerKeys = array_keys((array)$profileData->og_server);
-			$ogProfileID = array_shift($ogServerKeys);
-			//error_log(__METHOD__.__LINE__.' ServerProfile(s)Fetched->'.array2string(count($profileData->ic_server)));
-			//may be needed later on, as it may hold users Identities connected to MailAlternateAdresses
-			$IdIsDefault = 0;
-			$rememberIdentities = $profileData->identities;
-			foreach ($rememberIdentities as $adkey => $ident)
+			try
 			{
-				if ($ident->default) $IdIsDefault = $ident->id;
-				$profileData->identities[$adkey]->default = false;
+				$profileData_ = emailadmin_account::search($only_current_user=true, $just_name=false, $order_by=null,$offset=0);
+				$_profileIDs = array_keys($profileData_);
+				$_profileID = $_profileIDs[0];
+				$profileData = $profileData_[$_profileID];
+_debug_array($profileData->imapServer());
+				$icProfileID = $profileData->__get('acc_id');
+				$ogProfileID = $profileData->__get('acc_id');
+				//error_log(__METHOD__.__LINE__.' ServerProfile(s)Fetched->'.array2string(count($profileData->ic_server)));
+			}
+			catch (egw_exception $e)
+			{	// not sure that this is needed to pass on exeptions
+				throw new egw_exception_assertion_failed($e->getMessage());
+				//return false
 			}
 
-			if(!($profileData instanceof ea_preferences) || !($profileData->ic_server[$icProfileID] instanceof defaultimap))
-			{
-				return false;
-			}
 			// set the emailadminprofile as profile 0; it will be assumed the active one (if no other profiles are active)
-			$profileData->setIncomingServer($profileData->ic_server[$icProfileID],0);
+			$profileData->setIncomingServer($profileData_[$icProfileID]->imapServer,$icProfileID);
 			$profileID = $icProfileID;
-			$profileData->setOutgoingServer($profileData->og_server[$ogProfileID],0);
+			$profileData->setOutgoingServer($profileData_[$icProfileID]->smtpServer,$ogProfileID);
 			$profileData->setIdentity($profileData->identities[$icProfileID],0);
 			$userPrefs = $this->mergeUserAndProfilePrefs($userPreferences,$profileData,$icProfileID);
 			$rememberID = array(); // there may be more ids to be rememered
 			$maxId = $icProfileID>0?$icProfileID:0;
 			$minId = $icProfileID<0?$icProfileID:0;
 			//$profileData->setPreferences($userPrefs,0);
-			if($profileData->userDefinedAccounts && $GLOBALS['egw_info']['user']['apps']['mail'] && $getUserDefinedProfiles)
+
+			// get user defined accounts (only fetch the active one(s), as we call it without second parameter)
+			// we assume only one account may be active at once
+			$allAccountData = $this->getAllAccountData($profileData);
+			foreach ((array)$allAccountData as $k => $accountData)
 			{
-				// get user defined accounts (only fetch the active one(s), as we call it without second parameter)
-				// we assume only one account may be active at once
-				$allAccountData = $this->getAllAccountData($profileData);
-				foreach ((array)$allAccountData as $k => $accountData)
+				// set defined IMAP server
+				if(($accountData['icServer'] instanceof defaultimap))
 				{
-					// set defined IMAP server
+					$profileData->setIncomingServer($accountData['icServer'],$k);
+					$userPrefs = $this->mergeUserAndProfilePrefs($userPreferences,$profileData,$k);
+					//$profileData->setPreferences($userPrefs,$k);
+				}
+				// set defined SMTP Server
+				if(($accountData['ogServer'] instanceof emailadmin_smtp))
+					$profileData->setOutgoingServer($accountData['ogServer'],$k);
+
+				if(($accountData['identity'] instanceof ea_identity))
+				{
+					$profileData->setIdentity($accountData['identity'],$k);
+					$rememberID[] = $k; // remember Identity as already added
+					if ($k>0 && $k>$maxId) $maxId = $k;
+					if ($k<0 && $k<$minId) $minId = $k;
+				}
+
+				if (empty($_profileID))
+				{
+					$setAsActive = $accountData['active'];
+					//if($setAsActive) error_log(__METHOD__.__LINE__." Setting Profile with ID=$k (using Active Info) for ActiveProfile");
+				}
+				else
+				{
+					$setAsActive = ($_profileID==$k);
+					//if($setAsActive) error_log(__METHOD__.__LINE__." Setting Profile with ID=$_profileID for ActiveProfile");
+				}
+				if($setAsActive)
+				{
+					// replace the global defined IMAP Server
 					if(($accountData['icServer'] instanceof defaultimap))
 					{
-						$profileData->setIncomingServer($accountData['icServer'],$k);
+						$profileID = $k;
+						$profileData->setIncomingServer($accountData['icServer'],0);
 						$userPrefs = $this->mergeUserAndProfilePrefs($userPreferences,$profileData,$k);
-						//$profileData->setPreferences($userPrefs,$k);
+						//$profileData->setPreferences($userPrefs,0);
 					}
-					// set defined SMTP Server
+
+					// replace the global defined SMTP Server
 					if(($accountData['ogServer'] instanceof emailadmin_smtp))
-						$profileData->setOutgoingServer($accountData['ogServer'],$k);
+						$profileData->setOutgoingServer($accountData['ogServer'],0);
 
-					if(($accountData['identity'] instanceof ea_identity))
-					{
-						$profileData->setIdentity($accountData['identity'],$k);
-						$rememberID[] = $k; // remember Identity as already added
-						if ($k>0 && $k>$maxId) $maxId = $k;
-						if ($k<0 && $k<$minId) $minId = $k;
-					}
-
-					if (empty($_profileID))
-					{
-						$setAsActive = $accountData['active'];
-						//if($setAsActive) error_log(__METHOD__.__LINE__." Setting Profile with ID=$k (using Active Info) for ActiveProfile");
-					}
-					else
-					{
-						$setAsActive = ($_profileID==$k);
-						//if($setAsActive) error_log(__METHOD__.__LINE__." Setting Profile with ID=$_profileID for ActiveProfile");
-					}
-					if($setAsActive)
-					{
-						// replace the global defined IMAP Server
-						if(($accountData['icServer'] instanceof defaultimap))
-						{
-							$profileID = $k;
-							$profileData->setIncomingServer($accountData['icServer'],0);
-							$userPrefs = $this->mergeUserAndProfilePrefs($userPreferences,$profileData,$k);
-							//$profileData->setPreferences($userPrefs,0);
-						}
-
-						// replace the global defined SMTP Server
-						if(($accountData['ogServer'] instanceof emailadmin_smtp))
-							$profileData->setOutgoingServer($accountData['ogServer'],0);
-
-						// replace the global defined identity
-						if(($accountData['identity'] instanceof ea_identity)) {
-							//_debug_array($profileData);
-							$profileData->setIdentity($accountData['identity'],0);
-							$profileData->identities[0]->default = true;
-							$rememberID[] = $IdIsDefault = $accountData['identity']->id;
-						}
+					// replace the global defined identity
+					if(($accountData['identity'] instanceof ea_identity)) {
+						//_debug_array($profileData);
+						$profileData->setIdentity($accountData['identity'],0);
+						$profileData->identities[0]->default = true;
+						$rememberID[] = $IdIsDefault = $accountData['identity']->id;
 					}
 				}
 			}
-			if($profileData->userDefinedIdentities && $GLOBALS['egw_info']['user']['apps']['mail'])
+
+			$allUserIdentities = $this->getUserDefinedIdentities();
+			if (is_array($allUserIdentities))
 			{
-				$allUserIdentities = $this->getUserDefinedIdentities();
-				if (is_array($allUserIdentities))
+				$i=$maxId+1;
+				$y=$minId-1;
+				foreach ($allUserIdentities as $tmpkey => $id)
 				{
-					$i=$maxId+1;
-					$y=$minId-1;
-					foreach ($allUserIdentities as $tmpkey => $id)
+					if (!in_array($id->id,$rememberID))
 					{
-						if (!in_array($id->id,$rememberID))
-						{
-							$profileData->setIdentity($id,$i);
-							$i++;
-						}
+						$profileData->setIdentity($id,$i);
+						$i++;
 					}
 				}
 			}
diff --git a/mail/inc/class.mail_hooks.inc.php b/mail/inc/class.mail_hooks.inc.php
index ca6bf370f4..e60341ef88 100644
--- a/mail/inc/class.mail_hooks.inc.php
+++ b/mail/inc/class.mail_hooks.inc.php
@@ -22,7 +22,7 @@ class mail_hooks
  */
 	static public function accountHooks($hookData)
 	{
-		if (($default_profile_id = emailadmin_bo::getDefaultProfileID()))
+		if (($default_profile_id = emailadmin_bo::getDefaultAccID()))
 		{
 			$mail_bo = mail_bo::forceEAProfileLoad($default_profile_id);
 
@@ -47,7 +47,7 @@ class mail_hooks
 	 */
 	static public function adminMenu()
 	{
-		if (($default_profile_id = emailadmin_bo::getDefaultProfileID()))
+		if (($default_profile_id = emailadmin_bo::getDefaultAccID()))
 		{
 			$mail_bo = mail_bo::forceEAProfileLoad($default_profile_id);
 
diff --git a/mail/inc/class.mail_ui.inc.php b/mail/inc/class.mail_ui.inc.php
index ed7585586c..bfdfba1080 100644
--- a/mail/inc/class.mail_ui.inc.php
+++ b/mail/inc/class.mail_ui.inc.php
@@ -122,9 +122,9 @@ class mail_ui
 
 		$this->mail_bo = mail_bo::getInstance(false,self::$icServerID);
 		if (mail_bo::$debug) error_log(__METHOD__.__LINE__.' Fetched IC Server:'.self::$icServerID.'/'.$this->mail_bo->profileID.':'.function_backtrace());
+error_log(__METHOD__.__LINE__.array2string($this->mail_bo->icServer));
 		// no icServer Object: something failed big time
 		if (!isset($this->mail_bo->icServer)) exit; // ToDo: Exception or the dialog for setting up a server config
-		if (!($this->mail_bo->icServer->_connected == 1)) $this->mail_bo->openConnection(self::$icServerID);
 		$GLOBALS['egw']->session->commit_session();
 	}
 
@@ -265,7 +265,7 @@ class mail_ui
 			//$this->mail_bo->reopen($sessionFolder); // needed to fetch full set of capabilities: but did that earlier
 		}
 		// since we are connected,(and selected the folder) we check for capabilities SUPPORTS_KEYWORDS to eventually add the keyword filters
-		if ($this->mail_bo->icServer->_connected == 1 && $this->mail_bo->icServer->hasCapability('SUPPORTS_KEYWORDS'))
+		if ( $this->mail_bo->icServer->hasCapability('SUPPORTS_KEYWORDS'))
 		{
 			$this->statusTypes = array_merge($this->statusTypes,array(
 				'keyword1'	=> 'urgent',//lang('urgent'),
@@ -1412,11 +1412,7 @@ unset($query['actions']);
 						$header['mimetype'] != 'multipart/signed'
 					)
 					{
-						if ($this->mail_bo->icServer->_connected != 1)
-						{
-							$this->mail_bo->openConnection($this->profileID); // connect to the current server
-							$this->mail_bo->reopen($_folderName);
-						}
+						$this->mail_bo->reopen($_folderName);
 						$attachments = $this->mail_bo->getMessageAttachments($header['uid'],$_partID='', $_structure='', $fetchEmbeddedImages=true, $fetchTextCalendar=false, $resolveTNEF=false);
 						if (count($attachments)<1)
 						{