Maildrop – automatické vytváření adresářů

V návaznosti na návod na mailserver s využitím virtuálních uživatelů uložených v MySQL sem přidám jen takovou malou poznámku k maildropu. Určitě jste narazili na potřebu automaticky zakládat adresář uživatele kam se budou doručovat jeho emaily.

V odkazovaném návodu to řeším perlovým skriptem, který se musí spustit po založení uživatele a vygeneruje vhodnou konfiguraci pro maildrop. Toto řešení má pár vad, tou největší je nutnost spouštění skriptu aby vůbec pošta pro daného uživatele nějak fungovala. Při správě přes shellové skripty je to v pohodě, ale pokud chce člověk použít webové rozhraní, tak je spouštění suidnutého perlového skriptu docela nepříjemnou komplikací.

Řešením je změnit konfiguraci maildropu. Pokud existuje konfigurační soubor pro daného uživatele, použít ho, ale když neexistuje tak vytvořit uživateli potřebný adresář pro poštu a doručit mu jí.

Pro tuto změnu je nunté upravit kounfigraci postfixu, tak aby maildropu při doručování emailu přidával další potřebné parametry. V souboru /etc/postfix/master.cf upravte konfiguraci pro transport maildrop do následující podoby:

maildrop  unix  -       n       n       -       -       pipe
    flags=R user=virtual:virtual argv=/usr/bin/maildrop -d ${recipient} ${user} ${nexthop}

Dál je nutné upravit „globální“ filtrovací pravidla pro maildrop v souboru /home/virtual/.mailfilter

LOGNAME=tolower($LOGNAME)
UZIVATEL=tolower($1)
DOMENA=tolower($2)
 
`/usr/bin/test -d /home/virtual/$DOMENA/$UZIVATEL/Maildir/`
if ($RETURNCODE == 1)
{
  `/bin/mkdir -p /home/virtual/$DOMENA/$UZIVATEL`
  `/usr/bin/maildirmake /home/virtual/$DOMENA/$UZIVATEL/Maildir`
}
 
`/usr/bin/test -d /home/virtual/$DOMENA/$UZIVATEL/Maildir/.Sent/`
if ($RETURNCODE == 1)
{
`/usr/bin/maildirmake /home/virtual/$DOMENA/$UZIVATEL/Maildir/.Sent`
}
 
`/usr/bin/test -d /home/virtual/$DOMENA/$UZIVATEL/Maildir/.Trash/`
if ($RETURNCODE == 1)
{
`/usr/bin/maildirmake /home/virtual/$DOMENA/$UZIVATEL/Maildir/.Trash`
}
 
`/usr/bin/test -d /home/virtual/$DOMENA/$UZIVATEL/Maildir/.Drafts/`
if ($RETURNCODE == 1)
{
`/usr/bin/maildirmake /home/virtual/$DOMENA/$UZIVATEL/Maildir/.Drafts/cur`
}
 
# zkontroluji existenci uzivatelskeho filtru
`/usr/bin/test -r /home/virtual/.mailfilters/$LOGNAME`
if ( $RETURNCODE == 0 )
{
  # filtr existuje, proto ho pouziju
  logfile "/home/virtual/logs/$LOGNAME"
  log "Including /home/virtual/.mailfilters/$LOGNAME"
  include "/home/virtual/.mailfilters/$LOGNAME"
}
else
{ 
  # filtr neexistuje, takze dorucim email primo do uzivatelovy schranky
  logfile "/home/virtual/logs/$LOGNAME"
  to "/home/virtual/$DOMENA/$UZIVATEL/Maildir/."
}

Pokud použijete toto řešení, máte stále ještě možnost používat pro každého uživatele jeho vlastní třídící pravidla generovaná skriptem, který používám ve svém návodu na mailserver.

Napsat komentář