What is the correct way to configure the mail_location option for Mailidr format?

deoren Dovecot-mailing-list at whyaskwhy.org
Wed Oct 22 15:00:40 UTC 2014


On 10/22/2014 2:29 AM, Steffen Kaiser wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> On Tue, 21 Oct 2014, deoren wrote:
> 
>> What is the correct way to configure the mail_location option for
>> Mailidr format?
> 
> mail_location = maildir:<path>
> 
>> I've long had it setup this way:
>> 
>>    mail_location = maildir:/var/vmail/%d/%n
>> 
>> Is that correct?
> 
> any path is OK, as long:
> 
> 1) it identifies the mail storage uniquely for the user,
> 2) does not store any other information in it.
> 
>> Here is an example error message I ran into:
>> 
>>    stat(/var/vmail/example.com/username/.dovecot.lda-dupes/tmp)
>> failed: Not a directory
> 
> That's because you use $HOME == Maildir root.
> 
>> Looking at some other guides/tutorials shows something more like:
>> 
>>    mail_location = maildir:/var/vmail/%d/%n/Maildir
> 
> "Maildir" is the default name for "Maildir"-type mail storeage root. No
> more, no less. If Dovecot is automatically detecting the type of
> storage, it probes for this directory name in $HOME.
> 
>> I assume the latter is how it's supposed to be done? If so, that would
> 
> No, you are not "supposed" to do so.
> 
>> I did review the official docs here:
>> 
>>    http://wiki2.dovecot.org/MailLocation/Maildir
>> 
>> but I didn't find where it explicitly warns against setting home ==
>> maildir root. It should probably be apparent, but it wasn't to me when
>> I first
> 
> it applies to all mail storages.
> 
> - -- Steffen Kaiser

Thanks for the reply and for answering my questions.

Just to make sure I understand properly, I have a few additional 
questions that I am hoping will cement really drive the point home so to 
speak. Regarding the guide that I followed, it suggests the following 
userdb and mail_location configuration:

userdb {
   driver = static
   args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

mail_location = maildir:/var/mail/vhosts/%d/%n

This results in the $HOME == Maildir root situation which you mentioned 
shouldn't be done, correct? Instead mail_location should point to some 
other directory, perhaps one of:

* mail_location = /var/mail/vhosts/%d/%n/Maildir
* mail_location =  ~/Maildir

If I understand properly the mail_location doesn't have to be a 
subdirectory within the home directory, it just typically is in common 
examples? If so, that guide should probably be updated to use one of the 
above mail_location settings. If you will confirm that is the case I'll 
submit a GitHub pull request as previously mentioned so it can be 
corrected.

Apologies if this is rehashing what you've already said, I'm just 
looking to make sure I understand this 100%.

So for cases where I have made the mistake like I mentioned above, how 
would I (properly) fix the problem?

After stopping Dovecot, I ended up doing this:

#1) service dovecot stop
#2) cd /var/vmail/example.com/username/
#3) mkdir Maildir
#4) mv -i * Maildir/
#5) mv -i .* Maildir/
#6) chown -R vmail:vmail /var/vmail/example.com/username/
#7) service dovecot start

which moved the content into the Maildir subfolder and fixed permissions 
back to what is specified in the conf files. I also adjusted 
mail_location like so:

mail_location = maildir:~/Maildir

and I made sure that the home setting is configured as /var/vmail/%d/%n

That seems to work fine, but I still got error messages like this when 
using doveadm search

"Error: Syncing mailbox dovecot.lda-dupes failed: Internal error 
occurred."

In my testing I found that I could move the file from this location:

     /var/vmail/example.com/username/Maildir/.dovecot.ldap-dupes

to this one:

     /var/vmail/example.com/username/.dovecot.ldap-dupes

choosing to overwrite the file if it should be there and the error 
message would not be generated anymore. This suggests that I shouldn't 
have moved it in the first place.

Looking through the mailing list archives I found a message thread 
titled "Lifetime of redirect info stored by Sieve in .dovecot.lda-dupes" 
which indicates that the Message-ID and recipient of forwarded messages 
are stored in .dovecot.ldap-dupes files. I do forward mail daily from 
the two accounts where doveadm search generates the errors, so it sounds 
like I would probably be OK to just nuke the file in this location:

      /var/vmail/example.com/username/Maildir/.dovecot.ldap-dupes

and let it be auto-generated in the proper location the next time mail 
is forwarded. Can you confirm whether that is the case?

I appreciate your help.


More information about the dovecot mailing list