
目前,我們擁有一個完全運作的 POP/IMAP/Webmail 系統(使用 Dovecot 和 Roundcube),該系統在其預期設計中是一座閃閃發光的完美塔。我們有數千名屬於「預設」網域(我稱之為 ourdomain.com)的客戶,並使用使用者名稱和密碼成功登入。我們還有數千名擁有我們託管的網域的人,他們使用完整的電子郵件地址和密碼成功登入(稱為 customerdomain.com)。自 20 世紀 90 年代以來一直如此,有許多根深蒂固的客戶配置。
現在的問題是,人們習慣使用完整的電子郵件地址登入網頁表單,必須提醒使用 ourdomain.com 的人使用以下方式登入網路郵件僅有的他們的用戶名。我們的技術支援部門每週都會接到幾次這樣的電話(即使我對這樣做感到內疚,我只是不會就此致電技術支援),並且可能應該透過某種軟體解決方案來消除。
那我們如何讓 Roundcube 或 Dovecot 識別“[電子郵件受保護]” 作為“用戶名”,而不必更改我們系統中每個人的實際用戶名?但是僅有的如果網域是「ourdomain.com」且不是“customerdomain.com”。請記住,每次進行安全升級時,我們所做的任何自訂編碼都必須重新實現,並且我們只會將該選項視為最後可能的選擇。
長話短說:
我們需要這樣的邏輯:
if $email contains @ourdomain.com
{
remove @ourdomain.com;
submit to roundcube;
} else {
submit to roundcube;
}
答案1
這個問題可以在 roundcube、dovecot 或你的用戶名後端解決。
Roundcube 可以選擇如果未提供網域,則自動附加域部分(根據提議孔迪巴斯)。但對於你的情況來說它不會太有用。當然,您可以修補 roundcube (使用 PHP 語言)來新增您的邏輯。
Dovecot 可以選擇條帶域(如提議的 使用 username@domain 格式時 Dovecot 使用者尋找失敗)但它不能進行條件剝離(例如,如果domain = @ourdomain.com,則剝離域)。當然,您可以修補 dovecot(使用 C 語言)來新增您的邏輯。
使用者名稱後端也是選項。您不提供您使用的後端(SQL、LDAP、自訂引擎)。我可以想像您的用戶名列有兩種格式有和沒有域。現在,您可以將所有沒有網域的使用者名稱轉換為使用者名稱@我們的網域。您可以將此程序與選項 1(roundcube 自動附加網域)結合起來,以便使用者名稱和使用者名稱@ourdomain 都可以登入。
答案2
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 網域來完成。圓形立方體的配置中還有許多簡潔的選項。