Dovecot configuration file
"dovecot -n" command gives a clean output of the changed settings. Use it instead of copy&pasting this file when posting to the Dovecot mailing list.
'#' character and everything after it is treated as comments. Extra spaces and tabs are ignored. If you want to use either of these explicitly, put the value inside quotes, eg.: key="# char and trailing whitespace "
Default values are shown for each setting, it's not required to uncomment any of the lines. Exception to this are paths, they're just examples with the real defaults being based on configure options. The paths listed here are for configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-ssldir=/etc/ssl
base_dir=/var/run/dovecot/ Base directory where to store runtime data. protocols=imap imaps Protocols we want to be serving: imap imaps pop3 pop3s If you only want to use dovecot-auth, you can set this to "none". listen=*IP or host address where to listen in for connections. It's not currently possible to specify multiple addresses. "*" listens in all IPv4 interfaces. "[::]" listens in all IPv6 interfaces, but may also listen in all IPv4 interfaces depending on the operating system.
If you want to specify ports for each service, you will need to configure these settings inside the protocol imap/pop3 { ... } section, so you can specify different ports for IMAP/POP3. For example:
# protocol imap {# listen=*:10143# ssl_listen=*:10943# ..# }# protocol pop3 {# listen=*:10100# ..# } disable_plaintext_auth=yes Disable LOGIN command and all other plaintext authentications unless SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP matches the local IP (ie. you're connecting from the same computer), the connection is considered secure and plaintext authentication is allowed. shutdown_clients=yes Should all IMAP and POP3 processes be killed when Dovecot master process shuts down. Setting this to "no" means that Dovecot can be upgraded without forcing existing client connections to close (although that could also be a problem if the upgrade is eg. because of a security fix). This however means that after master process has died, the client processes can't write to log files anymore.Logging
log_path=Log file to use for error messages, instead of sending them to syslog. /dev/stderr can be used to log into stderr. info_log_path=Log file to use for informational and debug messages. Default is the same as log_path. log_timestamp="%b %d %H:%M:%S " Prefix for each line written to log file. % codes are in strftime(3) format. syslog_facility=mail Syslog facility to use if you're logging to syslog. Usually if you don't want to use "mail", you'll use local0..local7. Also other standard facilities are supported.SSL settings
ssl_listen=IP or host address where to listen in for SSL connections. Defaults to above if not specified. ssl_disable=no Disable SSL/TLS support. ssl_cert_file=/etc/ssl/certs/dovecot.pem PEM encoded X.509 SSL/TLS certificate and private key. They're opened before dropping root privileges, so keep the key file unreadable by anyone but root. Included doc/mkcert.sh can be used to easily generate self-signed certificate, just make sure to update the domains in dovecot-openssl.cnf ssl_key_file=/etc/ssl/private/dovecot.pem ssl_key_password=If key file is password protected, give the password here. Alternatively give it when starting dovecot with -p parameter. ssl_ca_file=File containing trusted SSL certificate authorities. Usually not needed. The CAfile should contain the CA-certificate(s) followed by the matching CRL(s). CRL checking is new in dovecot .rc1 ssl_verify_client_cert=no Request client to send a certificate. If you also want to require it, set ssl_require_client_cert=yes in auth section. ssl_parameters_regenerate=168 How often to regenerate the SSL parameters file. Generation is quite CPU intensive operation. The value is in hours, 0 disables regeneration entirely. ssl_cipher_list=ALL:!LOW SSL ciphers to use verbose_ssl=no Show protocol level SSL errors.Login processes
chroot login process to the login_dir. Only reason not to do this is if you wish to run the whole Dovecot without roots.
User to use for the login process. Create a completely new user for this, and don't use it anywhere else. The user must also belong to a group where only it has access, it's used to control access for authentication process. Note that this user is NOT used to access mails.
Mailbox locations and namespaces
mail_location=Location for users' mailboxes. This is the same as the old default_mail_env setting. The default is empty, which means that Dovecot tries to find the mailboxes automatically. This won't work if the user doesn't have any mail yet, so you should explicitly tell Dovecot the full location.If you're using mbox, giving a path to the INBOX file (eg. /var/mail/%u) isn't enough. You'll also need to tell Dovecot where the other mailboxes are and where Dovecot can place its index files. This is called the "root mail directory", and it must be the first path given in the mail_location setting.
There are a few special variables you can use, eg.:
# %u - username# %n - user part in user@domain, same as %u if there's no domain# %d - domain part in user@domain, empty if there's no domain# %h - home directory
See doc/wiki/Variables.txt for full list. Some examples:
# mail_location=maildir:~/Maildir# mail_location=mbox:~/mail:INBOX=/var/mail/%u# mail_location=mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
You can have private, shared and public namespaces. The only difference between them is how Dovecot announces them to client via NAMESPACE extension. Shared namespaces are meant for user-owned mailboxes which are shared to other users, while public namespaces are for more globally accessible mailboxes.
REMEMBER: If you add any namespaces, the default namespace must be added explicitly, ie. mail_location does nothing unless you have a namespace without a location setting. Default namespace is simply done by having a namespace with empty prefix.
separator=Hierarchy separator to use. You should use the same separator for all namespaces or some clients get confused. '/' is usually a good one. The default however depends on the underlying mail storage format. prefix=Prefix required to access this namespace. This needs to be different for all namespaces. For example "Public/". location=Physical location of the mailbox. This is in same format as mail_location, which is also the default for it. inbox=yes There can be only one INBOX, and this setting defines which namespace has it. hidden=yes If namespace is hidden, it's not advertised to clients via NAMESPACE extension or shown in LIST replies. This is mostly useful when converting from another server with different namespaces which you want to depricate but still keep working. For example you can create hidden namespaces with prefixes "~/mail/", "~%u/mail/" and "mail/". } mail_extra_groups=Grant access to these extra groups for mail processes. Typical use would be to give "mail" group write access to /var/mail to be able to create dotlocks. mail_full_filesystem_access=no Allow full filesystem access to clients. There's no access checks other than what the operating system does for the active UID/GID. It works with both maildir and mboxes, allowing you to prefix mailboxes names with eg. /path/ or ~user/.Mail processes
mail_debug=no Enable mail process debugging. This can help you figure out why Dovecot isn't finding your mails. mail_log_prefix="%Us(%u): " Log prefix for mail processes. See doc/wiki/Variables.txt for list of possible variables you can use. mail_log_max_lines_per_sec=10 Max. number of lines a mail process is allowed to log per second before it's throttled. 0 means unlimited. Typically there's no need to change this unless you're using mail_log plugin, which may log a lot. mmap_disable=no Don't use mmap() at all. This is required if you store indexes to shared filesystems (NFS or clustered filesystem). mmap_no_write=no Don't write() to mmaped files. This is required for some operating systems which use separate caches for them, such as OpenBSD. dotlock_use_excl=no Rely on O_EXCL to work when creating dotlock files. The default is to use hard linking. O_EXCL makes the dotlocking faster, but it doesn't always work with NFS. fsync_disable=no Don't use fsync() or fdatasync() calls. This makes the performance better at the cost of potential data loss if the server (or the file server) goes down. lock_method=fcntl Locking method for index files. Alternatives are fcntl, flock and dotlock. Dotlocking uses some tricks which may create more disk I/O than other locking methods. NOTE: If you use NFS, remember to change also mmap_disable setting! mail_drop_priv_before_exec=no Drop all privileges before exec()ing the mail process. This is mostly meant for debugging, otherwise you don't get core dumps. It could be a small security risk if you use single UID for multiple users, as the users could ptrace() each others processes then. verbose_proctitle=no Show more verbose process titles (in ps). Currently shows user name and IP address. Useful for seeing who are actually using the IMAP processes (eg. shared mailboxes or if same uid is used for multiple accounts). first_valid_uid=500 Valid UID range for users, defaults to 500 and above. This is mostly to make sure that users can't log in as daemons or other system users. Note that denying root logins is hardcoded to dovecot binary and can't be done even if first_valid_uid is set to 0. last_valid_uid=0 first_valid_gid=1 Valid GID range for users, defaults to non-root/wheel. Users having non-valid GID as primary group ID aren't allowed to log in. If user belongs to supplementary groups with non-valid GIDs, those groups are not set. last_valid_gid=0 max_mail_processes=1024 Maximum number of running mail processes. When this limit is reached, new users aren't allowed to log in. mail_process_size=256 Set max. process size in megabytes. Most of the memory goes to mmap()ing files, so it shouldn't harm much even if this limit is set pretty high. mail_max_keyword_length=50 Maximum allowed length for mail keyword name. It's only forced when trying to create new keywords. valid_chroot_dirs=':' separated list of directories under which chrooting is allowed for mail processes (ie. /var/mail will allow chrooting to /var/mail/foo/bar too). This setting doesn't affect login_chroot or auth chroot variables. WARNING: Never add directories here which local users can modify, that may lead to root exploit. Usually this should be done only if you don't allow shell access for users.
Default chroot directory for mail processes. This can be overridden for specific users in user database by giving /http://www.360doc.cn/article/ in user's home directory (eg. /home/http://www.360doc.cn/article/user chroots into /home). Note that usually there is no real need to do chrooting, Dovecot doesn't allow users to access files outside their mail directory anyway.
Mailbox handling optimizations
mail_cache_fields=Space-separated list of fields to initially save into cache file. Currently these fields are allowed:# flags, date.sent, date.received, size.virtual, size.physical# mime.parts, imap.body, imap.bodystructure
Different IMAP clients work in different ways, so they benefit from different cached fields. Some do not benefit from them at all. Caching more than necessary generates useless disk I/O, so you don't want to do that either.
Dovecot attempts to automatically figure out what client wants and it keeps only that. However the first few times a mailbox is opened, Dovecot hasn't yet figured out what client needs, so it may not perform optimally. If you know what fields the majority of your clients need, it may be useful to set these fields by hand. If client doesn't actually use them, Dovecot will eventually drop them.
Usually you should just leave this field alone. The potential benefits are typically unnoticeable.
mail_never_cache_fields=Space-separated list of fields that Dovecot should never save to cache file. Useful if you want to save disk space at the cost of more I/O when the fields needed. mail_cache_min_mail_count=0 The minimum number of mails in a mailbox before updates are done to cache file. This allows optimizing Dovecot's behavior to do less disk writes at the cost of more disk reads. mailbox_idle_check_interval=30 When IDLE command is running, mailbox is checked once in a while to see if there are any new mails or other changes. This setting defines the minimum time to wait between those checks. Dovecot is however able to use dnotify and inotify with Linux to reply immediately after the change occurs. mail_save_crlf=no Save mails with CR+LF instead of plain LF. This makes sending those mails take less CPU, especially with sendfile() syscall with Linux and FreeBSD. But it also creates a bit more disk I/O which may just make it slower. Also note that if other software reads the mboxes/maildirs, they may handle the extra CRs wrong and cause problems.Maildir-specific settings
maildir_stat_dirs=noBy default LIST command returns all entries in maildir beginning with a dot. Enabling this option makes Dovecot return only entries which are directories. This is done by stat()ing each entry, so it causes more disk I/O. (For systems setting struct dirent->d_type, this check is free and it's done always regardless of this setting)
maildir_copy_with_hardlinks=no When copying a message, do it with hard links whenever possible. This makes the performance much better, and it's unlikely to have any side effects. maildir_copy_preserve_filename=no When copying a message, try to preserve the base filename. Only if the destination mailbox already contains the same name (ie. the mail is being copied there twice), a new name is given. The destination filename check is done only by looking at dovecot-uidlist file, so if something outside Dovecot does similar filename preserving copies, you may run into problems. NOTE: This setting requires maildir_copy_with_hardlinks=yes to work.mbox-specific settings
mbox_read_locks=fcntl Which locking methods to use for locking mbox. There are four available:# dotlock: Create You can use multiple locking methods; if you do the order they're declared in is important to avoid deadlocks if other MTAs/MUAs are using multiple locking methods as well. Some operating systems don't allow using some of them simultaneously. This would write rawlogs into ~/dovecot.rawlog/ directory: This would attach gdb into the imap process and write backtraces into /tmp/gdbhelper.* files: # delay-newmail:# Send EXISTS/RECENT new mail notifications only when replying to NOOP# and CHECK commands. Some clients ignore them otherwise, for example OSX# Mail ( # %v - Mailbox's IMAP UIDVALIDITY# %u - Mail's IMAP UID# %m - MD5 sum of the mailbox headers in hex (mbox only)# %f - filename (maildir only) If you want UIDL compatibility with other POP3 servers, use: Note that Outlook 2003 seems to have problems with %v.%u format which was Dovecot's default, so if you're building a new server it would be a good idea to change this. %08Xu%08Xv should be pretty fail-safe. NOTE: Nowadays this is required to be set explicitly, since the old default was bad but it couldn't be changed without breaking existing installations. %08Xu%08Xv will be the new default, so use it for new installations. # %t - number of TOP commands# %p - number of bytes sent to client as a result of TOP command# %r - number of RETR commands# %b - number of bytes sent to client as a result of RETR command# %d - number of deleted messages# %m - number of messages (before deletion)# %s - mailbox size in bytes (before deletion) mail_plugins=Support for dynamically loadable plugins. mail_plugins is a space separated list of plugins to load. mail_plugin_dir=/usr/lib/dovecot/pop3 pop3_client_workarounds=Workarounds for various client bugs: # outlook-no-nuls:# Outlook and Outlook Express hang if mails contain NUL characters.# This setting replaces them with 0x80 character.# oe-ns-eoh:# Outlook Express and Netscape Mail breaks if end of headers-line is# missing. This option simply sends it if it's missing. The list is space-separated. Username character translations before it's looked up from databases. The value contains series of from ->to characters. For example "#@/@" means that '#' and '/' characters are translated to '@'. If you want to allow master users to log in by specifying the master username within the normal username string (ie. not using SASL mechanism's support for it), you can specify the separator character here. The format is then # plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi Password database is used to verify user's password (and nothing more). You can have multiple passdbs and userdbs. This is useful if you want to allow both system users (/etc/passwd) and virtual users to login without duplicating the system users into virtual database. By adding master=yes setting inside a passdb you make the passdb a list of "master users", who can log in as anyone else. Unless you're using PAM, you probably still want the destination user to be looked up from passdb that it really exists. This can be done by adding pass=yes setting to the master passdb. Users can be temporarily disabled by adding a passdb with deny=yes. If the user is found from that database, authentication will fail. The deny passdb should always be specified before others, so it getdbox-specific settings
dbox_rotate_size=2048 Maximum dbox file size in kilobytes until it's rotated. dbox_rotate_min_size=16 Minimum dbox file size in kilobytes before it's rotated (overrides dbox_rotate_days) dbox_rotate_days=0 Maximum dbox file age in days until it's rotated. Day always begins from midnight, so 1=today, 2=yesterday, etc. 0=check disabled.IMAP specific settings
protocol imap { login_executable=/usr/libexec/dovecot/imap-login Login executable location. mail_executable=/usr/libexec/dovecot/imap IMAP executable location. Changing this allows you to execute other binaries before the imap process is executed.POP3 specific settings
protocol pop3 { login_executable=/usr/libexec/dovecot/pop3-login Login executable location. mail_executable=/usr/libexec/dovecot/pop3 POP3 executable location. See IMAP's mail_executable above for examples how this could be changed. pop3_no_flag_updates=no Don't try to set mails non-recent or seen with POP3 sessions. This is mostly intended to reduce disk I/O. With maildir it doesn't move files from new/ to cur/, with mbox it doesn't write Status-header. pop3_enable_last=no Support LAST command which exists in old POP3 specs, but has been removed from new ones. Some clients still wish to use this though. Enabling this makes RSET command clear all \Seen flags from messages. pop3_reuse_xuidl=no If mail has X-UIDL header, use it as the mail's UIDL. pop3_lock_session=no Keep the mailbox locked for the entire POP3 session. pop3_uidl_format=POP3 UIDL (unique mail identifier) format to use. You can use following variables:LDA specific settings
protocol lda { [email protected] Address to use when sending rejection mails. hostname=Hostname to use in various parts of sent mails, eg. in Message-Id. Default is the system's real hostname. mail_plugins=Support for dynamically loadable plugins. mail_plugins is a space separated list of plugins to load. mail_plugin_dir=/usr/lib/dovecot/lda sendmail_path=/usr/lib/sendmail Binary to use for sending mails. auth_socket_path=/var/run/dovecot/auth-master UNIX socket path to master authentication server to find users. }Authentication processes
auth_executable=/usr/libexec/dovecot/dovecot-auth Executable location auth_process_size=256 Set max. process size in megabytes. auth_cache_size=0 Authentication cache size in kilobytes. 0 means it's disabled. Note that bsdauth, PAM and vpopmail require cache_key to be set for caching to be used. auth_cache_ttl=3600 Time to live in seconds for cached data. After this many seconds the cached record is no longer used, *except* if the main database lookup returns internal failure. We also try to handle password changes automatically: If user's previous authentication was successful, but this one wasn't, the cache isn't used. For now this works only with plaintext authentication. auth_realms=Space separated list of realms for SASL authentication mechanisms that need them. You can leave it empty if you don't want to support multiple realms. Many clients simply use the first one listed here, so keep the default realm first. auth_default_realm=Default realm/domain to use if none was specified. This is used for both SASL realms and appending @domain to username in plaintext logins. auth_username_chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@ List of allowed characters in username. If the user-given username contains a character not listed in here, the login automatically fails. This is just an extra check to make sure user can't exploit any potential quote escaping vulnerabilities with SQL/LDAP databases. If you want to allow all characters, set this value to empty. auth_username_translation=