[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