Какие существуют варианты прозрачного изменения имен пользователей в веб-почте?
В настоящее время у нас есть полностью работающая система POP/IMAP/Webmail (использующая Dovecot и Roundcube), которая является блестящей башней совершенства в своем предназначении. У нас есть тысячи клиентов, которые принадлежат домену "по умолчанию" (я назову его ourdomain.com) и успешно выполнили вход с использованием имени пользователя и пароля. У нас есть еще несколько тысяч владельцев доменов, которые мы размещаем, и они успешно входят в систему со своим полным адресом электронной почты и паролем (назовите его customerdomain.com). Так было с 1990-х годов, с множеством укоренившихся конфигураций клиентов.
Проблема в том, что теперь люди привыкли входить в веб-формы с полным адресом электронной почты, и людям, которые используют ourdomain.com, нужно напоминать, чтобы они заходили в веб-почту, используя только свое имя пользователя. Это вызов, который наш отдел технической поддержки получает несколько раз в неделю (и даже я виновен в этом, я просто не обращаюсь в службу технической поддержки по этому поводу), и, вероятно, его следует устранить с помощью какого-либо программного решения.
Так как же нам заставить Roundcube или Dovecot распознавать "username@ourdomain.com" как "username" вместо этого, без необходимости изменять действительное имя пользователя в нашей системе? Но делайте это только в том случае, если доменом является "ourdomain.com", а не "customerdomain.com". Имейте в виду, что любое пользовательское кодирование, которое мы делаем, нужно будет повторно внедрять каждый раз, когда мы проводим обновления безопасности, и мы будем рассматривать этот вариант только в качестве последнего возможного выбора.
TL; DR:
Нам нужна эта логика:
if $email contains @ourdomain.com
{
remove @ourdomain.com;
submit to roundcube;
} else {
submit to roundcube;
}
2 ответа
Эта проблема может быть решена либо в roundcube, dovecot, либо в вашем username-backend.
В Roundcube есть опция автоматического добавления частей домена, если домен не предоставлен (как предложено Kondybas). Но это не слишком полезно в вашем случае. Конечно, вы можете исправить RoundCube (с языком PHP) для добавления вашей логики.
У Dovecot есть опция для удаления домена (как предложено в Dovecot, поиск пользователя завершается неудачно при использовании формата username@domain), но он не может выполнять условное удаление (например, strip domain, если domain = @ourdomain.com). Конечно, вы можете исправить dovecot (с языком C) для добавления вашей логики.
Имя пользователя-backend также вариант. Вы не предоставляете используемый бэкэнд (SQL, LDAP, пользовательский движок). Я могу представить, что у вас есть имя пользователя столбца, которые имеют два формата с и без домена. Теперь вы можете конвертировать все имена пользователей без домена в имя пользователя @ ourdomain. Вы можете объединить этот процесс с опцией 1 (домен автоматического добавления круглого куба), чтобы войти в систему могли либо имя пользователя, либо имя пользователя @ 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.