目前,我们有一个功能齐全的 POP/IMAP/Webmail 系统(使用 Dovecot 和 Roundcube),在其预期设计中是一座闪闪发光的完美之塔。我们有成千上万的客户属于一个“默认”域(我称之为ourdomain.com),并使用用户名和密码成功登录。我们还有几千人拥有我们托管的域,他们使用完整的电子邮件地址和密码(称为 customerdomain.com)成功登录。自 1990 年代以来一直如此,有很多根深蒂固的客户配置。
现在的问题是人们习惯于使用完整的电子邮件地址登录 Web 表单,必须提醒使用 ourdomain.com 的人只使用他们的用户名登录 Webmail。这是我们的技术支持部门每周接到几次电话(即使我也为此感到内疚,我只是不为此打电话给技术支持),并且可能应该通过某种软件解决方案来消除。
那么我们如何让 Roundcube 或 Dovecot 将“[email protected]”识别为“用户名”,而无需更改我们系统中每个人的实际用户名?但只有当域是“ourdomain.com”而不是“customerdomain.com”时才这样做。请记住,每次我们进行安全升级时,我们所做的任何自定义编码都必须重新实现,我们只会将该选项视为最后可能的选择。
TL;博士:
我们需要这样的逻辑:
if $email contains @ourdomain.com
{
remove @ourdomain.com;
submit to roundcube;
} else {
submit to roundcube;
}
这个问题可以在 roundcube、dovecot 或您的用户名后端中解决。
如果没有提供域(如 Kondybas 所提议),Roundcube可以选择自动附加域部分。但在你的情况下它不会太有用。当然,您可以修补 roundcube(使用 PHP 语言)来添加您的逻辑。
Dovecot 可以选择剥离域(如 Dovecot 中建议的,使用 username@domain 格式时用户查找失败)但它不能进行条件剥离(例如,如果 domain = @ourdomain.com 则剥离域)。当然,您可以修补 dovecot(使用 C 语言)来添加您的逻辑。
用户名后端也是选项。您不提供您使用的后端(SQL、LDAP、自定义引擎)。我可以想象你的 username 列有两种格式,有和没有 domain。现在,您可以将所有没有域的用户名转换为 username@ourdomain。您可以将此过程与选项 1(圆形立方体自动附加域)结合使用,以便用户名和用户名@ourdomain 都可以登录。
RoundCube
有一个选项叫username_domain
如果您使用过子目录(如
ourdomain.tld/roundcube
),请将此选项设置为如果您使用过子域(如
mail.domain.tld
),请将此选项设置为当用户提供他的完整电子邮件作为登录时,该电子邮件将被使用而无需任何更改。如果省略域部分,
RoundCube
将使用 URL 域来完成。roundcube 的配置中还有许多简洁的选项。