Přehled o velikosti mailových schránek
Pro nové webové rozhraní webhostingu jsme řešili jak efektivně získávat informace o velikosti obsazeného místa poštovními schránkami.
Pro nové webové rozhraní webhostingu jsme řešili jak efektivně získávat informace o velikosti obsazeného místa poštovními schránkami.
Maily jsou na serveru uloženy ve formátu Maildir++, stará se o ně dovecot. Doručování do schránek samozřejmě také zajišťuje dovecot. Pro jednotlivé schránky využíváme quotu.
Standardně máme zkompilovaný dovecot s podporou LDAPu ze kterého se tahají informace o uživatelích, ale protože umožňuje ukládat informace o zabraném prostoru i do MySQL, překompiloval jsem dovecot s podporou této databáze.
V MySQL databázi jsem vytvořil tabulku kam bude dovecot cpát informace o zabraném místě:
CREATE TABLE IF NOT EXISTS `mail_usrquota` ( `username` varchar(100) NOT NULL, `bytes` bigint(20) NOT NULL DEFAULT '0', `messages` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Následovala lehká změna v konfiguraci z Maildir++ quoty na ukládání do MySQL:
Změny v konfiguračním souboru dovecot.conf:
dict { quotadict = mysql:/etc/dovecot/dovecot-dict-sql.conf } plugin { quota = dict:user::proxy::quotadict }
Obsah souboru dovecot-dict-sql.conf:
connect = host=DBSERVER dbname=DBNAME user=USERNAME password=PASSWORD map { pattern = priv/quota/storage table = mail_usrquota username_field = username value_field = bytes } map { pattern = priv/quota/messages table = mail_usrquota username_field = username value_field = messages }
Po restartu dovecotu automaticky vše fungovalo. Informace o obsazeném místě se při použití pěkně vyplňují do databáze, vidíme tam online aktuální velikost mailboxu a počet zpráv v něm.
Uživatelům tyto informace zpřístupňujeme přímo ve webové administraci:
Funkčnost quoty přes IMAP zůstává stále zachována, takže informaci o zabraném prostoru vidí uživatel i ve svém mailovém klientovi (u nás je webmailem roundcube, který to pěkně zobrazuje v zápatí stránky).