目前,我们有一个完整的POP / IMAP / Webmail系统(使用Dovecot和Roundcube),这是一个闪闪发光的完美的塔在其预期的devise。 我们有成千上万属于“默认”域的客户(我将称之为ourdomain.com),并成功使用用户名和密码login。 我们还拥有数千人拥有我们托pipe的域名,并且使用完整的电子邮件地址和密码成功login(称为customerdomain.com)。 自20世纪90年代以来,这种方式就已经有了很多根深蒂固的客户configuration。
现在的问题是,人们已经习惯了使用完整的电子邮件地址loginnetworking表单,使用ourdomain.com的用户只能使用他们的用户名login到webmail。 这是我们的技术支持部门每周要上好几次(甚至我犯了这个错误,我只是不打电话给技术支持),可能应该用某种软件解决scheme来消除。
那么,我们如何才能让Roundcube或Dovecot将“[email protected]”识别为“用户名”,而不必在系统中更改每个人的实际用户名? 但只有在域名是“ourdomain.com”而不是 “customerdomain.com”的情况下才能这样做。 请记住,我们所做的任何自定义编码在每次进行安全升级时都必须重新实施,我们只会将该选项视为最后的可能select。
TL; DR:
我们需要这个逻辑:
if $email contains @ourdomain.com { remove @ourdomain.com; submit to roundcube; } else { submit to roundcube; }
这个问题可以在roundcube,dovecot或者你的用户名 – 后端中解决。
如果没有提供域 (如Kondybas提出的),Roundcube可以select自动添加域部分 。 但是在你的情况下它不会太有用。 当然你可以修补roundcube(用PHP语言)来添加你的逻辑。
Dovecot可以select剥离域 (如使用username @ domain格式时 , Dovecot用户查找失败 ),但不能进行有条件剥离(例如,如果domain = @ ourdomain.com,剥离域)。 当然,你可以用do语言补丁(用C语言)来添加你的逻辑。
用户名后端也是选项。 你不要给你使用的后端(SQL,LDAP,自定义引擎)。 我可以想象,你有用户名列有两个格式有和没有域 。 现在,您可以将没有域名的所有用户名转换成username @ ourdomain。 您可以将此过程与选项1(roundcube auto append domain)结合使用,以便用户名和用户名@ ourdomain都可以login。
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 ), ourdomain.tld/roundcube这个选项设置为
$config['username_domain'] = '%n';
如果你已经使用了子域名(比如mail.domain.tld ), mail.domain.tld这个选项设置为
$config['username_domain'] = '%t';
当用户提供他的完整电子邮件作为login,该电子邮件将被使用,没有任何改变。 如果省略域部分,则RoundCube将使用URL域来完成。 在roundcube的configuration中还有一些简洁的选项。