Fábio M. Catunda wrote: > Charles Marcus escreveu: >> On 9/26/2007, Bill Landry ([EMAIL PROTECTED]) 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).