[Dovecot] Auto create folder(s)

Bill Landry bill at inetmsg.com
Wed Sep 26 23:22:09 EEST 2007


Fábio M. Catunda wrote:
> Charles Marcus escreveu:
>> On 9/26/2007, Bill Landry (bill at inetmsg.com) wrote:
>>>> But with maildrop you still run the process of creating/checking on
>>>> every delivery, same thing as dovecot, right?
>>
>>> Correct. If the folder does not exist, maildrop will create it on
>>> first delivery. If the end user deletes the folder, maildrop will
>>> recreate the folder on the next message delivery to that account.
>>
>> Could it could be written to simply create the folder if the target
>> folder doesn't exist (ie, if the initial save fails due to
>> non-existent folder)? Then there would be no performance hit...
>>
> There will be a performance hit couse you have to check if the folder
> exists or not.
> With maildrop its pretty easy to do that, but you will have an extra
> access to your HD on every message delivery.
> Maildrop can run shell commands it the user that runs it have a valid
> shell (Debian-exim do NOT have a valid shell, I created another user
> just to make the delivery), so, you can run something like
> 
> /^Envelope-to:.*/
> getaddr($MATCH) =~ /^.*/;
> DEST = $MATCH
> USER = `/bin/echo $DEST | /usr/bin/cut -f1 -d'@'`
> DOMAIN = `/bin/echo $DEST | /usr/bin/cut -f2 -d'@'`
> 
> DOEXIST=`[ -d /var/mail/$DOMAIN/$USER/Maildir ]; echo $?`
> 
> if ($DOEXIST == 1){
>    <RUN SOMETHING HERE TO CREATE MAILDIRS>
> }

I simply use this in the maildroprc:

# Auto-Create new mailbox
if (/^Received:/)
{
        `test -d $DEFAULT`
        if ($RETURNCODE == 1)
        {
                `/usr/local/bin/maildirmake $DEFAULT`
                `/usr/local/bin/maildirmake -f Spam $DEFAULT`
                `echo "Spam" >> $DEFAULT/subscriptions`
        }
}

# Deliver to Inbox or Spam box (create spam box if it does not exist)
if (/^X-Spam-Flag: YES/:h)
{
        `test -d $DEFAULT/.Spam`
        if ($RETURNCODE == 1)
        {
                `/usr/local/bin/maildirmake -f Spam $DEFAULT`
                `echo "Spam" >> $DEFAULT/subscriptions`
        }
        exception {
                to "$DEFAULT/.Spam"
        }
        # if all else fails, do regular delivery
        exception {
                to "$DEFAULT"
        }
}
else
{
        exception {
                to "$DEFAULT"
        }
}

Maildrop automatically creates the maildir for new accounts if a valid e-mail
address is found and the account has not already been created when the first
message arrives for the new user.

It also tests that the spam folder exists whenever a message is received that
contains the spam x-header, so that the folder can be created prior to the spam
message delivery (this test is very fast and does not seem to hinder performance
since maildrop written in C++ and is highly optimized to support these kinds of
functions).

Bill


More information about the dovecot mailing list