Fix email identity with no domain part set

This commit is contained in:
Hadi Nategh 2017-04-24 11:39:02 +02:00
parent 75124d097b
commit 73e2243b33
3 changed files with 30 additions and 20 deletions

View File

@ -1336,6 +1336,12 @@ class admin_mail
} }
$content['admin_actions'] = (bool)$admin_actions; $content['admin_actions'] = (bool)$admin_actions;
//try to fix identities with no domain part set e.g. alias as identity
if (!strpos($content['ident_email'], '@'))
{
$content['ident_email'] = Mail::fixInvalidAliasAddress (Api\Accounts::id2name($content['acc_imap_account_id'], 'account_email'), $content['ident_email']);
}
$tpl->exec(static::APP_CLASS.'edit', $content, $sel_options, $readonlys, $content, 2); $tpl->exec(static::APP_CLASS.'edit', $content, $sel_options, $readonlys, $content, 2);
} }

View File

@ -296,6 +296,22 @@ class Mail
return self::$instances[$_profileID]; return self::$instances[$_profileID];
} }
/**
* This method tries to fix alias address lacking domain part
* by trying to add domain part extracted from given reference address
*
* @param string $refrence email address to be used for domain extraction
* @param string $address alias address
*
* @return string returns alias address with appended default domain
*/
public static function fixInvalidAliasAddress($refrence, $address)
{
$parts = explode('@', $refrence);
if (!strpos($address,'@') && !empty($parts[1])) $address .= '@'.$parts[1];
return $address;
}
/** /**
* store given ProfileID to Session and pref * store given ProfileID to Session and pref
* *

View File

@ -418,7 +418,7 @@ class mail_sieve
* *
* @param string $accountID * @param string $accountID
* *
* @return array return multi-dimentional array of vacation and aliases * @return array return multi-dimensional array of vacation and aliases
*/ */
function getVacation($accountID = null) function getVacation($accountID = null)
{ {
@ -445,21 +445,25 @@ class mail_sieve
} }
if (is_null($accountID)) $accountID = $GLOBALS['egw_info']['user']['account_id']; if (is_null($accountID)) $accountID = $GLOBALS['egw_info']['user']['account_id'];
$account_email = Api\Accounts::id2name($accountID, 'account_email');
$accAllIdentities = $this->account->smtpServer()->getAccountEmailAddress(Api\Accounts::id2name($accountID)); $accAllIdentities = $this->account->smtpServer()->getAccountEmailAddress(Api\Accounts::id2name($accountID));
$allAliases = $this->account->ident_email !=''? array($this->account->ident_email): array(); $allAliases = $this->account->ident_email !=''?
// Fix ident_email with no domain part set
array(Mail::fixInvalidAliasAddress($account_email, $this->account->ident_email))
: array();
foreach ($accAllIdentities as &$val) foreach ($accAllIdentities as &$val)
{ {
if ($val['type'] !='default') if ($val['type'] !='default')
{ {
// if the alias has no domain part set try to add // if the alias has no domain part set try to add
// default domain extracted from ident_email address // default domain extracted from ident_email address
$allAliases[] = self::fixInvalidAliasAddress($this->account->ident_email, $val['address']); $allAliases[] = Mail::fixInvalidAliasAddress($account_email, $val['address']);
} }
} }
// try to fix already stored aliases // try to fix already stored aliases
foreach ($vacation['addresses'] as &$address) foreach ($vacation['addresses'] as &$address)
{ {
$address = self::fixInvalidAliasAddress($this->account->ident_email, $address); $address = Mail::fixInvalidAliasAddress($account_email, $address);
} }
asort($allAliases); asort($allAliases);
return array( return array(
@ -468,22 +472,6 @@ class mail_sieve
); );
} }
/**
* This method tries to fix alias address lacking domain part
* by trying to add domain extracted from given reference address
*
* @param string $refrence email address to be used for domain extraction
* @param string $address alias address
*
* @return string returns alias address with appended default domain
*/
static function fixInvalidAliasAddress($refrence, $address)
{
$parts = explode('@', $refrence);
if (!strpos($address,'@') && !empty($parts[1])) $address .= '@'.$parts[1];
return $address;
}
/** /**
* Vacation edit * Vacation edit
* *