В настоящее время у нас есть полностью работающая система POP / IMAP / Webmail (с использованием Dovecot и Roundcube), которая представляет собой блестящую башню совершенства в своем предполагаемом дизайне. У нас есть тысячи клиентов, которые принадлежат к домену "по умолчанию" (я назову его ourdomain.com) и успешно вошли в систему, используя имя пользователя и пароль. У нас есть еще несколько тысяч владельцев доменов, которые мы размещаем, и они успешно входят в систему со своим полным адресом электронной почты и паролем (назовем его customerdomain.com). Так было с 1990-х годов, когда у клиентов было много укоренившейся конфигурации.
Проблема в том, что теперь люди привыкли входить в веб-формы с полным адресом электронной почты, людям, которые используют ourdomain.com, нужно напоминать о необходимости входа в веб-почту с помощью только их имя пользователя. Это звонок в наш отдел техподдержки несколько раз в неделю (и даже я виноват в этом, я просто не звоню в техподдержку по этому поводу), и, вероятно, его следует устранить с помощью какого-либо программного решения.
Так как же заставить Roundcube или Dovecot распознавать username@ourdomain.com как «имя пользователя», не изменяя фактическое имя пользователя в нашей системе? Но только сделайте это, если домен - "ourdomain.com" и не "customerdomain.com". Имейте в виду, что любое настраиваемое кодирование, которое мы делаем, придется повторно внедрять каждый раз, когда мы будем обновлять систему безопасности, и мы будем рассматривать этот вариант только как последний возможный выбор.
TL; DR:
Нам нужна такая логика:
if $email contains @ourdomain.com
{
remove @ourdomain.com;
submit to roundcube;
} else {
submit to roundcube;
}
Эта проблема может быть решена либо в roundcube, dovecot, либо в вашем бэкенде имени пользователя.
Roundcube имеет возможность автоматическое добавление частей домена, если домен не указан (как предложено Кондыбас). Но в вашем случае это будет не слишком полезно. Конечно, вы можете пропатчить roundcube (на языке PHP) для добавления своей логики.
Dovecot имеет возможность удалить домен (как предлагается в Поиск пользователя Dovecot не выполняется при использовании формата имя пользователя @ домен), но он не может выполнять условное удаление (например, удалить домен, если domain = @ ourdomain.com). Конечно, вы можете пропатчить dovecot (с языком C), чтобы добавить свою логику.
Username-backend тоже вариант. Вы не предоставляете серверную часть, которую используете (SQL, LDAP, настраиваемый движок). Я могу представить, что у вас есть столбец имени пользователя, который имеет два формата с доменом и без него. Теперь вы можете преобразовать все имена пользователей без домена в username @ ourdomain. Вы можете объединить этот процесс с вариантом 1 (автоматическое добавление домена roundcube), чтобы можно было войти в систему с помощью имени пользователя и имени пользователя @ ourdomain.
RoundCube
есть опция под названием username_domain
// Automatically add this domain to user names for login
// Only for IMAP servers that require full e-mail addresses for login
// Specify an array with 'host' => 'domain' values to support multiple hosts
// Supported replacement variables:
// %h - user's IMAP hostname
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %z - IMAP domain (IMAP hostname without the first part)
// For example %n = mail.domain.tld, %t = domain.tld
$config['username_domain'] = '';
Если вы использовали подкаталог (например, ourdomain.tld/roundcube
) установите для этого параметра значение
$config['username_domain'] = '%n';
Если вы использовали поддомены (например, mail.domain.tld
) установите для этого параметра значение
$config['username_domain'] = '%t';
Когда пользователь вводит свой полный адрес электронной почты в качестве логина, он будет использоваться без каких-либо изменений. Если доменная часть опущена, RoundCube
будет использовать URL-домен для завершения. Также в конфиге roundcube есть несколько интересных опций.