Portál AbcLinuxu, 30. dubna 2025 10:09

Dovecot a zápis informací o obsazeném místě do mysql

2.9.2010 22:15 | Přečteno: 898× | Diskuze | poslední úprava: 2.9.2010 22:16

V Dovecotu se často používají quoty v Maildir++ formátu. Informaci o obsazeném místě může uživatel získat v rámci IMAP sezení, v mailovém klientu vidí kolik místa je zabráno. Když řešíte vlastní webovou administraci k mailům a chcete uživatelům zobrazovat zabrané místo, nemůžete chtít aby se někdo přihlašoval do webového rozhraní administrace a ještě potom k IMAPu.

Jednou z možností je číst je přímo z maildiru uživatele - v perlu existuje např. Maildir::Quota, ale po překročení velikost 2GiB dojde k přetečení. Také je docela fuj nutnost pravidelně procházet všechny maildiry, načítat jejich velikost a pak to cpát do DB. Naštěstí Dovecot umí sám přímo zapisovat informace o zabraném místě do databáze MySQL. Protože máme standardně balíčky dovecotu pouze s podporou LDAPu, musel jsem ho překompilovat a podporu MySQL mu přidat. Postup konfigurace Dovecotu pro zápis informací o zabraném místě do 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
  # quota_rule je pro každého uživatele generováno zvlášť z LDAPu.
}
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 funguje. Informace o obsazeném místě se při použití pěkně vyplňují do databáze.
Text je také k nalezení na mém novém blogu.        

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

Max avatar 3.9.2010 10:26 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Dovecot a zápis informací o obsazeném místě do mysql
Odpovědět | Sbalit | Link | Blokovat | Admin
Hmm, pěkné info :).
Zdar Max
Měl jsem sen ... :(
3.9.2010 14:48 prOm3TheuS | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: Dovecot a zápis informací o obsazeném místě do mysql
Odpovědět | Sbalit | Link | Blokovat | Admin
Diky moc, tohle se mi bude brzo hodit.
Your distro, your rules!

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.