[Dovecot] Auto create folder(s)

mouss mlist.only at free.fr
Mon Oct 1 12:09:16 EEST 2007


Bill Landry wrote:
> mouss wrote the following on 9/30/2007 3:45 PM -0800:
>> 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.
>>>     
>> Charles did not say you need 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>
>>> }
>>>
>>> Thats it!
>>>
>>>     
>> There's a pattern here. instead of
>>
>> 	if (file|dir) (exists|is writable) ... write to ...
>>
>> use
>>
>> 	write to ...
>> 	if (error)  handle it
>>
>> This has multiple benefits:
>> - optimized for the common case
>> - less vulnerable to race conditions (things happen between the time you
>> check and the time you do).
>> - if the file/dir exists/writable, no check to do.
>>
>> with maildrop, this is done with exceptions (otherwise trying to deliver
>> would result in an error reported to the MTA).
>>
>> # try writing
>> exception {
>> 	TO $folder
>> }
>> # failed. maybe folder doesn't exist. try creating it
>> # add whatever checks or actins inside this...
>> `$maildirmake $folder`
>> # try writing again
>> TO $folder
>>
>>
>> you can adapat this to delivering spam to the Inbox if the user has
>> deleted his Junk folder (a method to opt-out).
>>   
> Mouss, your post got me thinking, and after a bit of struggle and
> testing, I was finally able to come up with a working maildroprc
> configuration that would first attempt message delivery and then
> fall-back to creating the maildir as an exception if the maildir did not
> exist. 

you could have just asked. I didn't want to post mine since this is not 
a maildrop list ;-p



> [snip]



More information about the dovecot mailing list