{
  "auth_proxy_self": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>If the destination for proxying matches any of the IP addresses listed\nhere, proxying is not performed when <code>proxy_maybe=yes</code> is returned.</p>\n<p>This parameter isn't normally needed; its main use is if the\ndestination IP address belongs to, for instance, a load-balancer rather\nthan the server itself.</p>\n"
  },
  "fs": {
    "tags": [
      "fs"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/fs.html\">Dovecot Filesystems</a>",
      "<code><a href=\"/main/core/summaries/settings.html#fs_name\">fs_name</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#fs_driver\">fs_driver</a></code>"
    ],
    "text": "<p>Create a new <a href=\"/main/core/config/fs.html\">fs</a> to the list of filesystems. The filter name refers\nto <code><a href=\"/main/core/summaries/settings.html#fs_name\">fs_name</a></code> setting.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>fs posix {</span></span>\n<span class=\"line\"><span>  # ...</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div><p>Since an empty <code><a href=\"/main/core/summaries/settings.html#fs_driver\">fs_driver</a></code> default to <code><a href=\"/main/core/summaries/settings.html#fs_name\">fs_name</a></code> there is no\nneed to specify <code><a href=\"/main/core/summaries/settings.html#fs_driver\">fs_driver</a></code> explicitly.</p>\n<p>It's possible to specify the same <code>fs</code> multiple times by separating the\n<code><a href=\"/main/core/summaries/settings.html#fs_name\">fs_name</a></code> and <code><a href=\"/main/core/summaries/settings.html#fs_driver\">fs_driver</a></code> settings:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>fs compress1 {</span></span>\n<span class=\"line\"><span>  fs_driver = compress</span></span>\n<span class=\"line\"><span>}</span></span>\n<span class=\"line\"><span>fs compress2 {</span></span>\n<span class=\"line\"><span>  fs_driver = compress</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "fs_name": {
    "tags": [
      "fs"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs\">fs</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#fs_driver\">fs_driver</a></code>"
    ],
    "text": "<p>Name of the <code><a href=\"/main/core/summaries/settings.html#fs\">fs</a></code>. The <code><a href=\"/main/core/summaries/settings.html#fs_driver\">fs_driver</a></code> setting default to this.</p>\n"
  },
  "fs_driver": {
    "tags": [
      "fs"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code><a href=\"/main/core/summaries/settings.html#fs_name\">fs_name</a></code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs\">fs</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#fs_name\">fs_name</a></code>"
    ],
    "text": "<p>The <code><a href=\"/main/core/summaries/settings.html#fs\">fs</a></code> driver to use. Defaults to <code><a href=\"/main/core/summaries/settings.html#fs_name\">fs_name</a></code>.</p>\n"
  },
  "fs_compress_read_plain_fallback": {
    "tags": [
      "fs-compress"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/fs_compress.html\">fs-compress plugin</a>"
    ],
    "text": "<p>By default <a href=\"/main/core/plugins/fs_compress.html\">fs-compress plugin</a> fails if the file wasn't compressed. If this\nsetting is enabled the file is returned as-is (i.e. allows reading plaintext\nfiles).</p>\n"
  },
  "fs_compress_write_method": {
    "tags": [
      "fs-compress"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/mail_compress.html#compression-methods\">Compression Methods</a>"
    ],
    "text": "<p>Which <a href=\"/main/core/plugins/mail_compress.html#compression-methods\">Compression Method</a> to use for\nwriting new files. Empty value means that compression is disabled.</p>\n"
  },
  "fs_crypt_read_plain_fallback": {
    "tags": [
      "fs-crypt"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>If enabled files that are not encrypted are returned as-is. By default it\nresults in a read error.</p>\n"
  },
  "fs_dict_value_encoding": {
    "tags": [
      "fs-dict"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "raw",
      "hex",
      "base64"
    ],
    "default": "<code>raw</code>",
    "text": "<p>How to encode file contents into the dict value.</p>\n"
  },
  "fs_posix_lock_method": {
    "advanced": true,
    "tags": [
      "fs-posix"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "flock",
      "dotlock"
    ],
    "default": "<code>flock</code>",
    "text": "<p>Lock method to use for locking files. Currently nothing uses <code>lib-fs</code>\nlocking.</p>\n"
  },
  "fs_posix_prefix": {
    "tags": [
      "fs-posix"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Directory prefix where files are read from/written to.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>The trailing <code>/</code> is not automatically added, so using e.g. <code>/tmp/foo</code> as\nprefix will cause <code>/tmp/foofilename</code> to be created.</p>\n</div>\n"
  },
  "fs_posix_mode": {
    "tags": [
      "fs-posix"
    ],
    "values": [
      {
        "label": "Octal Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#octal-unsigned-integer\">octal unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>0600</code>",
    "text": "<p>Mode to use for creating files.</p>\n"
  },
  "fs_posix_autodelete_empty_directories": {
    "tags": [
      "fs-posix"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "default": "<code>no</code>",
    "text": "<p>If the last file in a directory is deleted, should the parent directory be\nautomatically deleted?</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>Using this setting makes the POSIX filesystem behave more like an object\nstorage would.</p>\n</div>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>This setting can cause the POSIX filesystem to also delete the parent directory\nhierarchy farther up than anticipated.</p>\n</div>\n"
  },
  "fs_posix_fsync": {
    "tags": [
      "fs-posix"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>yes</code>",
    "text": "<p>Configure whether <code>fsync()</code> is called after writes to guarantee that the file\nis written to disk.</p>\n"
  },
  "fs_posix_accurate_mtime": {
    "advanced": true,
    "tags": [
      "fs-posix"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Configure whether <code>utimes()</code> is called after writes to guarantee microsecond\nprecision timestamps for files. By default Linux updates the <code>mtime</code> only on\ntimer interrupts, which is not remotely close to microsecond precision.</p>\n"
  },
  "login_proxy_notify_path": {
    "default": "<code>proxy-notify</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>Path to proxy-notify pipe.</p>\n<p><a href=\"/main/core/settings/variables.html#login-variables\">Login Variables</a> can be used.</p>\n"
  },
  "mail_cache_max_header_name_length": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "default": "<code>100</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Maximum header name length stored in the cache, where 0 stands for unlimited\n(which is also the former behavior).</p>\n<p>When enabled, the cache truncates the names to this length in memory and on\nfile. While the header name remains unchanged in the storage, all the headers\nsharing the first <code><a href=\"/main/core/summaries/settings.html#mail_cache_max_header_name_length\">mail_cache_max_header_name_length</a></code> prefix\ncharacters are de facto aliased and will be considered as the same header on\ncache fetch.</p>\n<p>Also, attempting to fetch a specific aliased header will succeed even if\nthe header does not actually exist (this does NOT happen when the feature\nis disabled with explicitly with <code><a href=\"/main/core/summaries/settings.html#mail_cache_max_header_name_length\">mail_cache_max_header_name_length = unlimited</a></code>)</p>\n<p>Example: (<code><a href=\"/main/core/summaries/settings.html#mail_cache_max_header_name_length\">mail_cache_max_header_name_length = 5</a></code>)</p>\n<p>If the mail contains the header <code>X-name: value</code>, attempting to fetch\n<code>X-nam</code> or <code>X-names</code> will also produce <code>X-name: value</code> as a result\n(with the original header name, not the requested one).</p>\n<p>Trying to fetch the mail text or the mail headers will properly return only\n<code>X-name: value</code>.</p>\n"
  },
  "mail_cache_max_headers_count": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "default": "<code>100</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Maximum number of headers in <code>yes</code>/<code>temp</code> cache decision before the cache\nrefuses to promote more header decisions from <code>no</code> to <code>temp</code>, where <code>0</code>\nstands for unlimited (which is also the former behavior).</p>\n<p>When entries are rejected, the event <code><a href=\"/main/core/summaries/events.html#mail_cache_decision_rejected\">mail_cache_decision_rejected</a></code>\nis emitted.</p>\n<p>Also, while the cache's headers count is saturated, the effective value of\n<code><a href=\"/main/core/summaries/settings.html#mail_cache_unaccessed_field_drop\">mail_cache_unaccessed_field_drop</a></code> is reduced to 1/4 of\nof the specified one, in order to aid the cache to return within the limits.</p>\n"
  },
  "mail_cache_max_size": {
    "default": "<code>1G</code>",
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>If <code>dovecot.index.cache</code> becomes larger than this, it's truncated\nto empty size.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>The maximum value is 1 GB because the cache file format can't currently\nsupport larger sizes.</p>\n</div>\n"
  },
  "mail_cache_min_mail_count": {
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "default": 0,
    "text": "<p>Only update cache file when the mailbox contains at least this many messages.</p>\n<p>With a setting other than <code>0</code>, you can optimize behavior for fewer disk\nwrites at the cost of more disk reads.</p>\n"
  },
  "mail_cache_purge_continued_percentage": {
    "default": "<code>200</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Compress the cache file when n% of records are deleted (by count, not by size).</p>\n<p>For example <code>200</code> means that the record has 2 continued rows, i.e. it\nexists in 3 separate segments in the cache file.</p>\n"
  },
  "mail_cache_purge_delete_percentage": {
    "default": "<code>20</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Compress the cache file when n% of records are deleted (by count, not by\nsize).</p>\n"
  },
  "mail_cache_purge_header_continue_count": {
    "default": "<code>4</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Compress the cache file when we need to follow more than n next_offsets to\nfind the latest cache header.</p>\n"
  },
  "mail_cache_purge_min_size": {
    "default": "<code>32k</code>",
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Only compress cache file if it is larger than this size.</p>\n"
  },
  "mail_cache_record_max_size": {
    "default": "<code>64k</code>",
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>If a cache record becomes larger than this, don't add it to the cache file.</p>\n"
  },
  "mail_cache_unaccessed_field_drop": {
    "default": "<code>30days</code>",
    "seealso": [
      "<a href=\"/main/core/config/mail_cache.html\">mail cache configuration</a>"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Specifies when cache decisions are downgraded.</p>\n<p>Change caching decision from YES to TEMP after this much time has passed.\nDrop the field entirely after twice this much time has passed,\nregardless of whether the cache decision was YES or TEMP previously.</p>\n<p>If the cache header count is capped to\n<code><a href=\"/main/core/summaries/settings.html#mail_cache_max_headers_count\">mail_cache_max_headers_count</a></code> then the effective value is reduced\nto 1/4 of the configured value until enough headers expire for the cache to\nfall back inside the limits.</p>\n"
  },
  "mail_index_log_rotate_max_size": {
    "default": "<code>1M</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_index_log_rotate_min_age\">mail_index_log_rotate_min_age</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#mail_index_log_rotate_min_size\">mail_index_log_rotate_min_size</a></code>"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Always rotate transaction log after it exceeds this size.</p>\n"
  },
  "mail_index_log_rotate_min_age": {
    "default": "<code>5mins</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_index_log_rotate_max_size\">mail_index_log_rotate_max_size</a></code>"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Rotate transaction log if it is older than this value and is larger than\n<code><a href=\"/main/core/summaries/settings.html#mail_index_log_rotate_min_size\">mail_index_log_rotate_min_size</a></code>.</p>\n"
  },
  "mail_index_log_rotate_min_size": {
    "default": "<code>32k</code>",
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Rotate transaction log if it is larger than this size and is older than\n<code><a href=\"/main/core/summaries/settings.html#mail_index_log_rotate_min_age\">mail_index_log_rotate_min_age</a></code>.</p>\n"
  },
  "mail_index_log2_max_age": {
    "default": "<code>2days</code>",
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Delete <code>.log.2</code> index file when older than this value.</p>\n<p>Older <code>.log.2</code> files are useful for QRESYNC and dsync, so this value\nshould not be too low.</p>\n"
  },
  "mail_index_rewrite_max_log_bytes": {
    "default": "<code>128k</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_index_rewrite_min_log_bytes\">mail_index_rewrite_min_log_bytes</a></code>"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Rewrite the index when the number of bytes that needs to be read from the\n.log index file on refresh is between these min/max values.</p>\n"
  },
  "mail_index_rewrite_min_log_bytes": {
    "default": "<code>8k</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_index_rewrite_max_log_bytes\">mail_index_rewrite_max_log_bytes</a></code>"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Rewrite the index when the number of bytes that needs to be read from the\n.log index file on refresh is between these min/max values.</p>\n"
  },
  "managesieve_client_workarounds": {
    "tags": [
      "managesieve",
      "sieve"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "advanced": true,
    "text": "<p>Enables various workarounds for ManageSieve clients. Currently there are\nnone.</p>\n"
  },
  "managesieve_implementation_string": {
    "tags": [
      "managesieve",
      "sieve"
    ],
    "default": "<code>Dovecot Pigeonhole</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>Sets the ManageSieve implementation string returned by the <code>IMPLEMENTATION</code>\ncapability.</p>\n"
  },
  "managesieve_logout_format": {
    "tags": [
      "managesieve",
      "sieve"
    ],
    "default": "<code>bytes=%{input}/%{output}</code>",
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "text": "<p>Specifies the string pattern used to compose the logout message of an\nauthenticated session. The following substitutions are available:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Variable Name</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>%{input}</code></td>\n<td>Total number of bytes read from client</td>\n</tr>\n<tr>\n<td><code>%{output}</code></td>\n<td>Total number of bytes sent to client</td>\n</tr>\n<tr>\n<td><code>%{put_count}</code></td>\n<td>Number of scripts uploaded by client using PUTSCRIPT command</td>\n</tr>\n<tr>\n<td><code>%{put_bytes}</code></td>\n<td>Number of bytes with script data sent by client using PUTSCRIPT command</td>\n</tr>\n<tr>\n<td><code>%{get_count}</code></td>\n<td>Number of scripts downloaded by client using GETSCRIPT command</td>\n</tr>\n<tr>\n<td><code>%{get_bytes}</code></td>\n<td>Number of bytes with script data sent to client using GETSCRIPT command</td>\n</tr>\n<tr>\n<td><code>%{check_count}</code></td>\n<td>Number of scripts checked by client using CHECKSCRIPT command</td>\n</tr>\n<tr>\n<td><code>%{check_bytes}</code></td>\n<td>Number of bytes with script data sent by client using CHECKSCRIPT command</td>\n</tr>\n<tr>\n<td><code>%{deleted_count}</code></td>\n<td>Number of scripts deleted by client using DELETESCRIPT command</td>\n</tr>\n<tr>\n<td><code>%{renamed_count}</code></td>\n<td>Number of scripts renamed by client using RENAMESCRIPT command</td>\n</tr>\n<tr>\n<td><code>%{session}</code></td>\n<td>The client session ID</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "managesieve_max_compile_errors": {
    "tags": [
      "managesieve",
      "sieve"
    ],
    "default": "<code>5</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>The maximum number of compile errors that are returned to the client upon\nscript upload or script verification.</p>\n"
  },
  "managesieve_max_line_length": {
    "tags": [
      "managesieve",
      "sieve"
    ],
    "default": "<code>64k</code>",
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>The maximum ManageSieve command line length in bytes.</p>\n<p>Since long command lines are very unlikely with ManageSieve, changing this\nwill generally not be useful.</p>\n"
  },
  "managesieve_notify_capability": {
    "tags": [
      "managesieve",
      "sieve"
    ],
    "default": "<code>&lt;dynamically determined&gt;</code>",
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "advanced": true,
    "text": "<p><code>NOTIFY</code> capabilities reported by the ManageSieve service before\nauthentication.</p>\n<p>This does normally not need to be configured. If left unassigned, these will be\nassigned dynamically according to what the Sieve interpreter is configured to\nsupport using the global <code><a href=\"/main/core/summaries/settings.html#sieve_extensions\">sieve_extensions</a></code> setting (after login this\nmay differ depending on the settings applicable to the authenticated user).</p>\n"
  },
  "managesieve_sieve_capability": {
    "tags": [
      "managesieve",
      "sieve"
    ],
    "default": "<code>&lt;dynamically determined&gt;</code>",
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "advanced": true,
    "text": "<p><code>SIEVE</code> capabilities reported by the ManageSieve service before\nauthentication.</p>\n<p>This does normally not need to be configured. If left unassigned, these will be\nassigned dynamically according to what the Sieve interpreter is configured to\nsupport using the global <code><a href=\"/main/core/summaries/settings.html#sieve_extensions\">sieve_extensions</a></code> setting (after login this\nmay differ depending on the settings applicable to the authenticated user).</p>\n"
  },
  "sieve_script": {
    "tags": [
      "sieve-storage"
    ],
    "plugin": [
      "sieve"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#script-storage\">Script storage</a>"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "text": "<p>Creates a new Sieve script storage to the list of script storages. The filter\nname refers to the <code><a href=\"/main/core/summaries/settings.html#sieve_script_storage\">sieve_script_storage</a></code> setting.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>sieve_script personal {</span></span>\n<span class=\"line\"><span>  [...]</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_script_storage": {
    "tags": [
      "sieve-storage"
    ],
    "plugin": [
      "sieve"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#script-storage\">Script storage</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The identifier of the Sieve script storage. This is used only in configurations\nand by command line tools - it's not visible to the user. The\n<code><a href=\"/main/core/summaries/settings.html#sieve_script\">sieve_script</a></code> filter refers to this setting.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_script_name": {
    "tags": [
      "sieve-storage"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>personal</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#script-storage\">Script storage</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The (default) name of a Sieve script retrieved from this storage. If the\nname of the Sieve script cannot be derived somehow from the storage (e.g. from\na file name) and the storage for a single script is specified, this option is\nrequired (e.g. for dict locations that must point to a particular script).</p>\n<p>If the name of the script is derived from the storage, the value of the\n<code><a href=\"/main/core/summaries/settings.html#sieve_script_name\">sieve_script_name</a></code> setting overrides that name. If the Sieve\ninterpreter explicitly queries for a specific name (e.g. to let the Sieve\n<a href=\"/main/core/config/sieve/extensions/include.html\">Sieve include extension</a> retrieve a script from the\n<a href=\"/main/core/plugins/sieve.html#script-storage-type-global\">global script storage</a>),\nthis setting has no effect.</p>\n<p>For the Sieve script storage with type\n<a href=\"/main/core/plugins/sieve.html#script-storage-type-default\">default</a>, the name is required to make\nthe default script visible in ManageSieve. See\n'<a href=\"/main/core/plugins/sieve.html#visible-default-script\">Sieve visible default script</a>'</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_script_type": {
    "tags": [
      "sieve-storage"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>personal</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#script-storage-types\">Script storage types</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The type of the configured Sieve script storage. See\n<a href=\"/main/core/plugins/sieve.html#script-storage-types\">Script storage types</a>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_script_cause": {
    "tags": [
      "sieve-storage",
      "imap-sieve"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>delivery</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#script-storage\">Script storage</a>"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>The causes for executing Sieve scripts from this storage. This is currently only\nrelevant for the IMAPSieve plugin. For standard Sieve execution at message\ndelivery the cause is &quot;delivery&quot;. Other causes can be <code>append</code>, <code>copy</code> and\n<code>flag</code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_script_precedence": {
    "tags": [
      "sieve-storage"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>infinite</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#script-storage\">Script storage</a>"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>The precedence of this Sieve storage in the configuration. Normally, script\nstorages with matching type and cause are accessed in the order these are\nspecified in the configuration. This setting can be used to configure an\nexplicit order. Storages will be accessed with lower precedence first.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_script_driver": {
    "tags": [
      "sieve-storage"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>file</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#script-storage\">Script storage</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The Sieve script storage driver to use. See <a href=\"/main/core/plugins/sieve.html#script-storage-drivers\">Script storage drivers</a>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_script_bin_path": {
    "tags": [
      "sieve-storage"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>personal</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#script-storage\">Script storage</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Points to the directory where the compiled binaries for this script\nlocation are stored. This directory is created automatically if possible.</p>\n<p>If this setting is not configured, the behavior depends on the storage driver.\nFor the <a href=\"/main/core/plugins/sieve.html#file-storage-driver\">file storage driver</a>, the binaries are for\nexample stored in the same directory as the corresponding sieve scripts.</p>\n<p>Don't specify the same directory for multiple script storages (e.g. with\ndifferent types), as this will result in undefined behavior. For one, the same\nscript name could point to different scripts for different storages, leading to\na conflict, because the storages will try to use the same binary file. Multiple\nmail users can share a single script directory if the associated script storage\nconfiguration is identical between users and all users share the same system\ncredentials (uid, gid). All users will then use the same scripts for that\nstorage type.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_script_path": {
    "tags": [
      "sieve-storage-file"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>~/sieve</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#file-storage-driver\">File storage driver</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>A file system path pointing to a Sieve script file or a directory containing one\nor more Sieve script files with names structured as <code>&lt;script-name&gt;.sieve</code>.\nThis setting only applies when <code><a href=\"/main/core/summaries/settings.html#sieve_script_driver\">sieve_script_driver = file</a></code></p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_script_active_path": {
    "tags": [
      "sieve-storage-file"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>~/.dovecot.sieve</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#file-storage-driver\">File storage driver</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>When <a href=\"/main/core/config/sieve/managesieve.html\">ManageSieve server</a> is used, one script in the storage can\nbe active; i.e., evaluated at delivery.</p>\n<p>This setting only applies when <code><a href=\"/main/core/summaries/settings.html#sieve_script_driver\">sieve_script_driver = file</a></code>. For that\nstorage driver, the active script in the storage directory is pointed to by a\nsymbolic link.</p>\n<p>This setting configures where this symbolic link is located. If the\n<code><a href=\"/main/core/summaries/settings.html#sieve_script_path\">sieve_script_path</a></code> setting points to a regular file, this setting has\nno effect (and ManageSieve cannot be used).</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_script_ldap_script_attribute": {
    "tags": [
      "sieve-storage-ldap"
    ],
    "plugin": [
      "sieve"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#ldap-storage-driver\">LDAP storage driver</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The name of the attribute containing the Sieve script.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_script_ldap_modified_attribute": {
    "tags": [
      "sieve-storage-ldap"
    ],
    "plugin": [
      "sieve"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#ldap-storage-driver\">LDAP storage driver</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The name of the attribute used to detect modifications to the LDAP entry.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_script_ldap_filter": {
    "tags": [
      "sieve-storage-ldap"
    ],
    "plugin": [
      "sieve"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#ldap-storage-driver\">LDAP storage driver</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The LDAP search filter that is used to find the entry containing the Sieve\nscript.</p>\n<p>These variables can be used:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Variable</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>%{user}</code></td>\n<td>username</td>\n</tr>\n<tr>\n<td><code>%{user | username}</code></td>\n<td>user part in user@domain, same as <code>%{user}</code> if there's no domain</td>\n</tr>\n<tr>\n<td><code>%{user | domain}</code></td>\n<td>domain part in user@domain, empty if user there's no domain</td>\n</tr>\n<tr>\n<td><code>%{home}</code></td>\n<td>user's home directory</td>\n</tr>\n<tr>\n<td><code>%{name}</code></td>\n<td>name of the Sieve script</td>\n</tr>\n</tbody>\n</table>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_extensions": {
    "tags": [
      "sieve"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>&lt;see description&gt;</code>",
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>The Sieve language extensions available to users.</p>\n<p>By default, all supported extensions are available, except for deprecated\nextensions, extensions that add the ability to change messages, extensions\nthat require explicit configuration, or extensions that are still under\ndevelopment.</p>\n<p>Some system administrators may want to disable certain Sieve extensions or\nenable those that are not available by default.</p>\n<p>Supported extensions are listed at <a href=\"/main/core/config/sieve/overview.html#extensions\">Sieve extensions</a>.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span># Enable the vacation-seconds extension in addition to all</span></span>\n<span class=\"line\"><span># extensions enabled by default.</span></span>\n<span class=\"line\"><span>sieve_extensions {</span></span>\n<span class=\"line\"><span>  vacation-seconds = yes</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_global_extensions": {
    "tags": [
      "sieve"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code><a href=\"/main/core/summaries/settings.html#sieve_extensions\">sieve_extensions</a></code>",
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>Which Sieve language extensions are <strong>only</strong> available in global scripts.</p>\n<p>This can be used to restrict the use of certain Sieve extensions to\nadministrator control, for instance when these extensions can cause\nsecurity concerns.</p>\n<p>This setting has higher precedence than <code><a href=\"/main/core/summaries/settings.html#sieve_extensions\">sieve_extensions</a></code>, meaning\nthat the extensions enabled with this setting are never available to the\nuser's personal script no matter what is specified for the\n<code><a href=\"/main/core/summaries/settings.html#sieve_extensions\">sieve_extensions</a></code> setting.</p>\n<p>The syntax of this setting is identical to <code><a href=\"/main/core/summaries/settings.html#sieve_extensions\">sieve_extensions</a></code>, with\nthe difference that extensions are enabled or disabled for exclusive use in\nglobal scripts.</p>\n<p>Currently, no extensions are marked as such by default.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_implicit_extensions": {
    "tags": [
      "sieve"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>Do not use this setting unless you really need to!</p>\n</div>\n<p>The Sieve language extensions implicitly available to users.</p>\n<p>The extensions listed in this setting do not need to be enabled explicitly\nusing the Sieve &quot;require&quot; command.</p>\n<p>This behavior directly violates the Sieve standard, but can be necessary\nfor compatibility with some existing implementations of Sieve (notably\njSieve).</p>\n<p>The syntax and semantics of this setting are otherwise identical to\n<code><a href=\"/main/core/summaries/settings.html#sieve_extensions\">sieve_extensions</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_max_actions": {
    "tags": [
      "sieve"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>32</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>The maximum number of actions that can be performed during a single script\nexecution.</p>\n<p>If set to <code>0</code>, no limit on the total number of actions is enforced.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_max_cpu_time": {
    "tags": [
      "sieve"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>30s</code>",
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>The maximum amount of CPU time that a Sieve script is allowed to use while\nexecuting. If the execution exceeds this resource limit, the script ends with\nan error, causing the implicit &quot;keep&quot; action to be executed.</p>\n<p>This limit is not only enforced for a single script execution, but also\ncumulatively for the last executions within a configurable timeout\n(see <code><a href=\"/main/core/summaries/settings.html#sieve_resource_usage_timeout\">sieve_resource_usage_timeout</a></code>).</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_max_redirects": {
    "tags": [
      "sieve"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>4</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>The maximum number of redirect actions that can be performed during a\nsingle script execution.</p>\n<p><code>0</code> means redirect is prohibited.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_resource_usage_timeout": {
    "tags": [
      "sieve"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>1h</code>",
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>To prevent abuse, the Sieve interpreter can record resource usage of a Sieve\nscript execution in the compiled binary if it is significant. Currently, this\nhappens when CPU system + user time exceeds 1.5 seconds for one execution.\nSuch high resource usage is summed over time in the binary and once that\ncumulative resource usage exceeds the limits (<code><a href=\"/main/core/summaries/settings.html#sieve_max_cpu_time\">sieve_max_cpu_time</a></code>),\nthe Sieve script is disabled in the binary for future execution, even if an\nindividual execution exceeded no limits.</p>\n<p>If the last time high resource usage was recorded is older than\n<code><a href=\"/main/core/summaries/settings.html#sieve_resource_usage_timeout\">sieve_resource_usage_timeout</a></code>, the resource usage in the binary is\nreset. This means that the Sieve script is only disabled when the limits are\ncumulatively exceeded within this timeout. With the default configuration this\nmeans that the Sieve script is only disabled when the total CPU time of Sieve\nexecutions that lasted more than 1.5 seconds exceeds 30 seconds in the last\nhour.</p>\n<p>A disabled Sieve script can be reactivated by the user by uploading a new\nversion of the Sieve script after the excessive resource usage times out. An\nadministrator can force reactivation by forcing a script compile (e.g. using\nthe sievec command line tool).</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_max_script_size": {
    "tags": [
      "sieve",
      "managesieve_quota"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>1M</code>",
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>The maximum size of a Sieve script. The compiler will refuse to compile any\nscript larger than this limit.</p>\n<p>If set to <code>0</code>, no limit on the script size is enforced.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_plugins": {
    "tags": [
      "sieve"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>The Pigeonhole Sieve interpreter can have plugins of its own.</p>\n<p>Using this setting, the used plugins can be specified.</p>\n<p>Check <a href=\"/main/core/config/sieve/overview.html#extensions\">Sieve plugins</a> for available plugins.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_redirect_envelope_from": {
    "tags": [
      "sieve"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>sender</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Specifies what envelope sender address is used for redirected messages.</p>\n<p>Normally, the Sieve <code>redirect</code> command copies the sender address for the\nredirected message from the processed message  So, the redirected message\nappears to originate from the original sender.</p>\n<p>The following options are supported for this setting:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Option</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>sender</code></td>\n<td>The sender address is used</td>\n</tr>\n<tr>\n<td><code>recipient</code></td>\n<td>The final recipient address is used</td>\n</tr>\n<tr>\n<td><code>orig_recipient</code></td>\n<td>The original recipient is used</td>\n</tr>\n<tr>\n<td><code>user_email</code></td>\n<td>The user's primary address is used. This is configured with the <code><a href=\"/main/core/summaries/settings.html#sieve_user_email\">sieve_user_email</a></code> setting. If that setting is not configured, <code>user_email</code> is equal to <code>sender</code>.</td>\n</tr>\n<tr>\n<td><code>postmaster</code></td>\n<td>The <code><a href=\"/main/core/summaries/settings.html#postmaster_address\">postmaster_address</a></code> configured for LDA/LMTP.</td>\n</tr>\n<tr>\n<td><code>&lt;user@domain&gt;</code></td>\n<td>Redirected messages are always sent from <code>user@domain</code>. The angle brackets are mandatory. The null <code>&lt;&gt;</code> address is also supported.</td>\n</tr>\n</tbody>\n</table>\n<p>When the envelope sender of the processed message is the null address\n<code>&lt;&gt;</code>, the envelope sender of the redirected message is also always\n<code>&lt;&gt;</code>, irrespective of what is configured for this setting.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_trace_addresses": {
    "tags": [
      "sieve-trace"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#trace-debugging\">Sieve trace debugging</a>"
    ],
    "text": "<p>Enables showing byte code addresses in the trace output, rather than only\nthe source line numbers.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_trace_debug": {
    "tags": [
      "sieve-trace"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#trace-debugging\">Sieve trace debugging</a>"
    ],
    "text": "<p>Enables highly verbose debugging messages that are usually only useful for\ndevelopers.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_trace_dir": {
    "tags": [
      "sieve-trace"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#trace-debugging\">Sieve trace debugging</a>"
    ],
    "text": "<p>The directory where trace files are written.</p>\n<p>Trace debugging is disabled if this setting is not configured or if the\ndirectory does not exist.</p>\n<p>If the path is relative or it starts with <code>~/</code> it is interpreted relative\nto the current user's home directory.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_trace_level": {
    "tags": [
      "sieve-trace"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/sieve.html#trace-debugging\">Sieve trace debugging</a>"
    ],
    "text": "<p>The verbosity level of the trace messages. Trace debugging is disabled if\nthis setting is not configured. Options are:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Option</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>actions</code></td>\n<td>Only print executed action commands, like keep, fileinto, reject, and redirect.</td>\n</tr>\n<tr>\n<td><code>commands</code></td>\n<td>Print any executed command, excluding test commands.</td>\n</tr>\n<tr>\n<td><code>tests</code></td>\n<td>Print all executed commands and performed tests.</td>\n</tr>\n<tr>\n<td><code>matching</code></td>\n<td>Print all executed commands, performed tests and the values matched in those tests.</td>\n</tr>\n</tbody>\n</table>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_quota_script_count": {
    "tags": [
      "sieve",
      "managesieve_quota"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>unlimited</code>",
    "text": "<p>The maximum number of personal Sieve scripts a single user can have.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_quota_storage_size": {
    "tags": [
      "sieve",
      "managesieve_storage"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": "<code>unlimited</code>",
    "text": "<p>The maximum amount of disk storage a single user's scripts may occupy.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_user_email": {
    "tags": [
      "sieve"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The primary e-mail address for the user.</p>\n<p>This is used as a default when no other appropriate address is available\nfor sending messages.</p>\n<p>If this setting is not configured, either the postmaster or null <code>&lt;&gt;</code>\naddress is used as a sender, depending on the action involved.</p>\n<p>This setting is important when there is no message envelope to extract\naddresses from, such as when the script is executed in IMAP.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_user_log_path": {
    "tags": [
      "sieve"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The path to the file where the user log file is written.</p>\n<p>A default location is used if this setting is not explicitly configured:</p>\n<ul>\n<li>\n<p>If the main user's personal Sieve script storage (as configured with\n<code><a href=\"/main/core/summaries/settings.html#sieve_script\">sieve_script</a></code> uses the <a href=\"/main/core/plugins/sieve.html#file-storage-driver\">File storage driver</a>, the logfile is\nset to <code>&lt;filename&gt;.log</code> by default.</p>\n</li>\n<li>\n<p>If the script is not stored as a file, the default user log file is <code>~/.dovecot.sieve.log</code>.</p>\n</li>\n</ul>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_duplicate_default_period": {
    "tags": [
      "sieve",
      "sieve-duplicate"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>14d</code>",
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/duplicate.html\">Sieve duplicate extension</a>"
    ],
    "advanced": true,
    "text": "<p>Default period after which tracked values are purged from the duplicate\ntracking database.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_duplicate_max_period": {
    "tags": [
      "sieve",
      "sieve-duplicate"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>7d</code>",
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/duplicate.html\">Sieve duplicate extension</a>"
    ],
    "advanced": true,
    "text": "<p>Maximum period after which tracked values are purged from the duplicate\ntracking database.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_editheader_header_forbid_add": {
    "tags": [
      "sieve",
      "sieve-editheader"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/editheader.html\">Sieve editheader extension</a>"
    ],
    "text": "<p>A space-separated list of headers that cannot be added to the message header.</p>\n<p>Addition of the <code>Subject:</code> header cannot be prohibited, as required by\nthe RFC specification. Therefore, adding this header to this setting has no\neffect.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_editheader_header_forbid_delete": {
    "tags": [
      "sieve",
      "sieve-editheader"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/editheader.html\">Sieve editheader extension</a>"
    ],
    "text": "<p>A space-separated list of headers that cannot be deleted from the message\nheader.</p>\n<p>Deleting the <code>Received:</code> and <code>Auto-Submitted:</code> fields is always\nforbidden, while removing the <code>Subject:</code> header cannot be prohibited, as\nrequired by the RFC specification. Therefore, adding one of these headers\nto this setting has no effect.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_editheader_max_header_size": {
    "tags": [
      "sieve",
      "sieve-editheader"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>2k</code>",
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/editheader.html\">Sieve editheader extension</a>"
    ],
    "text": "<p>The maximum size in bytes of a header field value passed to the addheader\ncommand.</p>\n<p>The minimum value for this setting is <code>1024</code> bytes.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_extlists_list": {
    "tags": [
      "sieve",
      "sieve-extlists"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/extlists.html\">Sieve extlists extension</a>"
    ],
    "text": "<p>This named list filter creates a new list definition for the &quot;:list&quot; match type\nin Sieve (extlists extension). The filter name refers to the\n<code><a href=\"/main/core/summaries/settings.html#sieve_extlists_list_name\">sieve_extlists_list_name</a></code> setting. That is the name of the list as it\nwill be accessible from the Sieve. A dict definition that is placed inside\nthe scope of this list filter will serve as the lookup for this extlists list.\nSo, values from Sieve are looked up in the defined dict. This is often used to\ndefine an address book or whitelist external to the Sieve script. If no dict is\npresent, the list will function as an empty list.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>sieve_extlists_list :addrbook:default {</span></span>\n<span class=\"line\"><span>  dict proxy {</span></span>\n<span class=\"line\"><span>    name = addressbook</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_extlists_list_name": {
    "tags": [
      "sieve",
      "sieve-extlists"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/extlists.html\">Sieve extlists extension</a>"
    ],
    "text": "<p>The name of the list as it will be accessible through the Sieve &quot;:list&quot; match\ntype (extlists extension). According to the standard, this name must be a valid\nURI. This implementation further limits that to a valid URN or TAG URI. Note\nthat the standard URN and TAG equality rules dictate that at least parts of\nthese URIs are case-sensitive, so it is best to consider the configured name\ncase-sensitive entirely.</p>\n<p>The <code><a href=\"/main/core/summaries/settings.html#sieve_extlists_list\">sieve_extlists_list</a></code> filter refers to this setting.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_extlists_list_max_lookup_size": {
    "tags": [
      "sieve",
      "sieve-extlists"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": "<code>1k</code>",
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/extlists.html\">Sieve extlists extension</a>"
    ],
    "text": "<p>The maximum size of a value looked up from this Sieve extlists list. If the\nvalue is too large, the lookup will be skipped and will yield no result. Note\nthat individual lists may have different limits, meaning that lookups in other\nlists may still succeed.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_notify_mailto_envelope_from": {
    "tags": [
      "sieve",
      "sieve-enotify"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#sieve_redirect_envelope_from\">sieve_redirect_envelope_from</a></code>",
      "<a href=\"/main/core/config/sieve/extensions/enotify.html\">Sieve notifications extensions</a>"
    ],
    "text": "<p>Defines the source of the notification sender address for e-mail\nnotifications.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_include_max_includes": {
    "tags": [
      "sieve",
      "sieve-include"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>255</code>",
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/include.html\">Sieve include extension</a>"
    ],
    "advanced": true,
    "text": "<p>The maximum number of scripts that may be included. This is the total\nnumber of scripts involved in the include tree.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_include_max_nesting_depth": {
    "tags": [
      "sieve",
      "sieve-include"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>10</code>",
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/include.html\">Sieve include extension</a>"
    ],
    "advanced": true,
    "text": "<p>The maximum nesting depth for the include tree.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_spamtest_score_max_header": {
    "tags": [
      "sieve",
      "sieve-spamtest"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/spamtest_virustest.html\">Sieve spamtest extension</a>"
    ],
    "text": "<p>Value format: <code>&lt;header-field&gt; [ &quot;:&quot; &lt;regexp&gt; ]</code></p>\n<p>Some spam scanners include the maximum score value in one of their status\nheaders. Using this setting, this maximum can be extracted from the message\nitself instead of specifying the maximum manually using the setting\n<code><a href=\"/main/core/summaries/settings.html#sieve_spamtest_score_max_value\">sieve_spamtest_score_max_value</a></code>.</p>\n<p>The syntax is identical to the <code><a href=\"/main/core/summaries/settings.html#sieve_spamtest_status_header\">sieve_spamtest_status_header</a></code>\nsetting. This setting cannot be used together with\n<code><a href=\"/main/core/summaries/settings.html#sieve_spamtest_score_max_value\">sieve_spamtest_score_max_value</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_spamtest_score_max_value": {
    "tags": [
      "sieve",
      "sieve-spamtest"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/spamtest_virustest.html\">Sieve spamtest extension</a>"
    ],
    "text": "<p>This statically specifies the maximum value a numeric spam score can have. This\nsetting cannot be used together with\n<code><a href=\"/main/core/summaries/settings.html#sieve_spamtest_score_max_header\">sieve_spamtest_score_max_header</a></code>.\nThis setting can specify a fractional score with a decimal point.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_spamtest_status_header": {
    "tags": [
      "sieve",
      "sieve-spamtest"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/spamtest_virustest.html\">Sieve spamtest extension</a>"
    ],
    "text": "<p>Value format: <code>&lt;header-field&gt; [ &quot;:&quot; &lt;regexp&gt; ]</code></p>\n<p>This specifies the header field that contains the result information of the\nspam scanner and it may express the syntax of the content of the header.</p>\n<p>If no matching header is found in the message, the spamtest command will\nmatch against <code>0</code>.</p>\n<p>This is a structured setting. The first part specifies the header field\nname.  Optionally, a POSIX regular expression follows the header field\nname, separated by a colon. Any white space directly following the colon is\nnot part of the regular expression. If the regular expression is omitted,\nany header content is accepted and the full header value is used. When a\nregular expression is used, it must specify one match value (inside\nbrackets) that yields the desired spam scanner result.</p>\n<p>If the header does not match the regular expression or if no value match is\nfound, the spamtest test will match against <code>0</code> during Sieve script\nexecution.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_spamtest_status_type": {
    "tags": [
      "sieve",
      "sieve-spamtest"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "score",
      "strlen",
      "text"
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/spamtest_virustest.html\">Sieve spamtest extension</a>"
    ],
    "text": "<p>This specifies the type of status result that the spam/virus scanner\nproduces.</p>\n<p>This can either be a numeric score (<code>score</code>), a string of identical\ncharacters (<code>strlen</code>), e.g. <code>'*******'</code>, or a textual description\n(<code>text</code>), e.g. <code>'Spam'</code> or <code>'Not Spam'</code> (see\n<code><a href=\"/main/core/summaries/settings.html#sieve_spamtest_text_value\">sieve_spamtest_text_value</a></code>).</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_spamtest_text_value": {
    "tags": [
      "sieve",
      "sieve-spamtest"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/spamtest_virustest.html\">Sieve spamtest extension</a>"
    ],
    "text": "<p>When the <code><a href=\"/main/core/summaries/settings.html#sieve_spamtest_status_type\">sieve_spamtest_status_type</a></code> setting is set to\n<code>text</code>, this setting specifies what values the spamtest test will match\nagainst to obtain the score value. For each recognized numeric score value this\nstring list setting yields the text to match against. Score values between 0\nand 10 are recognized.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>sieve_spamtest_status_header = X-Spam-Verdict</span></span>\n<span class=\"line\"><span>sieve_spamtest_status_type = text</span></span>\n<span class=\"line\"><span>sieve_spamtest_text_value {</span></span>\n<span class=\"line\"><span>  1 = Not Spam</span></span>\n<span class=\"line\"><span>  10 = Spam</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_vacation_default_period": {
    "tags": [
      "sieve",
      "sieve-vacation"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>7d</code>",
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/vacation.html\">Sieve vacation extension</a>"
    ],
    "text": "<p>Specifies the default period that is used when no <code>:days</code> or <code>:seconds</code>\ntag is specified.</p>\n<p>The configured value must lie between <code><a href=\"/main/core/summaries/settings.html#sieve_vacation_min_period\">sieve_vacation_min_period</a></code>\nand <code><a href=\"/main/core/summaries/settings.html#sieve_vacation_max_period\">sieve_vacation_max_period</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_vacation_check_recipient": {
    "tags": [
      "sieve",
      "sieve-vacation"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>yes</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/vacation.html\">Sieve vacation extension</a>"
    ],
    "text": "<p>This setting determines whether the checks for implicit delivery are performed.\nIf this is skipped, this means that the vacation command does not verify that\nthe message is explicitly addressed at the recipient.</p>\n<p>Use this option with caution. Specifying <code>no</code> will violate the Sieve\nstandards and can cause vacation replies to be sent for messages not\ndirectly addressed at the recipient.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_vacation_max_period": {
    "tags": [
      "sieve",
      "sieve-vacation"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>60d</code>",
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/vacation.html\">Sieve vacation extension</a>"
    ],
    "text": "<p>Specifies the maximum period that can be specified for the <code>:days</code> tag of\nthe vacation command.</p>\n<p>The configured value must be larger than <code><a href=\"/main/core/summaries/settings.html#sieve_vacation_min_period\">sieve_vacation_min_period</a></code>.</p>\n<p>A value of <code>0</code> has a special meaning: it indicates that there is no upper\nlimit.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_vacation_min_period": {
    "tags": [
      "sieve",
      "sieve-vacation"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>1d</code>",
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/vacation.html\">Sieve vacation extension</a>"
    ],
    "text": "<p>Specifies the minimum period that can be specified for the <code>:days</code> and\n<code>:seconds</code> tags of the vacation command.</p>\n<p>A minimum of <code>0</code> indicates that users are allowed to make the Sieve\ninterpreter send a vacation response message for every incoming message\nthat meets the other reply criteria (refer to <a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc5230\">RFC 5230</a>). A value of zero\nis not recommended.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_vacation_send_from_recipient": {
    "tags": [
      "sieve",
      "sieve-vacation"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/vacation.html\">Sieve vacation extension</a>"
    ],
    "text": "<p>This setting determines whether vacation messages are sent with the SMTP\n<code>MAIL FROM</code> envelope address set to the recipient address of the Sieve\nscript owner.</p>\n<p>Normally this is set to <code>&lt;&gt;</code>, which is the default as recommended in the\nspecification. This is meant to prevent mail loops. However, there are\nsituations for which a valid sender address is required and this setting\ncan be used to accommodate for those.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_vacation_use_original_recipient": {
    "tags": [
      "sieve",
      "sieve-vacation"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/vacation.html\">Sieve vacation extension</a>"
    ],
    "text": "<p>This specifies whether the original envelope recipient should be used in\nthe check for implicit delivery.</p>\n<p>The vacation command checks headers of the incoming message, such as\n<code>To:</code> and <code>Cc:</code> for the address of the recipient, to verify that the\nmessage is explicitly addressed at the recipient. If the recipient address\nis not found, the vacation action will not trigger a response to prevent\nsending a reply when it is not appropriate.</p>\n<p>Normally only the final recipient address is used in this check. This\nsetting allows including the original recipient specified in the SMTP\nsession if available.</p>\n<p>This is useful to handle mail accounts with aliases. Use this option with\ncaution: if you are using aliases that point to more than a single account,\nas senders can get multiple vacation responses for a single message.</p>\n<p>Use the <a href=\"/main/core/config/delivery/lda.html\">LDA</a> <code>-a</code>\noption or the LMTP/LDA <code><a href=\"/main/core/summaries/settings.html#lda_original_recipient_header\">lda_original_recipient_header</a></code> setting to\nmake the original SMTP recipient available to Sieve.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_variables_max_scope_count": {
    "tags": [
      "sieve",
      "sieve-variables"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>255</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/vacation.html\">Sieve vacation extension</a>"
    ],
    "advanced": true,
    "text": "<p>The maximum number of variables that can be declared in a scope.</p>\n<p>There are currently two variable scopes: the normal script scope and the\nglobal scope created by the <a href=\"/main/core/config/sieve/extensions/include.html\">Sieve include extension</a>.</p>\n<p>The minimum value for this setting is <code>128</code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_variables_max_value_size": {
    "tags": [
      "sieve",
      "sieve-variables"
    ],
    "plugin": [
      "sieve"
    ],
    "default": "<code>4k</code>",
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/variables.html\">Sieve variables extension</a>"
    ],
    "advanced": true,
    "text": "<p>The maximum allowed size for the value of a variable. If exceeded at\nruntime, the value is always truncated to the configured maximum.</p>\n<p>The minimum value for this setting is <code>4000 bytes</code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_virustest_score_max_header": {
    "tags": [
      "sieve",
      "sieve-virustest"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/spamtest_virustest.html\">Sieve virustest extension</a>"
    ],
    "text": "<p>Value Format: <code>&lt;header-field&gt; [ &quot;:&quot; &lt;regexp&gt; ]</code></p>\n<p>Some spam scanners include the maximum score value in one of their status\nheaders. Using this setting, this maximum can be extracted from the message\nitself instead of specifying the maximum manually using the setting\n<code><a href=\"/main/core/summaries/settings.html#sieve_virustest_score_max_value\">sieve_virustest_score_max_value</a></code>.</p>\n<p>The syntax is identical to <code><a href=\"/main/core/summaries/settings.html#sieve_virustest_status_header\">sieve_virustest_status_header</a></code>. This\nsetting cannot be used together with\n<code><a href=\"/main/core/summaries/settings.html#sieve_virustest_score_max_value\">sieve_virustest_score_max_value</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_virustest_score_max_value": {
    "tags": [
      "sieve",
      "sieve-virustest"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/spamtest_virustest.html\">Sieve virustest extension</a>"
    ],
    "text": "<p>This statically specifies the maximum value a numeric spam score can have. This\nsetting cannot be used together with\n<code><a href=\"/main/core/summaries/settings.html#sieve_virustest_score_max_header\">sieve_virustest_score_max_header</a></code>.\nThis setting can specify a fractional score with a decimal point.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_virustest_status_header": {
    "tags": [
      "sieve",
      "sieve-virustest"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/spamtest_virustest.html\">Sieve virustest extension</a>"
    ],
    "text": "<p>Value Format: <code>&lt;header-field&gt; [ &quot;:&quot; &lt;regexp&gt; ]</code></p>\n<p>This specifies the header field that contains the result information of the\nspam scanner and it may express the syntax of the content of the header.</p>\n<p>If no matching header is found in the message, the spamtest command will\nmatch against <code>0</code>.</p>\n<p>This is a structured setting. The first part specifies the header field\nname. Optionally, a POSIX regular expression follows the header field name,\nseparated by a colon. Any white space directly following the colon is not\npart of the regular expression. If the regular expression is omitted, any\nheader content is accepted and the full header value is used. When a\nregular expression is used, it must specify one match value (inside\nbrackets) that yields the desired spam scanner result.</p>\n<p>If the header does not match the regular expression or if no value match is\nfound, the spamtest test will match against <code>0</code> during Sieve script\nexecution.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_virustest_status_type": {
    "tags": [
      "sieve",
      "sieve-virustest"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "score",
      "strlen",
      "text"
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/spamtest_virustest.html\">Sieve virustest extension</a>"
    ],
    "text": "<p>This specifies the type of status result that the spam/virus scanner produces.</p>\n<p>This can either be a numeric score (<code>score</code>), a string of identical\ncharacters (<code>strlen</code>), e.g. <code>'*******'</code>, or a textual description\n(<code>text</code>), e.g. <code>'Spam'</code> or <code>'Not Spam'</code> (see\n<code><a href=\"/main/core/summaries/settings.html#sieve_virustest_text_value\">sieve_virustest_text_value</a></code>).</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "sieve_virustest_text_value": {
    "tags": [
      "sieve",
      "sieve-virustest"
    ],
    "plugin": [
      "sieve"
    ],
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/sieve/extensions/spamtest_virustest.html\">Sieve virustest extension</a>"
    ],
    "text": "<p>When the <code><a href=\"/main/core/summaries/settings.html#sieve_virustest_status_type\">sieve_virustest_status_type</a></code> setting is set to\n<code>text</code>, this setting specifies what values the spamtest test will match\nagainst to obtain the score value. For each recognized numeric score value this\nstring list setting yields the text to match against. Score values between 0\nand 10 are recognized.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>sieve_virustest_status_header = X-VirusCheck</span></span>\n<span class=\"line\"><span>sieve_virustest_status_type = text</span></span>\n<span class=\"line\"><span>sieve_virustest_text_value {</span></span>\n<span class=\"line\"><span>  1 = Clean</span></span>\n<span class=\"line\"><span>  2 = Presumed Clean</span></span>\n<span class=\"line\"><span>  3 = Not sure</span></span>\n<span class=\"line\"><span>  4 = Almost Certain</span></span>\n<span class=\"line\"><span>  5 = Definitely</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/sieve.html\">sieve plugin</a>"
  },
  "imapsieve_from": {
    "plugin": [
      "imap-sieve"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/sieve_imapsieve.html\">sieve-imapsieve plugin</a>"
    ],
    "text": "<p>Only execute the administrator Sieve scripts for the mailbox configured\nwith <code><a href=\"/main/core/summaries/settings.html#sieve_script\">sieve_script</a></code> and type <a href=\"/main/core/plugins/sieve.html#script-storage-type-before\">before</a>\nor <a href=\"/main/core/plugins/sieve.html#script-storage-type-after\">after</a> when the message originates from the\nindicated mailbox. The filter name refers to the <code><a href=\"/main/core/summaries/settings.html#imapsieve_from_name\">imapsieve_from_name</a></code>\nsetting. Therefore, the contained <code><a href=\"/main/core/summaries/settings.html#sieve_script\">sieve_script</a></code> blocks only apply\nwhen the source mailbox of the IMAP action match this filter.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/imap_sieve.html\">imap-sieve plugin</a>"
  },
  "imapsieve_from_name": {
    "plugin": [
      "imap-sieve"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/sieve_imapsieve.html\">sieve-imapsieve plugin</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The name of the source mailbox for IMAPSieve\n<a href=\"/main/core/plugins/sieve.html#script-storage-type-before\">before</a> or\n<a href=\"/main/core/plugins/sieve.html#script-storage-type-after\">after</a> scripts. The <code><a href=\"/main/core/summaries/settings.html#imapsieve_from\">imapsieve_from</a></code>\nfilter refers to this setting.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/imap_sieve.html\">imap-sieve plugin</a>"
  },
  "imapsieve_url": {
    "plugin": [
      "imap-sieve"
    ],
    "values": [
      {
        "label": "URL",
        "url": "<a href=\"/main/core/settings/types.html#url\">URL</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/sieve_imapsieve.html\">sieve-imapsieve plugin</a>"
    ],
    "text": "<p>If set, support for user Sieve scripts in IMAP is enabled.</p>\n<p>The value is an URL pointing to the ManageSieve server that users must use\nto upload their Sieve scripts.</p>\n<p>Leave this setting empty if you don't want users to have the ability to\nassociate Sieve scripts with mailboxes.</p>\n<p>This has no effect on the administrator-controlled Sieve scripts.</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>imapsieve_url = sieve://sieve.example.com</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/imap_sieve.html\">imap-sieve plugin</a>"
  },
  "imapsieve_expunge_discarded": {
    "plugin": [
      "imap-sieve"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/sieve_imapsieve.html\">sieve-imapsieve plugin</a>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>This setting determines whether de IMAPSieve plugin implicitly also expunges\nmessages that were discarded by the executed Sieve script sequence; i.e., Sieve\nyielded no (implicit) keep.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/imap_sieve.html\">imap-sieve plugin</a>"
  },
  "sieve_pipe_socket_dir": {
    "plugin": [
      "sieve-extprograms"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Points to a directory relative to the <code><a href=\"/main/core/summaries/settings.html#base_dir\">base_dir</a></code> where\nthe plugin looks for script service sockets for the <code>vnd.dovecot.pipe</code>\nextension.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_extprograms.html\">sieve-extprograms plugin</a>"
  },
  "sieve_filter_socket_dir": {
    "plugin": [
      "sieve-extprograms"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Points to a directory relative to the <code><a href=\"/main/core/summaries/settings.html#base_dir\">base_dir</a></code> where\nthe plugin looks for script service sockets for the <code>vnd.dovecot.filter</code>\nextension.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_extprograms.html\">sieve-extprograms plugin</a>"
  },
  "sieve_execute_socket_dir": {
    "plugin": [
      "sieve-extprograms"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Points to a directory relative to the <code><a href=\"/main/core/summaries/settings.html#base_dir\">base_dir</a></code> where\nthe plugin looks for script service sockets for the <code>vnd.dovecot.execute</code>\nextension.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_extprograms.html\">sieve-extprograms plugin</a>"
  },
  "sieve_pipe_bin_dir": {
    "plugin": [
      "sieve-extprograms"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Points to a directory where the plugin looks for programs (shell\nscripts) to execute directly and pipe messages to for the <code>vnd.dovecot.pipe</code>\nextension.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_extprograms.html\">sieve-extprograms plugin</a>"
  },
  "sieve_filter_bin_dir": {
    "plugin": [
      "sieve-extprograms"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Points to a directory where the plugin looks for programs (shell\nscripts) to execute directly and filter messages through for the\n<code>vnd.dovecot.filter</code> extension.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_extprograms.html\">sieve-extprograms plugin</a>"
  },
  "sieve_execute_bin_dir": {
    "plugin": [
      "sieve-extprograms"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Points to a directory where the plugin looks for programs (shell\nscripts) to execute directly for the <code>vnd.dovecot.execute</code> extension.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_extprograms.html\">sieve-extprograms plugin</a>"
  },
  "sieve_pipe_exec_timeout": {
    "default": "<code>10s</code>",
    "plugin": [
      "sieve-extprograms"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>Configures the maximum execution time after which the program run by the\n<code>vnd.dovecot.pipe</code> extension is forcibly terminated.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_extprograms.html\">sieve-extprograms plugin</a>"
  },
  "sieve_filter_exec_timeout": {
    "default": "<code>10s</code>",
    "plugin": [
      "sieve-extprograms"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>Configures the maximum execution time after which the program run by the\n<code>vnd.dovecot.filter</code> extension is forcibly terminated.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_extprograms.html\">sieve-extprograms plugin</a>"
  },
  "sieve_execute_exec_timeout": {
    "default": "<code>10s</code>",
    "plugin": [
      "sieve-extprograms"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>Configures the maximum execution time after which the program run by the\n<code>vnd.dovecot.execute</code> extension is forcibly terminated.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_extprograms.html\">sieve-extprograms plugin</a>"
  },
  "sieve_pipe_input_eol": {
    "default": "<code>crlf</code>",
    "plugin": [
      "sieve-extprograms"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "crlf",
      "lf"
    ],
    "text": "<p>Determines the end-of-line character sequence used for the data piped\nto external programs run by the <code>vnd.dovecot.pipe</code> extension. The default is\ncurrently &quot;crlf&quot;, which represents a sequence of the carriage return (CR) and\nline feed (LF) characters. This matches the Internet Message Format\n(<a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc5322\">RFC 5322</a>) and what Sieve itself uses as a line ending. Set this setting to\n&quot;lf&quot; to use a single LF character instead.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_extprograms.html\">sieve-extprograms plugin</a>"
  },
  "sieve_filter_input_eol": {
    "default": "<code>crlf</code>",
    "plugin": [
      "sieve-extprograms"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "crlf",
      "lf"
    ],
    "text": "<p>Determines the end-of-line character sequence used for the data piped\nto external programs run by the <code>vnd.dovecot.filter</code> extension. The default is\ncurrently &quot;crlf&quot;, which represents a sequence of the carriage return (CR) and\nline feed (LF) characters. This matches the Internet Message Format\n(<a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc5322\">RFC 5322</a>) and what Sieve itself uses as a line ending. Set this setting to\n&quot;lf&quot; to use a single LF character instead.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_extprograms.html\">sieve-extprograms plugin</a>"
  },
  "sieve_execute_input_eol": {
    "default": "<code>crlf</code>",
    "plugin": [
      "sieve-extprograms"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "crlf",
      "lf"
    ],
    "text": "<p>Determines the end-of-line character sequence used for the data piped\nto external programs run by the <code>vnd.dovecot.execute</code> extension. The default\nis currently &quot;crlf&quot;, which represents a sequence of the carriage return (CR) and\nline feed (LF) characters. This matches the Internet Message Format\n(<a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc5322\">RFC 5322</a>) and what Sieve itself uses as a line ending. Set this setting to\n&quot;lf&quot; to use a single LF character instead.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_extprograms.html\">sieve-extprograms plugin</a>"
  },
  "acl": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "plugin": [
      "acl"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#acl_id\">acl_id</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#acl_rights\">acl_rights</a></code>"
    ],
    "text": "<p>Specifies an ACL entry on global, namespace or mailbox level. The filter name\nrefers to the <code><a href=\"/main/core/summaries/settings.html#acl_id\">acl_id</a></code> setting.</p>\n<p>Has two settings:</p>\n<dl>\n<dt><code><a href=\"/main/core/summaries/settings.html#acl_id\">acl_id</a></code></dt>\n<dd>The identifier in ACL.</dd>\n<dt><code><a href=\"/main/core/summaries/settings.html#acl_rights\">acl_rights</a></code></dt>\n<dd>The permission to grant - or deny - for this user.</dd>\n</dl>\n",
    "plugin_link": "<a href=\"/main/core/plugins/acl.html\">acl plugin</a>",
    "no_default": true
  },
  "acl_driver": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "plugin": [
      "acl"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The ACL driver to use. This setting is <strong>REQUIRED</strong> - if empty, the acl\nplugin is disabled.</p>\n<p>Currently, there is a single driver available: <code>vfile</code>. This driver\nsupports two ways of defining the ACL configuration:</p>\n<ul>\n<li>\n<p><em>global</em>: ACL rules are applied to all users.</p>\n</li>\n<li>\n<p><em>per-mailbox</em>: Each mailbox has separate ACL rules. They are stored in a\n<code>dovecot-acl</code> file in each mailbox (or <code><a href=\"/main/core/summaries/settings.html#mail_control_path\">mail_control_path</a></code>)\ndirectory. This is the default.</p>\n</li>\n</ul>\n",
    "plugin_link": "<a href=\"/main/core/plugins/acl.html\">acl plugin</a>"
  },
  "acl_id": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "plugin": [
      "acl"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#acl\">acl</a></code>",
      "<a href=\"/main/core/plugins/acl.html#acl-file-format\">ACL File Format</a>"
    ],
    "text": "<p>Specifies identity to match. See <a href=\"/main/core/plugins/acl.html#acl-file-format\">ACL File Format</a> for values. The\n<code><a href=\"/main/core/summaries/settings.html#acl\">acl</a></code> filter name refers to this setting.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/acl.html\">acl plugin</a>"
  },
  "acl_dict_index": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "plugin": [
      "acl"
    ],
    "default": "<code>yes</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Should ACL dict updates assume that there is a reverse lookup index. This\nshould be used with SQL/CQL based dicts.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/acl.html\">acl plugin</a>"
  },
  "acl_rights": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "plugin": [
      "acl"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#acl\">acl</a></code>",
      "<a href=\"/main/core/plugins/acl.html#acl-file-format\">ACL File Format</a>"
    ],
    "text": "<p>Specifies rights for this acl. See <a href=\"/main/core/plugins/acl.html#acl-file-format\">ACL File Format</a> for values. This is\nusually used in <code><a href=\"/main/core/summaries/settings.html#acl\">acl</a></code> block.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/acl.html\">acl plugin</a>"
  },
  "acl_global_path": {
    "removed": [
      {
        "version": "<span class=\"VPBadge danger\">Removed: 3.2.0</span>"
      }
    ],
    "plugin": [
      "acl"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#acl\">acl</a></code>"
    ],
    "text": "<p>Location of global ACL configuration file. This option is deprecated, you\nshould use <code><a href=\"/main/core/summaries/settings.html#acl\">acl</a></code> instead.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/acl.html\">acl plugin</a>"
  },
  "acl_defaults_from_inbox": {
    "default": "<code>no</code>",
    "plugin": [
      "acl"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, the default ACLs for private and shared namespaces (but not\npublic namespaces) are taken from the INBOX. This means that giving\nsomebody access to your INBOX will give them access to all your other\nmailboxes as well, unless the specific mailboxes' ACLs override the\nINBOX's.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/acl.html\">acl plugin</a>"
  },
  "acl_globals_only": {
    "default": "<code>no</code>",
    "plugin": [
      "acl"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, don't try to find <code>dovecot-acl</code> files from mailbox\ndirectories. This reduces unnecessary disk I/O when only global ACLs are\nused.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/acl.html\">acl plugin</a>"
  },
  "acl_groups": {
    "plugin": [
      "acl"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>A comma-separated string which contains all the groups the user belongs to.</p>\n<p>A user's UNIX groups have no effect on ACLs (you can enable them by using a\nspecial <a href=\"/main/core/config/post_login_scripting.html\">post-login scripting</a>.</p>\n<p>The default ACL for mailboxes is to give the mailbox owner all permissions\nand other users none. Mailboxes in public namespaces don't have owners, so\nby default no one can access them.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/acl.html\">acl plugin</a>"
  },
  "acl_ignore": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "plugin": [
      "acl"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Can be used in global config, namespace, or mailbox level to ignore ACLs.</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>namespace ignore {</span></span>\n<span class=\"line\"><span>  acl_ignore = yes</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/acl.html\">acl plugin</a>"
  },
  "acl_sharing_map": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "plugin": [
      "acl"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/dict.html\">dictionary</a>"
    ],
    "text": "<p>A shared mailbox dictionary that defines which users may LIST mailboxes\nshared by other users.</p>\n<p>See <a href=\"/main/core/config/shared_mailboxes.html#shared-mailbox-listing\">shared mailbox listing</a> for further details on the contents\nof the dictionary entries.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>acl_sharing_map {</span></span>\n<span class=\"line\"><span>  dict file {</span></span>\n<span class=\"line\"><span>    path = /var/lib/dovecot/shared-mailboxes</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/acl.html\">acl plugin</a>",
    "no_default": true
  },
  "acl_user": {
    "plugin": [
      "acl"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/auth/master_users.html#acls\">ACL Master Users</a>"
    ],
    "text": "<p>See <code><a href=\"/main/core/summaries/settings.html#auth_master_user_separator\">auth_master_user_separator</a></code> for the format of this setting.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/acl.html\">acl plugin</a>"
  },
  "apparmor_hats": {
    "plugin": [
      "apparmor"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>List of AppArmor &quot;hats&quot; to change to when a user is loaded.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>apparmor_hats {</span></span>\n<span class=\"line\"><span>  hat_name = yes</span></span>\n<span class=\"line\"><span>  another_hat = yes</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/apparmor.html\">apparmor plugin</a>"
  },
  "charset_aliases": {
    "plugin": [
      "charset-alias"
    ],
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "text": "<p>List of <code>&lt;from&gt;=&lt;to&gt;</code> charsets. The &quot;from&quot; charsets\nwill be treated as &quot;to&quot; charsets when decoding to UTF-8.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>charset_aliases {</span></span>\n<span class=\"line\"><span>  shift_jis = sjis-win</span></span>\n<span class=\"line\"><span>  euc-jp = eucjp-win</span></span>\n<span class=\"line\"><span>  iso-2022-jp = iso-2022-jp-3</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/charset_alias.html\">charset-alias plugin</a>"
  },
  "fts": {
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "text": "<p>Configures the used fts driver to perform <a href=\"/main/core/plugins/fts.html\">fts plugin</a> indexing. If not\nspecified, FTS is disabled. The filter name refers to the\n<code><a href=\"/main/core/summaries/settings.html#fts_driver\">fts_driver</a></code> setting.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>fts solr {</span></span>\n<span class=\"line\"><span>  # ...</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "fts_autoindex": {
    "default": "<code>no</code>",
    "plugin": [
      "fts"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fts_autoindex_max_recent_msgs\">fts_autoindex_max_recent_msgs</a></code>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, index mail as it is delivered or appended.</p>\n<p>It can be overridden at the mailbox level, e.g. you can disable autoindexing\nfor selected mailboxes using this setting:</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>fts_autoindex = yes</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span># ...</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>mailbox trash {</span></span>\n<span class=\"line\"><span>  special_use = Trash</span></span>\n<span class=\"line\"><span>  fts_autoindex = no</span></span>\n<span class=\"line\"><span>}</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>mailbox spam {</span></span>\n<span class=\"line\"><span>  special_use = Junk</span></span>\n<span class=\"line\"><span>  fts_autoindex = no</span></span>\n<span class=\"line\"><span>}</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>mailbox storage/* {</span></span>\n<span class=\"line\"><span>  fts_autoindex = no</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "fts_autoindex_max_recent_msgs": {
    "plugin": [
      "fts"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fts_autoindex\">fts_autoindex</a></code>"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>To exclude infrequently accessed mailboxes from automatic indexing, set\nthis value to the maximum number of <code>Recent</code> flagged messages that exist\nin the mailbox.</p>\n<p>A value of <code>0</code> means to ignore this setting.</p>\n<p>Mailboxes with more flagged <code>Recent</code> messages than this value will not\nbe autoindexed, even though they get deliveries or appends. This is useful\nfor, e.g., inactive Junk folders.</p>\n<p>Any folders excluded from automatic indexing will still be indexed, if a\nsearch on them is performed.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>fts_autoindex_max_recent_msgs = 999</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "fts_decoder_driver": {
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "<empty>",
      "tika"
    ],
    "text": "<p>Optional setting. If set, decode attachments to plaintext using the selected\nservice and index the resulting plaintext.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "fts_decoder_script_socket_path": {
    "changed": [
      {
        "text": "<p>Renamed from <code>fts_decoder</code>.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.1.0</span>"
      }
    ],
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Name of the script service used to decode the attachments.\nWe strongly recommend using <code><a href=\"/main/core/summaries/settings.html#fts_decoder_driver\">fts_decoder_driver = tika</a></code> instead.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>fts_decoder_driver = script</span></span>\n<span class=\"line\"><span>fts_decoder_script_socket_path = fts-decoder</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>service fts-decoder {</span></span>\n<span class=\"line\"><span>  executable = script /path/to/fts-decoder.sh</span></span>\n<span class=\"line\"><span>  user = vmail</span></span>\n<span class=\"line\"><span>  unix_listener fts-decoder {</span></span>\n<span class=\"line\"><span>\tmode = 0666</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "advanced": true,
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "fts_driver": {
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "dovecot",
      "solr",
      "flatcurve"
    ],
    "text": "<p>Configures the used fts driver to perform <a href=\"/main/core/plugins/fts.html\">fts plugin</a> indexing. The\n<code><a href=\"/main/core/summaries/settings.html#fts\">fts</a></code> filter name refers to this setting.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "fts_search_add_missing": {
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "body-search-only",
      "yes"
    ],
    "default": "<code>body-search-only</code>",
    "text": "<p>Should missing mails be added to FTS indexes before search?</p>\n<p>With <code>body-search-only</code> this is done only when the search query requests\nsearching message bodies, i.e. header searches are not updating the FTS index.</p>\n<p>The unindexed mails are searched without FTS, i.e. either getting the headers\nfrom <code>dovecot.index.cache</code> or by opening the emails if the headers aren't in\ncache. This may be a useful optimization if the user's client only uses header\nsearches.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>Only the <code>yes</code> option guarantees consistent search results. Otherwise it's\npossible that the search results will be different depending on whether the\nsearch was performed via FTS index or not.</p>\n</div>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "fts_search_read_fallback": {
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>If FTS lookup or indexing fails, fall back to searching without FTS (i.e.\npossibly opening all emails). This may timeout for large mailboxes and/or slow\nstorage.</p>\n",
    "changed": [
      {
        "text": "<p>Default changed from <code>yes</code> to <code>no</code>.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.2.0</span>"
      }
    ],
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "fts_header_excludes": {
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>The list of headers to include or exclude.</p>\n<ul>\n<li>The default is the preexisting behavior, i.e. index all headers.</li>\n<li><code>includes</code> take precedence over <code>excludes</code>: if a header matches both,\nit is indexed.</li>\n<li>The terms are case insensitive.</li>\n<li>An asterisk <code>*</code> at the end of a header name matches anything starting\nwith that header name.</li>\n<li>The asterisk can only be used at the end of the header name.\nPrefix and infix usage of asterisk are not supported.</li>\n</ul>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>fts_header_excludes {</span></span>\n<span class=\"line\"><span>  Received = yes</span></span>\n<span class=\"line\"><span>  DKIM-* = yes</span></span>\n<span class=\"line\"><span>  X-* = yes</span></span>\n<span class=\"line\"><span>  Comments = yes</span></span>\n<span class=\"line\"><span>}</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>fts_header_includes {</span></span>\n<span class=\"line\"><span>  X-Spam-Status = yes</span></span>\n<span class=\"line\"><span>  Comments = yes</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div><ul>\n<li>\n<p><code>Received</code> headers, all <code>DKIM-</code> headers and all <code>X-</code> experimental\nheaders are excluded, with the following exceptions:</p>\n<ul>\n<li><code>Comments</code> and <code>X-Spam-Status</code> are indexed anyway, as they match\n<strong>both</strong> <code>excludes</code> and <code>includes</code> lists.</li>\n<li>All other headers are indexed.</li>\n</ul>\n</li>\n</ul>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>fts_header_excludes {</span></span>\n<span class=\"line\"><span>  * = yes</span></span>\n<span class=\"line\"><span>}</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>fts_header_includes {</span></span>\n<span class=\"line\"><span>  From = yes</span></span>\n<span class=\"line\"><span>  To = yes</span></span>\n<span class=\"line\"><span>  Cc = yes</span></span>\n<span class=\"line\"><span>  Bcc = yes</span></span>\n<span class=\"line\"><span>  Subject = yes</span></span>\n<span class=\"line\"><span>  Message-ID = yes</span></span>\n<span class=\"line\"><span>  In-* = yes</span></span>\n<span class=\"line\"><span>  X-CustomApp-* = yes</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div><ul>\n<li>No headers are indexed, except those specified in the <code>includes</code>.</li>\n</ul>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "fts_header_includes": {
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fts_header_excludes\">fts_header_excludes</a></code>"
    ],
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "fts_search_timeout": {
    "default": "<code>30s</code>",
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>When the full text search driver detects that the index isn't up-to-date,\nthe indexer is told to index the messages and is given this much time to do\nso. If this time limit is reached, an error is returned, indicating that\nthe search timed out during waiting for the indexing to complete:\n<code>NO [INUSE] Timeout while waiting for indexing to finish</code>.</p>\n<p>A value of <code>0</code> means no timeout.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "fts_message_max_size": {
    "default": "<code>unlimited</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "text": "<p>Maximum body size that is processed by fts.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "fts_decoder_tika": {
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fts_decoder_tika_url\">fts_decoder_tika_url</a></code>"
    ],
    "text": "<p>Named filter used for <a href=\"https://tika.apache.org/\" target=\"_blank\" rel=\"noreferrer\">Apache Tika</a> HTTP lookups.\nFor example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>fts_decoder_tika {</span></span>\n<span class=\"line\"><span>  http_client_request_timeout = 10s</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>",
    "no_default": true
  },
  "fts_decoder_tika_url": {
    "added": [
      {
        "text": "<p>Basic authentication support (via URL) is added.</p>\n",
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "changed": [
      {
        "text": "<p>Renamed from <code>fts_tika</code>.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.1.0</span>"
      }
    ],
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fts_decoder_tika\">fts_decoder_tika</a></code>"
    ],
    "text": "<p>URL for <a href=\"https://tika.apache.org/\" target=\"_blank\" rel=\"noreferrer\">Apache Tika</a> decoder for attachments.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>fts_decoder_driver = tika</span></span>\n<span class=\"line\"><span>fts_decoder_tika_url = http://tikahost:9998/tika/</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "textcat_config_path": {
    "plugin": [
      "fts"
    ],
    "default": "<code>&lt;textcat dir&gt;</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#language\">language</a></code>"
    ],
    "text": "<p>Path to the textcat/exttextcat configuration file, which lists the\nsupported languages.</p>\n<p>This is recommended to be changed to point to a minimal version of a\nconfiguration that supports only the languages listed in\n<code><a href=\"/main/core/summaries/settings.html#language\">language</a></code>.</p>\n<p>Doing this improves language detection performance during indexing and also\nmakes the detection more accurate.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>textcat_config_path = /usr/share/libexttextcat/fpdb.conf</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "language": {
    "plugin": [
      "fts"
    ],
    "default": "<code>&lt;textcat dir&gt;</code>",
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "dependencies": [
      "<code><a href=\"/main/core/summaries/settings.html#language_default\">language_default</a></code>"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#textcat_config_path\">textcat_config_path</a></code>",
      "<a href=\"/main/core/plugins/fts.html#tokenization\">FTS Tokenization</a>"
    ],
    "text": "<p>Defines a language to be used in tokenization.</p>\n<p>At least one language must be specified and one single language must be flagged\nas the default language using <code><a href=\"/main/core/summaries/settings.html#language_default\">language_default = yes</a></code>.</p>\n<p>The language listed first is the default and is used when language\nrecognition fails.</p>\n<p>The filters used for stemming and stopwords are language dependent.</p>\n<div class=\"tip custom-block\"><p class=\"custom-block-title\">TIP</p>\n<p>For better performance it's recommended to synchronize this setting with the\ntextcat configuration file; see <code><a href=\"/main/core/summaries/settings.html#textcat_config_path\">textcat_config_path</a></code>.</p>\n</div>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>language en {</span></span>\n<span class=\"line\"><span>  default = yes</span></span>\n<span class=\"line\"><span>}</span></span>\n<span class=\"line\"><span>language de {</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "language_default": {
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "dependencies": [
      "<code><a href=\"/main/core/summaries/settings.html#language\">language</a></code>"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/fts.html#tokenization\">FTS Tokenization</a>"
    ],
    "text": "<p>The language marked as default will be used when language detection cannot\nidentify the proper language of the text being processed.</p>\n<p>Exactly one language must be marked with this flag.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "language_filters": {
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/fts.html#tokenization\">FTS Tokenization</a>",
      "<a href=\"/main/core/plugins/fts.html#filter-configuration\">Filter Configuration</a>"
    ],
    "text": "<p>The list of filters to apply.</p>\n<p>See <a href=\"/main/core/plugins/fts.html#filter-configuration\">Filter Configuration</a> for configuration information.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "language_tokenizers": {
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "default": "<code>generic email-address</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/fts.html#tokenization\">FTS Tokenization</a>",
      "<a href=\"/main/core/plugins/fts.html#tokenizer-configuration\">Tokenizer Configuration</a>"
    ],
    "text": "<p>The list of tokenizers to use.</p>\n<p>See <a href=\"/main/core/plugins/fts.html#tokenizer-configuration\">Tokenizer Configuration</a> for configuration information.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "language_filter_normalizer_icu_id": {
    "plugin": [
      "fts"
    ],
    "tags": [
      "language-filter-normalizer-icu"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>Any-Lower; NFKD; [: Nonspacing Mark :] Remove; [\\x20] Remove</code>",
    "text": "<p>Description of the normalizing/transliterating rules to use.</p>\n<p>See\n<a href=\"https://unicode-org.github.io/icu/userguide/transforms/general/#transliterator-identifiers\" target=\"_blank\" rel=\"noreferrer\">Normalizer Format</a>\nfor syntax.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "language_filter_stopwords_dir": {
    "plugin": [
      "fts"
    ],
    "tags": [
      "language-filter-stopwords-dir"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/fts.html#tokenization\">FTS Tokenization</a>"
    ],
    "text": "<p>Path to the directory containing stopword files. The files inside the directory\nhave names with the form <code>/stopwords_&lt;lang&gt;.txt</code>.</p>\n<p>See <a href=\"/main/core/plugins/fts.html#languages\">Languages</a> for the list of stopword files that are currently\ndistributed with Dovecot.</p>\n<p>More languages can be obtained from:</p>\n<ul>\n<li><a href=\"https://lucene.apache.org/\" target=\"_blank\" rel=\"noreferrer\">Apache Lucene</a>,</li>\n<li><a href=\"https://snowballstem.org/\" target=\"_blank\" rel=\"noreferrer\">Snowball stemmer</a>, or</li>\n<li><a href=\"https://github.com/stopwords-iso/\" target=\"_blank\" rel=\"noreferrer\">GitHub - Stopwords ISO</a>.</li>\n</ul>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "language_tokenizer_address_token_maxlen": {
    "plugin": [
      "fts"
    ],
    "tags": [
      "language-tokenizer-email-address"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>250</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/fts.html#tokenization\">FTS Tokenization</a>"
    ],
    "text": "<p>Maximum length of token, before an arbitrary cut off is made.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "language_tokenizer_generic_algorithm": {
    "plugin": [
      "fts"
    ],
    "tags": [
      "language-tokenizer-generic"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "simple",
      "tr29"
    ],
    "default": "<code>simple</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/fts.html#tokenization\">FTS Tokenization</a>"
    ],
    "text": "<p>Defines the method for finding word boundaries.</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>simple</code></td>\n<td>Faster algorithm that works for many texts, especially using the latin alphabets, but leaves corner cases.</td>\n</tr>\n<tr>\n<td><code>tr29</code></td>\n<td>Implements a version of Unicode technical report 29 word boundary lookup. It might work better with texts containing e.g. Katakana or Hebrew characters, but it is not possible to use a single algorithm for all existing languages.</td>\n</tr>\n</tbody>\n</table>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "language_tokenizer_generic_token_maxlen": {
    "plugin": [
      "fts"
    ],
    "tags": [
      "language-tokenizer-generic"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>30</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/fts.html#tokenization\">FTS Tokenization</a>"
    ],
    "text": "<p>Maximum length of token, before an arbitrary cut off is made.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "language_tokenizer_generic_wb5a": {
    "plugin": [
      "fts"
    ],
    "tags": [
      "language-tokenizer-generic"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/fts.html#tokenization\">FTS Tokenization</a>"
    ],
    "text": "<p>Unicode TR29 rule WB5a setting to the tr29 tokenizer. Splits prefixing\ncontracted words from base word. E.g. <code>l'homme</code> -&gt; <code>l</code> and <code>homme</code>.\nTogether with a language specific stopword list unnecessary contractions can\nthus be filtered away. This is disabled by default and only works with the TR29\nalgorithm.</p>\n<p>Enable by declaring:</p>\n<ul>\n<li><code><a href=\"/main/core/summaries/settings.html#language_tokenizer_generic_algorithm\">language_tokenizer_generic_algorithm = tr29</a></code> and</li>\n<li><code><a href=\"/main/core/summaries/settings.html#language_tokenizer_generic_wb5a\">language_tokenizer_generic_wb5a = yes</a></code>.</li>\n</ul>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "language_tokenizer_kuromoji_icu_id": {
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>Any-NFKC</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/fts.html#tokenization\">FTS Tokenization</a>"
    ],
    "text": "<p>Description of the normalizing/transliterating rules to use. See\n<a href=\"https://unicode-org.github.io/icu/userguide/transforms/general/#transliterator-identifiers\" target=\"_blank\" rel=\"noreferrer\">Normalizer Format</a>\nfor syntax.</p>\n<p>Defaults to <code>Any-NFKC</code> which is quite good for CJK text mixed with latin\nalphabet languages. It transforms CJK characters to full-width encoding and\ntransforms latin ones to half-width. The NFKC transformation is described\nabove.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>If this setting is changed, existing FTS indexes will produce unexpected\nresults. The FTS indexes should be recreated in this case.</p>\n</div>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "language_tokenizer_kuromoji_split_compounds": {
    "plugin": [
      "fts"
    ],
    "advanced": true,
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>yes</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/fts.html#tokenization\">FTS Tokenization</a>"
    ],
    "text": "<p>This setting enables <code>search mode</code> in the Atilika Kuromoji library. The\nsetting defaults to enabled and should not be changed unless there is a\ncompelling reason.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>If this setting is changed, existing FTS indexes will produce unexpected\nresults. The FTS indexes should be recreated in this case.</p>\n</div>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "language_tokenizer_kuromoji_token_maxlen": {
    "plugin": [
      "fts"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>1024</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/fts.html#tokenization\">FTS Tokenization</a>"
    ],
    "text": "<p>Maximum length of token, before an arbitrary cut off is made.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts.html\">fts plugin</a>"
  },
  "fts_solr_batch_size": {
    "plugin": [
      "fts-solr"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>1000</code>",
    "text": "<p>Configures the number of mails sent to Solr in a single request.</p>\n<ul>\n<li>With <code><a href=\"/main/core/summaries/settings.html#fts_autoindex\">fts_autoindex = yes</a></code> each new mail gets separately indexed on\narrival, so <code>fts_solr_batch_size</code> only matters during the initial indexing\nof a mailbox.</li>\n<li>With <code><a href=\"/main/core/summaries/settings.html#fts_autoindex\">fts_autoindex = no</a></code> new mails don't get indexed on arrival, so\n<code>fts_solr_batch_size</code> is used when indexing is triggered.</li>\n</ul>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts_solr.html\">fts-solr plugin</a>"
  },
  "fts_solr_soft_commit": {
    "plugin": [
      "fts-solr"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>yes</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/fts_solr.html#soft-commits\">FTS Solr: Soft Commits</a>"
    ],
    "text": "<p>Controls whether new mails are immediately searchable via Solr.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts_solr.html\">fts-solr plugin</a>"
  },
  "fts_solr_url": {
    "plugin": [
      "fts-solr"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Required base URL for Solr.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>Remember to add your core name if using solr 7+: <code>/solr/dovecot</code>.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>fts_solr_url = http://solr.example.org:8983/solr/dovecot/</span></span>\n<span class=\"line\"><span>fts_solr_batch_size = 1000</span></span></code></pre>\n</div></div>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts_solr.html\">fts-solr plugin</a>"
  },
  "imap_acl_allow_anyone": {
    "plugin": [
      "imap-acl"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>By default Dovecot doesn't allow using the IMAP <code>anyone</code> or\n<code>authenticated</code> identifier, because it would be an easy way to spam\nother users in the system.</p>\n<p>If <a href=\"/main/core/plugins/mail_crypt.html\">mail-crypt plugin</a> is used, users who have different set of encryption\nkeys cannot share mails, but sharing is possible within the scope of a key.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/imap_acl.html\">imap-acl plugin</a>"
  },
  "last_login": {
    "plugin": [
      "last-login"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Named filter for initializing dictionary used to store last login information.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>redis_host = 127.0.0.1</span></span>\n<span class=\"line\"><span>redis_port = 6379</span></span>\n<span class=\"line\"><span>last_login {</span></span>\n<span class=\"line\"><span>  dict redis {</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/last_login.html\">last-login plugin</a>",
    "no_default": true
  },
  "last_login_key": {
    "default": "<code>last-login/%{user}</code>",
    "plugin": [
      "last-login"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The key that is updated in the dictionary with the last login information.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/last_login.html\">last-login plugin</a>"
  },
  "last_login_precision": {
    "default": "<code>s</code>",
    "plugin": [
      "last-login"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "s",
      "ms",
      "us",
      "ns"
    ],
    "text": "<p>Precision for last login timestamp.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/last_login.html\">last-login plugin</a>"
  },
  "lazy_expunge_mailbox": {
    "plugin": [
      "lazy-expunge"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/lazy_expunge.html#storage-locations\">lazy-expunge storage locations</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The mailbox to move messages to when expunged. This setting MUST be defined or\nelse lazy-expunge plugin will not be active.</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>lazy_expunge_mailbox = .EXPUNGED</span></span>\n<span class=\"line\"><span>namespace inbox {</span></span>\n<span class=\"line\"><span>  mailbox Drafts {</span></span>\n<span class=\"line\"><span>    lazy_expunge_mailbox =</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>  namespace \"External accounts\" {</span></span>\n<span class=\"line\"><span>    lazy_expunge_mailbox =</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/lazy_expunge.html\">lazy-expunge plugin</a>"
  },
  "lazy_expunge_only_last_instance": {
    "default": "<code>yes</code>",
    "changed": [
      {
        "text": "<p>Changed from <code>no</code> to <code>yes</code>.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.2.0</span>"
      }
    ],
    "plugin": [
      "lazy-expunge"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If <code>yes</code>, only move to expunged storage if this is the last copy of the\nmessage in the user's account. This prevents the same mail from being\nduplicated in the lazy-expunge folder as the mail becomes expunged from\nall the folders it existed in.</p>\n<p>This setting prevents copying mail to the lazy-expunge folder when using\nthe IMAP MOVE command. When using COPY/EXPUNGE, this setting prevents\nduplicates only with the following mailbox formats:</p>\n<ul>\n<li><a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a> (with <code><a href=\"/main/core/summaries/settings.html#maildir_copy_with_hardlinks\">maildir_copy_with_hardlinks = yes</a></code>, which is\nthe default)</li>\n<li><a href=\"/main/core/config/mailbox_formats/dbox.html#single-dbox-sdbox\">sdbox</a>/<a href=\"/main/core/config/mailbox_formats/dbox.html#multi-dbox-mdbox\">mdbox</a></li>\n<li>obox (with <a href=\"/main/storage/dictmap.html\">Dictmap</a> or with <a href=\"/main/core/config/fs.html#posix-filesystem\">posix</a>)</li>\n</ul>\n",
    "plugin_link": "<a href=\"/main/core/plugins/lazy_expunge.html\">lazy-expunge plugin</a>"
  },
  "compress_bz2_block_size_100k": {
    "plugin": [
      "mail-compress"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>9</code>",
    "text": "<p>The compression block size to use. Must be between <code>1</code> (<code>100 000</code> bytes)\nand <code>9</code> (<code>900 000</code> bytes).</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_compress.html\">mail-compress plugin</a>"
  },
  "compress_deflate_level": {
    "plugin": [
      "mail-compress"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>6</code>",
    "text": "<p>The compression level to use for deflate compression. Must be between <code>0</code> (no compression) and <code>9</code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_compress.html\">mail-compress plugin</a>"
  },
  "compress_gz_level": {
    "plugin": [
      "mail-compress"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>6</code>",
    "text": "<p>The compression level to use for gz compression. Must be between <code>0</code> (no compression) and <code>9</code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_compress.html\">mail-compress plugin</a>"
  },
  "compress_zstd_level": {
    "plugin": [
      "mail-compress"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>3</code>",
    "text": "<p>The compression level to use for zstd compression. Must be between <code>1</code> and\n<code>22</code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_compress.html\">mail-compress plugin</a>"
  },
  "mail_compress_write_method": {
    "plugin": [
      "mail-compress"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The <a href=\"/main/core/plugins/mail_compress.html#compression-methods\">Compression Method</a> to use for\nwriting new mails. If empty, new mails are written without compression. Old\nmails can still be read.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_compress.html\">mail-compress plugin</a>"
  },
  "crypt_acl_require_secure_key_sharing": {
    "plugin": [
      "mail-crypt"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>If enabled, you cannot share a key to groups or someone without a public key.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_crypt.html\">mail-crypt plugin</a>"
  },
  "crypt_user_key_curve": {
    "plugin": [
      "mail-crypt"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Defines the elliptic curve to use for key generation. A key pair is generated\nfor the user, and a key pair is generated for each folder. The folder key is\nencrypted using the user key.</p>\n<p>This must be set if you wish to use <a href=\"/main/core/plugins/mail_crypt.html#folder-keys\">folder keys</a>\nrather than <a href=\"/main/core/plugins/mail_crypt.html#global-keys\">global keys</a>. With global keys\n(either RSA or EC keys), all keying material is taken from the global key\nsettings and no key generation is performed.</p>\n<p>Any valid curve supported by the underlying cryptographic library is allowed.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>crypt_user_key_curve = secp521r1</span></span></code></pre>\n</div><p>For EdDSA, you need to use X448 or X25519, case sensitive.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_crypt.html\">mail-crypt plugin</a>"
  },
  "crypt_global_public_key_file": {
    "plugin": [
      "mail-crypt"
    ],
    "values": [
      {
        "label": "File",
        "url": "<a href=\"/main/core/settings/types.html#file\">File</a>"
      }
    ],
    "text": "<p>Public key to encrypt files. Key must be in\n<a href=\"/main/core/plugins/mail_crypt.html#converting-ec-key-to-pkey\">PEM pkey format</a>. The PEM key may\nadditionally be base64-encoded into a single line, which can make it easier to\nstore into userdb extra fields.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_crypt.html\">mail-crypt plugin</a>"
  },
  "crypt_global_private_key": {
    "plugin": [
      "mail-crypt"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#crypt_private_key_file\">crypt_private_key_file</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#crypt_private_key_password\">crypt_private_key_password</a></code>"
    ],
    "text": "<p>List of global private key(s) to decrypt mails. Add\n<code><a href=\"/main/core/summaries/settings.html#crypt_private_key_file\">crypt_private_key_file</a></code> and optionally\n<code><a href=\"/main/core/summaries/settings.html#crypt_private_key_password\">crypt_private_key_password</a></code> inside each filter.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_crypt.html\">mail-crypt plugin</a>"
  },
  "crypt_user_key_encryption_key": {
    "plugin": [
      "mail-crypt"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#crypt_private_key_file\">crypt_private_key_file</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#crypt_private_key_password\">crypt_private_key_password</a></code>"
    ],
    "text": "<p>List of private key(s) to decrypt user's master private key. Add\n<code><a href=\"/main/core/summaries/settings.html#crypt_private_key_file\">crypt_private_key_file</a></code> and optionally\n<code><a href=\"/main/core/summaries/settings.html#crypt_private_key_password\">crypt_private_key_password</a></code> inside each filter.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_crypt.html\">mail-crypt plugin</a>"
  },
  "crypt_user_key_password": {
    "plugin": [
      "mail-crypt"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Password to decrypt user's master private key.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_crypt.html\">mail-crypt plugin</a>"
  },
  "crypt_user_key_require_encrypted": {
    "plugin": [
      "mail-crypt"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#crypt_user_key_password\">crypt_user_key_password</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#crypt_user_key_encryption_key\">crypt_user_key_encryption_key</a></code>"
    ],
    "text": "<p>If yes, require user's master private key to be encrypted with\n<code><a href=\"/main/core/summaries/settings.html#crypt_user_key_password\">crypt_user_key_password</a></code> or\n<code><a href=\"/main/core/summaries/settings.html#crypt_user_key_encryption_key\">crypt_user_key_encryption_key</a></code>. If they are unset new user key\ngeneration will fail. This setting doesn't affect already existing\nnon-encrypted keys.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_crypt.html\">mail-crypt plugin</a>"
  },
  "crypt_write_algorithm": {
    "plugin": [
      "mail-crypt"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>aes-256-gcm-sha256</code>",
    "text": "<p>Set the encryption algorithm for newly written mails. If empty, new mails are\nnot encrypted. Existing encrypted mails (with any algorithm) can be decrypted\nregardless of this setting.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_crypt.html\">mail-crypt plugin</a>"
  },
  "crypt_private_key_name": {
    "plugin": [
      "mail-crypt"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#crypt_global_private_key\">crypt_global_private_key</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#crypt_user_key_encryption_key\">crypt_user_key_encryption_key</a></code>"
    ],
    "text": "<p>Name of the private key inside <code><a href=\"/main/core/summaries/settings.html#crypt_global_private_key\">crypt_global_private_key</a></code> or\n<code><a href=\"/main/core/summaries/settings.html#crypt_user_key_encryption_key\">crypt_user_key_encryption_key</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_crypt.html\">mail-crypt plugin</a>"
  },
  "crypt_private_key_file": {
    "plugin": [
      "mail-crypt"
    ],
    "values": [
      {
        "label": "File",
        "url": "<a href=\"/main/core/settings/types.html#file\">File</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/mail_crypt.html#converting-ec-key-to-pkey\">Mail Crypt Plugin: Converting EC key to PKEY</a>",
      "<code><a href=\"/main/core/summaries/settings.html#crypt_global_private_key\">crypt_global_private_key</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#crypt_user_key_encryption_key\">crypt_user_key_encryption_key</a></code>"
    ],
    "text": "<p>Private key in <a href=\"/main/core/plugins/mail_crypt.html#converting-ec-key-to-pkey\">Mail Crypt Plugin: Converting EC key to PKEY</a>. The PEM key may\nadditionally be base64-encoded into a single line, which can make it easier to\nstore into userdb extra fields.</p>\n<p>Used inside <code><a href=\"/main/core/summaries/settings.html#crypt_global_private_key\">crypt_global_private_key</a></code> and\n<code><a href=\"/main/core/summaries/settings.html#crypt_user_key_encryption_key\">crypt_user_key_encryption_key</a></code> lists.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_crypt.html\">mail-crypt plugin</a>"
  },
  "crypt_private_key_password": {
    "plugin": [
      "mail-crypt"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#crypt_private_key_file\">crypt_private_key_file</a></code>"
    ],
    "text": "<p>Password to decrypt <code><a href=\"/main/core/summaries/settings.html#crypt_private_key_file\">crypt_private_key_file</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_crypt.html\">mail-crypt plugin</a>"
  },
  "mail_log_cached_only": {
    "default": "<code>no</code>",
    "plugin": [
      "mail-log"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, everything except <code>save</code> event will log only the fields that\ncan be looked up from cache. This improves performance if some of the\nfields aren't cached and it's not a strict requirement to log them.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_log.html\">mail-log plugin</a>"
  },
  "mail_log_events": {
    "plugin": [
      "mail-log"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>List of events to log.</p>\n<p>Available events:</p>\n<ul>\n<li><code>delete</code></li>\n<li><code>undelete</code></li>\n<li><code>expunge</code></li>\n<li><code>save</code></li>\n<li><code>copy</code></li>\n<li><code>mailbox_create</code></li>\n<li><code>mailbox_delete</code></li>\n<li><code>mailbox_rename</code></li>\n<li><code>flag_change</code></li>\n</ul>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_log.html\">mail-log plugin</a>"
  },
  "mail_log_fields": {
    "plugin": [
      "mail-log"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>List of fields to log.</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Field</th>\n<th>Restrictions</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>uid</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>box</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>msgid</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>size</code></td>\n<td>Only available for <code>expunge</code> and <code>copy</code> events.</td>\n</tr>\n<tr>\n<td><code>vsize</code></td>\n<td>Only available for <code>expunge</code> and <code>copy</code> events.</td>\n</tr>\n<tr>\n<td><code>vsize</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>flags</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>from</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>subject</code></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n",
    "plugin_link": "<a href=\"/main/core/plugins/mail_log.html\">mail-log plugin</a>"
  },
  "mail_lua": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "plugin": [
      "mail-lua"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#lua_file\">lua_file</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#lua_settings\">lua_settings</a></code>"
    ],
    "text": "<p>Named filter for initializing <a href=\"/main/core/plugins/mail_lua.html\">mail_lua plugin</a> settings.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>mail_lua {</span></span>\n<span class=\"line\"><span>  lua_file = /etc/dovecot/user.lua</span></span>\n<span class=\"line\"><span>  lua_settings {</span></span>\n<span class=\"line\"><span>    extra_param = %{userdb:extra_param}</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/mail_lua.html\">mail-lua plugin</a>",
    "no_default": true
  },
  "mailbox_notify_status": {
    "plugin": [
      "notify-status"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Whether notifications for a single mailbox or mailbox wildcards are enabled.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>mailbox INBOX {</span></span>\n<span class=\"line\"><span>  notify_status = yes</span></span>\n<span class=\"line\"><span>}</span></span>\n<span class=\"line\"><span>mailbox Spam {</span></span>\n<span class=\"line\"><span>  notify_status = yes</span></span>\n<span class=\"line\"><span>}</span></span>\n<span class=\"line\"><span>mailbox *BOX {</span></span>\n<span class=\"line\"><span>  notify_status = yes</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/notify_status.html\">notify-status plugin</a>"
  },
  "notify_status": {
    "filter": "`notify_status`",
    "plugin": [
      "notify-status"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "dependencies": [
      "<a href=\"/main/core/config/dict.html\">dictionary</a>"
    ],
    "text": "<p>The URI of the dictionary to use. This MUST be set for the plugin to be active.</p>\n<p>See <a href=\"/main/core/config/dict.html\">dictionary</a> for how to configure dictionaries.</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>notify_status {</span></span>\n<span class=\"line\"><span>  dict proxy {</span></span>\n<span class=\"line\"><span>    name = notify_status</span></span>\n<span class=\"line\"><span>    socket_path = dict-async</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/notify_status.html\">notify-status plugin</a>"
  },
  "notify_status_value": {
    "default": "<code>{&quot;messages&quot;:%{messages},&quot;unseen&quot;:%{unseen}}</code>",
    "plugin": [
      "notify-status"
    ],
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "text": "<p>A template of the string that will be written to the dictionary.</p>\n<p>The template supports variable substitution of the form\n<code>%{variable_name}</code>.</p>\n<p>Supported variable substitutions:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Field</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>first_recent_uid</code></td>\n<td>First recent UID</td>\n</tr>\n<tr>\n<td><code>highest_modseq</code></td>\n<td>Highest modification sequence number</td>\n</tr>\n<tr>\n<td><code>highest_pvt_modseq</code></td>\n<td>Highest private modification sequence number</td>\n</tr>\n<tr>\n<td><code>mailbox</code></td>\n<td>Mailbox name</td>\n</tr>\n<tr>\n<td><code>messages</code></td>\n<td>Number of messages</td>\n</tr>\n<tr>\n<td><code>recent</code></td>\n<td>Number of recent messages (deprecated)</td>\n</tr>\n<tr>\n<td><code>uidnext</code></td>\n<td>Predicted next UID value</td>\n</tr>\n<tr>\n<td><code>uidvalidity</code></td>\n<td>Current UID validity</td>\n</tr>\n<tr>\n<td><code>unseen</code></td>\n<td>Number of unseen messages</td>\n</tr>\n<tr>\n<td><code>username</code></td>\n<td>Username (user@domain)</td>\n</tr>\n</tbody>\n</table>\n",
    "plugin_link": "<a href=\"/main/core/plugins/notify_status.html\">notify-status plugin</a>"
  },
  "pop3_migration_all_mailboxes": {
    "default": "<code>no</code>",
    "plugin": [
      "pop3-migration"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>By default it's assumed that POP3 contains the same messages as IMAP INBOX.\nIf there are any unexpected mails, the migration fails. If the POP3 server\nincludes other folders' contents in POP3 as well, this setting needs to be\nenabled. It causes Dovecot to try to match POP3 messages in all the migrated\nfolders, not just INBOX. There is no warning logged if any POP3 UIDLs are\nmissing or if POP3 has messages that aren't found from IMAP.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/pop3_migration.html\">pop3-migration plugin</a>"
  },
  "pop3_migration_ignore_extra_uidls": {
    "default": "<code>no</code>",
    "plugin": [
      "pop3-migration"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If IMAP INBOX has all messages that exist in POP3, but POP3 still has some\nadditional messages, the migration fails. Enable this setting to log it as\na warning and continue anyway. This could happen if there's a race condition\nwhere a new mail is just delivered and it shows up in POP3 but not in IMAP.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/pop3_migration.html\">pop3-migration plugin</a>"
  },
  "pop3_migration_ignore_missing_uidls": {
    "default": "<code>no</code>",
    "plugin": [
      "pop3-migration"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If POP3 has messages that aren't found from IMAP INBOX, and IMAP INBOX also\nhas messages not found from POP3, the migration fails. Enable this setting\nto log it as a warning and continue anyway.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/pop3_migration.html\">pop3-migration plugin</a>"
  },
  "pop3_migration_mailbox": {
    "default": "<code>no</code>",
    "plugin": [
      "pop3-migration"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>This setting points to the POP3 INBOX in the configured pop3c namespace.\nThis setting is required for the plugin to be active.</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>pop3_migration_mailbox = POP3-MIGRATION-NS/INBOX</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/pop3_migration.html\">pop3-migration plugin</a>"
  },
  "pop3_migration_skip_size_check": {
    "default": "<code>no</code>",
    "plugin": [
      "pop3-migration"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>IMAP and POP3 messages are attempted to be matched by the message sizes by\ndefault. This is the most efficient way of matching the messages, since both\nIMAP and POP3 listings can usually be looked up from indexes/caches. If the\nIMAP INBOX and POP3 listings don't match exactly, or if two adjacent\nmessages have the same size, the rest of the messages are matched by reading\ntheir headers.</p>\n<p>If this setting is enabled, the message size check is skipped entirely and\nonly headers are matched. This may be necessary for reliability if it's\nknown that the IMAP and POP3 messages cannot be matched by size anyway.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/pop3_migration.html\">pop3-migration plugin</a>"
  },
  "pop3_migration_skip_uidl_cache": {
    "default": "<code>no</code>",
    "plugin": [
      "pop3-migration"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If imapc is configured with persistent indexes, the POP3 UIDLs are stored\ninto the imapc mailbox's dovecot.index.cache files. Any following\nincremental migrations use these cached UIDLs if possible. This setting\ncan be used to disable this in case there are any problems with the cache.\nThis setting is unlikely to be ever needed.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/pop3_migration.html\">pop3-migration plugin</a>"
  },
  "push_notification": {
    "plugin": [
      "push-notification"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The configuration value is a named filter for a specified driver, see\n<a href=\"/main/core/plugins/push_notification.html\">Push Notifications</a> for their names and their supported options.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/push_notification.html\">push-notification plugin</a>"
  },
  "push_notification_driver": {
    "plugin": [
      "push-notification"
    ],
    "filter": "push_notification",
    "dependencies": [
      "<code><a href=\"/main/core/summaries/settings.html#push_notification\">push_notification</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The name of the driver. This value determines the available options and the\nbehavior. See <a href=\"/main/core/plugins/push_notification.html\">Push Notifications</a> for the list of supported drivers and\noptions.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/push_notification.html\">push-notification plugin</a>"
  },
  "quota_clone": {
    "plugin": [
      "quota-clone"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/dict.html\">dictionary</a>"
    ],
    "text": "<p>Named filter for initializing dictionary used to update with quota clone\ninformation.</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>redis_host = 127.0.0.1</span></span>\n<span class=\"line\"><span>redis_port = 6379</span></span>\n<span class=\"line\"><span>quota_clone {</span></span>\n<span class=\"line\"><span>  dict redis {</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/quota_clone.html\">quota-clone plugin</a>",
    "no_default": true
  },
  "quota_clone_unset": {
    "plugin": [
      "quota-clone"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "advanced": true,
    "text": "<p>Unset quota information before updating. This is needed with some dict\ndrivers that do not support upserting, such as SQL with older SQLite.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota_clone.html\">quota-clone plugin</a>"
  },
  "quota": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#quota-root\">Quota Root</a>"
    ],
    "text": "<p>Create a new <a href=\"/main/core/plugins/quota.html#quota-root\">quota root</a>. The filter name refers\nto <code><a href=\"/main/core/summaries/settings.html#quota_name\">quota_name</a></code> setting.</p>\n<p>Globally configured quota roots are used only for private namespaces.\nTo use quota for public namespaces, configure it inside the public namespace.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>quota \"User quota\" {</span></span>\n<span class=\"line\"><span>  storage_size = 1G</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_driver": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>count</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#quota-drivers\">Quota Drivers</a>"
    ],
    "text": "<p>Quota driver to use. See <a href=\"/main/core/plugins/quota.html#quota-drivers\">Quota Drivers</a>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_enforce": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>yes</code><br /><code>quota_imapc { no }</code>",
    "text": "<p>If disabled, the quota limit isn't actually enforced. The quota is still\ntracked and the current quota usage is visible to IMAP GETQUOTA commands.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_exceeded_message": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>Quota exceeded (mailbox for user is full)</code>",
    "text": "<p>The message specified here is passed on to a user who goes over quota.\nThere are also other messages, which are currently hard coded:</p>\n<ul>\n<li>When exceeding <code><a href=\"/main/core/summaries/settings.html#quota_mail_size\">quota_mail_size</a></code>:\n<code>Mail size is larger than the maximum size allowed by server configuration</code></li>\n<li>When exceeding <code><a href=\"/main/core/summaries/settings.html#quota_mailbox_message_count\">quota_mailbox_message_count</a></code>:\n<code>Too many messages in the mailbox</code></li>\n</ul>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_fs_message_limit": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "tags": [
      "quota-fs"
    ],
    "default": "<code>no</code>",
    "text": "<p>If yes, use filesystem quota's inode limit as the message count limit.\nThis can be useful with Maildir or sdbox. Used only with\n<a href=\"/main/core/plugins/quota.html#driver-fs\">Quota Driver: Filesystem</a>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_fs_mount_path": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "tags": [
      "quota-fs"
    ],
    "text": "<p>If specified, enable FS quota for the specified mount path. Only mailboxes\nexisting in this mount path have the quota enabled. Empty value looks up the\nmountpoint automatically. Used only with <a href=\"/main/core/plugins/quota.html#driver-fs\">Quota Driver: Filesystem</a>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_fs_type": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "tags": [
      "quota-fs"
    ],
    "values_enum": [
      "any",
      "user",
      "group"
    ],
    "default": "<code>any</code>",
    "text": "<p>Using <code>any</code> attempts to use the user quota first, with a fallback to group\nquota. Using <code>user</code> or <code>group</code> only attempts to use the user or the group\nquota, with a fallback to unlimited quota limit. Used only with\n<a href=\"/main/core/plugins/quota.html#driver-fs\">Quota Driver: Filesystem</a>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_hidden": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>If yes, hide the quota root from IMAP GETQUOTA commands.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_ignore": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>If yes, don't include this mailbox or namespace in quota calculations.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>namespace inbox {</span></span>\n<span class=\"line\"><span>  mailbox Trash {</span></span>\n<span class=\"line\"><span>    quota_ignore = yes</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span>\n<span class=\"line\"><span>namespace secondary {</span></span>\n<span class=\"line\"><span>  quota_ignore = yes</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_ignore_unlimited": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>If yes, ignore the quota root entirely if it has no quota limits. This means\nno tracking of the quota, and not making it visible to IMAP GETQUOTA commands.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_imapc_mailbox_name": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "tags": [
      "quota-imapc"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#quota_imapc_root_name\">quota_imapc_root_name</a></code>"
    ],
    "default": "<code>INBOX</code>",
    "text": "<p>If non-empty, use <code>GETQUOTAROOT &lt;mailbox&gt;</code> to get the imapc quota root.\nUsed only with <a href=\"/main/core/plugins/quota.html#driver-imapc\">Quota Driver: Imapc</a>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_imapc_root_name": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "tags": [
      "quota-imapc"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#quota_imapc_mailbox_name\">quota_imapc_mailbox_name</a></code>"
    ],
    "default": "",
    "text": "<p>If <code><a href=\"/main/core/summaries/settings.html#quota_imapc_mailbox_name\">quota_imapc_mailbox_name</a></code> is empty, use <code>GETQUOTA &lt;name&gt;</code>\nto get the imapc quota.</p>\n<p>Some servers may have an empty quota root name. This is why if this setting and\n<code><a href=\"/main/core/summaries/settings.html#quota_imapc_mailbox_name\">quota_imapc_mailbox_name</a></code> both have empty values, this setting is\nused. Used only with <a href=\"/main/core/plugins/quota.html#driver-imapc\">Quota Driver: Imapc</a>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_mail_size": {
    "default": "<code>unlimited</code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "tags": [
      "storage_size_limits"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#maximum-saved-mail-size\">Quota: Maximum Saved Mail Size</a>"
    ],
    "text": "<p>The maximum message size that is allowed to be saved (e.g. by LMTP, IMAP\nAPPEND or <code><a href=\"/main/core/summaries/doveadm.html#save\">doveadm save</a></code>). If configured, will also be advertized with\n<code>APPENDLIMIT</code> extensions for IMAP clients, and <code>SIZE</code> extension for LMTP clients.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_mailbox_count": {
    "default": "<code>unlimited</code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "tags": [
      "storage_size_limits"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#maximum-mailbox-count\">Quota: Maximum Mailbox Count</a>"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "text": "<p>Maximum number of mailboxes that can be created. Each namespace is tracked\nseparately, so e.g. shared mailboxes aren't counted towards the user's own\nlimit.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_mailbox_message_count": {
    "default": "<code>unlimited</code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "tags": [
      "storage_size_limits"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "text": "<p>Maximum number of messages that can be created in a single mailbox.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_message_count": {
    "default": "<code>unlimited</code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#quota_message_percentage\">quota_message_percentage</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#quota_storage_size\">quota_storage_size</a></code>",
      "<a href=\"/main/core/plugins/quota.html#quota-root\">Quota Root</a>"
    ],
    "tags": [
      "storage_size_limits"
    ],
    "text": "<p>Maximum number of messages for the <a href=\"/main/core/plugins/quota.html#quota-root\">Quota Root</a>. This value is still\nmultiplied by <code><a href=\"/main/core/summaries/settings.html#quota_message_percentage\">quota_message_percentage</a></code> to get the final value\n(in this mailbox or namespace). This is reported as the MESSAGE limit in IMAP\nGETQUOTA commands. Using <code>0</code> as the value means the same as <code>unlimited</code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_message_percentage": {
    "default": "<code>100</code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#quota_message_count\">quota_message_count</a></code>"
    ],
    "text": "<p>Multiplier for the <code><a href=\"/main/core/summaries/settings.html#quota_message_count\">quota_message_count</a></code> setting (in this\nmailbox/namespace).</p>\n<p>This may be useful to exceed the regular quota limit in some mailboxes, such as\nallowing clients that move messages with IMAP COPY+EXPUNGE to Trash folder to\ntemporarily exceed the quota.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>quota_message_count = 10000</span></span>\n<span class=\"line\"><span>namespace inbox {</span></span>\n<span class=\"line\"><span>  mailbox Trash {</span></span>\n<span class=\"line\"><span>    # 110% * 10000 = 11000 limit</span></span>\n<span class=\"line\"><span>    quota_message_percentage = 110</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_name": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#quota\">quota</a></code>",
      "<a href=\"/main/core/plugins/quota.html#quota-root\">Quota Root</a>"
    ],
    "text": "<p>Name of the <a href=\"/main/core/plugins/quota.html#quota-root\">quota root</a>. The <code><a href=\"/main/core/summaries/settings.html#quota\">quota</a></code> filter name\nrefers to this setting.</p>\n<p>The quota root name is just an arbitrary string that is sent to IMAP\nclients, which in turn may show it to the user. The name has no meaning.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_over_status": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#overquota-flag\">Quota: Overquota Flag</a>"
    ],
    "text": "<p>Named filter for executing the overquota-flag script. The <code><a href=\"/main/core/summaries/settings.html#execute\">execute</a></code>\nsetting is required to be specified inside the filter.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>",
    "no_default": true
  },
  "quota_over_status_current": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#overquota-flag\">Quota: Overquota Flag</a>"
    ],
    "text": "<p>An identifier that indicates whether the overquota-flag is active for a user.</p>\n<p>This identifier is compared against <code><a href=\"/main/core/summaries/settings.html#quota_over_status_mask\">quota_over_status_mask</a></code> to\ndetermine if the overquota-flag should be set for the user.</p>\n<p>Usually, this value will be loaded via <a href=\"/main/core/config/auth/userdb.html\">userdb</a>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_over_status_lazy_check": {
    "default": "<code>no</code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, overquota-flag is checked only when current quota usage is\ngoing to already be checked anyway. This prevents any additional storage I/O\nthat would be caused by the overquota-flag check.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_over_status_mask": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#overquota-flag\">Quota: Overquota Flag</a>"
    ],
    "text": "<p>The search string to match against <code><a href=\"/main/core/summaries/settings.html#quota_over_status_current\">quota_over_status_current</a></code> to\ndetermine if the overquota-flag is set for the user.</p>\n<p>Wildcards can be used in a generic way, e.g. <code>*yes</code> or <code>*TRUE*</code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_status_nouser": {
    "default": "<code>REJECT Unknown user</code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "tags": [
      "quota-status-service"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#quota-status-service\">Quota Status Service</a>"
    ],
    "text": "<p><a href=\"/main/core/plugins/quota.html#quota-status-service\">Quota Status Service</a>: Response when asking quota for a nonexistent\nusers.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_status_overquota": {
    "default": "<code>554 5.2.2 %{error}</code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "tags": [
      "quota-status-service"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#quota-status-service\">Quota Status Service</a>"
    ],
    "text": "<p><a href=\"/main/core/plugins/quota.html#quota-status-service\">Quota Status Service</a>: Response when asking quota for a user that is\nover the quota. The <code>%{error}</code> variable expands to the more detailed reason,\nwhich is generally <code><a href=\"/main/core/summaries/settings.html#quota_exceeded_message\">quota_exceeded_message</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_status_success": {
    "default": "<code>OK</code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "tags": [
      "quota-status-service"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#quota-status-service\">Quota Status Service</a>"
    ],
    "text": "<p><a href=\"/main/core/plugins/quota.html#quota-status-service\">Quota Status Service</a>: Response when asking quota for a user that is\nunder the quota.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_status_toolarge": {
    "default": "<code><a href=\"/main/core/summaries/settings.html#quota_status_overquota\">quota_status_overquota</a></code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "tags": [
      "quota-status-service"
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#quota-status-service\">Quota Status Service</a>"
    ],
    "text": "<p><a href=\"/main/core/plugins/quota.html#quota-status-service\">Quota Status Service</a>: Response when asking quota for a mail that is\nlarger than user's <code><a href=\"/main/core/summaries/settings.html#quota_storage_size\">quota_storage_size</a></code> or\n<code><a href=\"/main/core/summaries/settings.html#quota_mail_size\">quota_mail_size</a></code>. Empty value defaults to\n<code><a href=\"/main/core/summaries/settings.html#quota_status_overquota\">quota_status_overquota</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_storage_extra": {
    "default": "<code>0</code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#quota_storage_size\">quota_storage_size</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#quota_storage_percentage\">quota_storage_percentage</a></code>",
      "<a href=\"/main/core/plugins/quota.html#quota-root\">Quota Root</a>"
    ],
    "text": "<p>If set, increase the <code><a href=\"/main/core/summaries/settings.html#quota_storage_size\">quota_storage_size</a></code> (for the mailbox/namespace)\nby this amount. This is an alternative to using\n<code><a href=\"/main/core/summaries/settings.html#quota_storage_percentage\">quota_storage_percentage</a></code>, although both can also be used.</p>\n<p>This may be useful to exceed the regular quota limit in some mailboxes, such as\nallowing clients that move messages with IMAP COPY+EXPUNGE to Trash folder to\ntemporarily exceed the quota.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>quota_storage_size = 1G</span></span>\n<span class=\"line\"><span>namespace inbox {</span></span>\n<span class=\"line\"><span>  mailbox Trash {</span></span>\n<span class=\"line\"><span>    # 1G + 100M = 1100M</span></span>\n<span class=\"line\"><span>    quota_storage_extra = 100M</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_storage_grace": {
    "default": "<code>10 M</code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#quota-root\">Quota Root</a>"
    ],
    "text": "<p>If set, allows message deliveries (LDA, LMTP) to exceed quota once by this\namount. After the quota is already over the limit, the grace no longer applies.\nThis prevents a situation where some smaller mails may still become delivered,\nbut larger mail deliveries fail, and the user may not have received any warning\nabout reaching the quota limit.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_storage_percentage": {
    "default": "<code>100</code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#quota_storage_size\">quota_storage_size</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#quota_storage_extra\">quota_storage_extra</a></code>",
      "<a href=\"/main/core/plugins/quota.html#quota-root\">Quota Root</a>"
    ],
    "text": "<p>Multiplier for the <code><a href=\"/main/core/summaries/settings.html#quota_storage_size\">quota_storage_size</a></code> setting (in this\nmailbox/namespace). This is an alternative to using\n<code><a href=\"/main/core/summaries/settings.html#quota_storage_extra\">quota_storage_extra</a></code>, although both can also be used.</p>\n<p>This may be useful to exceed the regular quota limit in some mailboxes, such as\nallowing clients that move messages with IMAP COPY+EXPUNGE to Trash folder to\ntemporarily exceed the quota.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>quota_storage_size = 1G</span></span>\n<span class=\"line\"><span>namespace inbox {</span></span>\n<span class=\"line\"><span>  mailbox Trash {</span></span>\n<span class=\"line\"><span>    # 110% * 1G = 1100M</span></span>\n<span class=\"line\"><span>    quota_storage_percentage = 110</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_storage_size": {
    "default": "<code>unlimited</code>",
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#quota_storage_extra\">quota_storage_extra</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#quota_storage_percentage\">quota_storage_percentage</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#quota_message_count\">quota_message_count</a></code>",
      "<a href=\"/main/core/plugins/quota.html#quota-root\">Quota Root</a>"
    ],
    "tags": [
      "storage_size_limits"
    ],
    "text": "<p>Quota storage size limit for the <a href=\"/main/core/plugins/quota.html#quota-root\">Quota Root</a>. This value is still\nmultiplied by <code><a href=\"/main/core/summaries/settings.html#quota_storage_percentage\">quota_storage_percentage</a></code> and then increased by\n<code><a href=\"/main/core/summaries/settings.html#quota_storage_extra\">quota_storage_extra</a></code> to get the final value (in this mailbox or\nnamespace). This is reported as the STORAGE limit in IMAP GETQUOTA commands.\nUsing <code>0</code> as the value means the same as <code>unlimited</code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_warning": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#quota-warning-scripts\">Quota Warning Scripts</a>"
    ],
    "tags": [
      "quota-warning"
    ],
    "text": "<p>Create a new <a href=\"/main/core/plugins/quota.html#quota-warning-scripts\">quota warning</a>. The filter name\nrefers to <code><a href=\"/main/core/summaries/settings.html#quota_warning_name\">quota_warning_name</a></code> setting. The <code><a href=\"/main/core/summaries/settings.html#execute\">execute</a></code>\nsetting is required to be specified inside the filter.</p>\n<p>The order of <code>quota_warning</code> filters in the configuration is important:\nOnly the first warning that matches the rules is executed. This means you must\nconfigure the highest limits first.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_warning_name": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#quota-warning-scripts\">Quota Warning Scripts</a>"
    ],
    "tags": [
      "quota-warning"
    ],
    "text": "<p>Name of the <a href=\"/main/core/plugins/quota.html#quota-warning-scripts\">quota warning</a>. The\n<code><a href=\"/main/core/summaries/settings.html#quota_warning\">quota_warning</a></code> filter name refers to this setting. This name is\nonly used within the configuration to identify the quota warning - it has no\nmeaning otherwise.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_warning_resource": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#quota-warning-scripts\">Quota Warning Scripts</a>"
    ],
    "values_enum": [
      "storage",
      "message"
    ],
    "default": "<code>storage</code>",
    "tags": [
      "quota-warning"
    ],
    "text": "<p>Which <a href=\"/main/core/plugins/quota.html#quota-limits\">quota resource</a> the quota warning is tracking.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "quota_warning_threshold": {
    "plugin": [
      "quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html#quota-warning-scripts\">Quota Warning Scripts</a>"
    ],
    "values_enum": [
      "over",
      "under"
    ],
    "default": "<code>over</code>",
    "tags": [
      "quota-warning"
    ],
    "text": "<p>Should the quota warning be executed when quota grows over the limit, or\nwhen it drops under the limit.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
  },
  "trash_priority": {
    "plugin": [
      "trash"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>If non-zero, enables the trash plugin for the mailbox with the specified\npriority. Mailboxes with smaller priority number are emptied before mailboxes\nwith a larger priority number. If there are multiple mailboxes with the same\npriority, expunge the oldest mail from them first.</p>\n<p>Example where Trash is emptied before Spam:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>namespace inbox {</span></span>\n<span class=\"line\"><span>  mailbox Trash {</span></span>\n<span class=\"line\"><span>    trash_priority = 1</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>  mailbox Spam {</span></span>\n<span class=\"line\"><span>    trash_priority = 2</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/trash.html\">trash plugin</a>"
  },
  "virtual_max_open_mailboxes": {
    "default": "<code>64</code>",
    "plugin": [
      "virtual"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>How many mailboxes to open in virtual plugin.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/virtual.html\">virtual plugin</a>"
  },
  "welcome_script": {
    "plugin": [
      "welcome"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/welcome.html\">welcome</a>"
    ],
    "text": "<p>Named filter for configuring the welcome <code><a href=\"/main/core/summaries/settings.html#execute\">execute</a></code> script.</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>welcome {</span></span>\n<span class=\"line\"><span>  execute welcome {</span></span>\n<span class=\"line\"><span>    args = %{user}</span></span>\n<span class=\"line\"><span>  }</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/welcome.html\">welcome plugin</a>",
    "no_default": true
  },
  "welcome_wait": {
    "plugin": [
      "welcome"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/welcome.html\">welcome</a>"
    ],
    "text": "<p>If enabled, wait for the script to finish. By default, the welcome script\nis run asynchronously.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/welcome.html\">welcome plugin</a>"
  },
  "cassandra_connect_timeout": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>5s</code>",
    "text": "<p>Connection timeout.</p>\n"
  },
  "cassandra_debug_queries": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Whether to log CQL queries.</p>\n"
  },
  "cassandra_delete_consistency": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "any",
      "local-serial",
      "serial",
      "one",
      "two",
      "three",
      "local-quorum",
      "quorum",
      "each-quorum",
      "all"
    ],
    "default": "<code>local-quorum</code>",
    "seealso": [
      "<a href=\"/main/core/config/sql/cassandra.html#consistency\">Cassandra: Consistency</a>"
    ],
    "text": "<p>Write consistency when deleting from the database. See\n<a href=\"/main/core/config/sql/cassandra.html#consistency\">Cassandra: Consistency</a>.</p>\n"
  },
  "cassandra_delete_fallback_consistency": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "any",
      "local-serial",
      "serial",
      "one",
      "two",
      "three",
      "local-quorum",
      "quorum",
      "each-quorum",
      "all"
    ],
    "default": "<code>local-quorum</code>",
    "seealso": [
      "<a href=\"/main/core/config/sql/cassandra.html#consistency\">Cassandra: Consistency</a>"
    ],
    "text": "<p>Write consistency when deleting from the database fails with primary\nconsistency.</p>\n"
  },
  "cassandra_execution_retry_interval": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>If the driver supports speculative execution policy, configures constant\nspeculative execution policy. See\n<a href=\"https://docs.datastax.com/en/developer/java-driver/latest/manual/core/speculative_execution/index.html\" target=\"_blank\" rel=\"noreferrer\">https://docs.datastax.com/en/developer/java-driver/latest/manual/core/speculative_execution/index.html</a></p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>If Cassandra is completely unavailable and speculative execution is used,\nCassandra cpp-driver library starts hanging all queries due to a bug. This may\ncause problems in the dict process even after Cassandra is back online.\nWhen this happens, &quot;Dict server timeout&quot; errors are being logged.</p>\n</div>\n"
  },
  "cassandra_execution_retry_times": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>If the driver supports speculative execution policy, configures constant\nspeculative execution policy. See\n<a href=\"https://docs.datastax.com/en/developer/java-driver/latest/manual/core/speculative_execution/index.html\" target=\"_blank\" rel=\"noreferrer\">https://docs.datastax.com/en/developer/java-driver/latest/manual/core/speculative_execution/index.html</a></p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>If Cassandra is completely unavailable and speculative execution is used,\nCassandra cpp-driver library starts hanging all queries due to a bug. This may\ncause problems in the dict process even after Cassandra is back online.\nWhen this happens, &quot;Dict server timeout&quot; errors are being logged.</p>\n</div>\n"
  },
  "cassandra_heartbeat_interval": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": "<code>30s</code>",
    "text": "<p>How often to send keepalive packets to cassandra nodes.</p>\n"
  },
  "cassandra_hosts": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>List of hosts or IP addresses to connect.</p>\n"
  },
  "cassandra_idle_timeout": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>0</code>",
    "text": "<p>How long to idle before disconnecting.</p>\n"
  },
  "cassandra_keyspace": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Specifies the keyspace name to use.</p>\n"
  },
  "cassandra_latency_aware_routing": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>When turned on, latency-aware routing tracks the latency of queries to avoid\nsending new queries to poorly performing Cassandra nodes.</p>\n"
  },
  "cassandra_log_level": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "critical",
      "error",
      "warn",
      "info",
      "debug",
      "trace"
    ],
    "default": "<code>warn</code>",
    "text": "<p>Driver log level.</p>\n"
  },
  "cassandra_log_retries": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Whether to log about failed requests that are retried (which may or may\nnot succeed after the retry).</p>\n"
  },
  "cassandra_metrics": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Path where to write JSON metrics. See <a href=\"/main/core/config/sql/cassandra.html#metrics\">Cassandra: Metrics</a>.</p>\n"
  },
  "cassandra_io_thread_count": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code><em>[driver dependent]</em></code>",
    "text": "<p>Set number of IO threads to handle query requests.</p>\n"
  },
  "cassandra_page_size": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>When a query returns many rows, it can be sometimes inefficient to return them\nas a single response message. Instead, the driver can break the results into\npages which get returned as they are needed.</p>\n<p>This setting controls the size of each page.</p>\n<p>Set to <code>0</code> to disable.</p>\n"
  },
  "cassandra_password": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Password for authentication.</p>\n"
  },
  "cassandra_port": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Port Number",
        "url": "<a href=\"/main/core/settings/types.html#port-number\">Port Number</a>",
        "default_required": true
      }
    ],
    "default": "<code>9042</code>",
    "text": "<p>CQL port to use.</p>\n"
  },
  "cassandra_read_consistency": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "any",
      "local-serial",
      "serial",
      "one",
      "two",
      "three",
      "local-quorum",
      "quorum",
      "each-quorum",
      "all"
    ],
    "default": "<code>local-quorum</code>",
    "seealso": [
      "<a href=\"/main/core/config/sql/cassandra.html#consistency\">Cassandra: Consistency</a>"
    ],
    "text": "<p>Read consistency.</p>\n"
  },
  "cassandra_read_fallback_consistency": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "any",
      "local-serial",
      "serial",
      "one",
      "two",
      "three",
      "local-quorum",
      "quorum",
      "each-quorum",
      "all"
    ],
    "default": "<code>local-quorum</code>",
    "seealso": [
      "<a href=\"/main/core/config/sql/cassandra.html#consistency\">Cassandra: Consistency</a>"
    ],
    "text": "<p>Read consistency if primary consistency fails.</p>\n"
  },
  "cassandra_request_timeout": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>60s</code>",
    "text": "<p>How long to wait for a query to finish.</p>\n"
  },
  "cassandra_ssl": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "default": "<code>no</code>",
    "values_enum": [
      "no",
      "cert-only",
      "cert-ip"
    ],
    "seealso": [
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_client_require_valid_cert\">ssl_client_require_valid_cert</a></code>"
    ],
    "text": "<p>Whether to use SSL when connecting to Cassandra, and how to verify the\ncertificate:</p>\n<dl>\n<dt><code>no</code></dt>\n<dd>Don't use SSL</dd>\n<dt><code>cert-only</code></dt>\n<dd>Verify the certificate, but not the IP address or host name.</dd>\n<dt><code>cert-ip</code></dt>\n<dd>Verify the certificate, and require IP address to match the certificate's\ncommon name or one of its subject alternative names.</dd>\n</dl>\n<p>You can also skip certificate validation by setting\n<code><a href=\"/main/core/summaries/settings.html#ssl_client_require_valid_cert\">ssl_client_require_valid_cert = yes</a></code>. The <code>cassandra_ssl</code> setting\nvalue must something else than <code>no</code>.</p>\n<p>Configure SSL certificates using the <code>ssl_client_*</code> settings. See\n<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>.</p>\n"
  },
  "cassandra_user": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Username for authentication.</p>\n"
  },
  "cassandra_protocol_version": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      3,
      4,
      5
    ],
    "default": "<code>depends on driver version</code>",
    "text": "<p>Cassandra protocol version to use. It is good idea to specify this to avoid\nwarnings about version handshake if the driver supports a higher protocol\nversion than the server.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>If you want to use server-side prepared statements, you need to\nuse at least <code>4</code>.</p>\n</div>\n"
  },
  "cassandra_warn_timeout": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>5s</code>",
    "text": "<p>Emit warning if query takes longer than this.</p>\n"
  },
  "cassandra_write_consistency": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "any",
      "local-serial",
      "serial",
      "one",
      "two",
      "three",
      "local-quorum",
      "quorum",
      "each-quorum",
      "all"
    ],
    "default": "<code>local-quorum</code>",
    "seealso": [
      "<a href=\"/main/core/config/sql/cassandra.html#consistency\">Cassandra: Consistency</a>"
    ],
    "text": "<p>Write consistency when updating or inserting to the database.</p>\n"
  },
  "cassandra_write_fallback_consistency": {
    "tags": [
      "sql-cassandra"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "any",
      "local-serial",
      "serial",
      "one",
      "two",
      "three",
      "local-quorum",
      "quorum",
      "each-quorum",
      "all"
    ],
    "default": "<code>local-quorum</code>",
    "seealso": [
      "<a href=\"/main/core/config/sql/cassandra.html#consistency\">Cassandra: Consistency</a>"
    ],
    "text": "<p>Write consistency when updating or inserting to the database fails with primary\nconsistency.</p>\n"
  },
  "mysql": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mysql_host\">mysql_host</a></code>"
    ],
    "text": "<p>Creates a new MySQL/MariaDB connection. If more than one is specified, the connections\nare automatically used for load balancing and for failover. The filter name\nrefers to the <code><a href=\"/main/core/summaries/settings.html#mysql_host\">mysql_host</a></code> setting.</p>\n"
  },
  "mysql_client_flags": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>Flags to use when connecting to the database, provided as base-10 number. See\n<a href=\"https://dev.mysql.com/doc/c-api/8.0/en/mysql-real-connect.html\" target=\"_blank\" rel=\"noreferrer\">https://dev.mysql.com/doc/c-api/8.0/en/mysql-real-connect.html</a></p>\n"
  },
  "mysql_connect_timeout": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": "<code>5s</code>",
    "text": "<p>How long to wait for connection.</p>\n"
  },
  "mysql_connection_limit": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>5</code>",
    "text": "<p>Maximum number of parallel connections. Currently MySQL queries are blocking,\nso only a single connection can be used in parallel.</p>\n"
  },
  "mysql_dbname": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Database name to connect to.</p>\n"
  },
  "mysql_host": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>localhost</code>",
    "text": "<p>Host or UNIX socket path to connect to. The <code><a href=\"/main/core/summaries/settings.html#mysql\">mysql</a></code> setting defaults\nto this.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>MySQL drivers can default to using UNIX socket connection when host is\n<code>localhost</code> and port is <code>0</code> (default). To force it to use TCP connection,\nset <code><a href=\"/main/core/summaries/settings.html#mysql_host\">mysql_host = 127.0.0.1</a></code> or set <code><a href=\"/main/core/summaries/settings.html#mysql_port\">mysql_port</a></code> explicitly.</p>\n</div>\n"
  },
  "mysql_option_file": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>File to read for client library specific configuration.</p>\n"
  },
  "mysql_option_group": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Section name to read from <code><a href=\"/main/core/summaries/settings.html#mysql_option_file\">mysql_option_file</a></code>.</p>\n"
  },
  "mysql_password": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Password for authentication.</p>\n"
  },
  "mysql_port": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "Port Number",
        "url": "<a href=\"/main/core/settings/types.html#port-number\">Port Number</a>",
        "default_required": true
      }
    ],
    "default": "<code>0 (defaults to 3306 for TCP connections)</code>",
    "text": "<p>Port to connect to.</p>\n"
  },
  "mysql_read_timeout": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": "<code>30s</code>",
    "text": "<p>Timeout when reading data from server.</p>\n"
  },
  "mysql_ssl": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "seealso": [
      "<a href=\"/main/core/config/ssl.html\">SSL</a>"
    ],
    "text": "<p>Whether to use SSL when connecting to MySQL. Configure it using the\n<code>ssl_client_*</code> settings. See <a href=\"/main/core/config/ssl.html\">SSL</a>.</p>\n"
  },
  "mysql_user": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Username for authentication.</p>\n"
  },
  "mysql_write_timeout": {
    "tags": [
      "sql-mysql"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": "<code>30s</code>",
    "text": "<p>Timeout in seconds when writing data to server.</p>\n"
  },
  "pgsql": {
    "tags": [
      "sql-postgresql"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#pgsql_host\">pgsql_host</a></code>"
    ],
    "text": "<p>Creates a new PostgreSQL connection. If more than one is specified, the\nconnections are automatically used for load balancing and for failover. The\nfilter name refers to the <code><a href=\"/main/core/summaries/settings.html#pgsql_host\">pgsql_host</a></code> setting.</p>\n"
  },
  "pgsql_connection_limit": {
    "tags": [
      "sql-postgresql"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>5</code>",
    "text": "<p>Maximum number of parallel connections.</p>\n"
  },
  "pgsql_host": {
    "tags": [
      "sql-postgresql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#pgsql\">pgsql</a></code>"
    ],
    "text": "<p>Host to connect to. The <code><a href=\"/main/core/summaries/settings.html#pgsql\">pgsql</a></code> setting defaults to this.</p>\n"
  },
  "pgsql_parameters": {
    "tags": [
      "sql-postgresql"
    ],
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "text": "<p>List of key/value settings passed to PostgreSQL. See\n<a href=\"https://www.postgresql.org/docs/current/libpq-connect.html\" target=\"_blank\" rel=\"noreferrer\">https://www.postgresql.org/docs/current/libpq-connect.html</a> for available\nparameters.</p>\n"
  },
  "sqlite_path": {
    "tags": [
      "sql-sqlite"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Path to the sqlite database.</p>\n"
  },
  "sqlite_journal_mode": {
    "tags": [
      "sql-sqlite"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "delete",
      "wal"
    ],
    "default": "<code>wal</code>",
    "text": "<p>Allows using write-ahead logging mode for database.</p>\n"
  },
  "sqlite_synchronous": {
    "tags": [
      "sql-sqlite"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.2.0</span>"
      }
    ],
    "values_enum": [
      "default",
      "off",
      "normal",
      "full",
      "extra"
    ],
    "default": "<code>default</code>",
    "text": "<p>Sets the synchronization mode for SQlite database. See <a href=\"https://sqlite.org/pragma.html#pragma_synchronous\" target=\"_blank\" rel=\"noreferrer\">https://sqlite.org/pragma.html#pragma_synchronous</a> for full explanation of values. This has no effect if database is opened in read-only mode. Setting special value <code>default</code> elides pragma call.</p>\n"
  },
  "sqlite_readonly": {
    "tags": [
      "sql-sqlite"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Specifies that this database is read-only and should not be attempted to be\ncreated or written to.</p>\n"
  },
  "lua_file": {
    "tags": [
      "lua"
    ],
    "values": [
      {
        "label": "File",
        "url": "<a href=\"/main/core/settings/types.html#file\">File</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/plugins/mail_lua.html\">mail-lua plugin</a>",
      "<a href=\"/main/core/plugins/push_notification_lua.html\">push-notification-lua plugin</a>",
      "<a href=\"/main/core/config/auth/databases/lua.html\">Lua authentication database</a>"
    ],
    "text": "<p>Path to lua script to be used. This is used by</p>\n<ul>\n<li><a href=\"/main/core/plugins/mail_lua.html\">mail-lua plugin</a>,</li>\n<li><a href=\"/main/core/plugins/push_notification_lua.html\">push-notification-lua plugin</a>, and</li>\n<li><a href=\"/main/core/config/auth/databases/lua.html\">Lua authentication database</a>.</li>\n</ul>\n"
  },
  "lua_settings": {
    "tags": [
      "lua"
    ],
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#lua_file\">lua_file</a></code>"
    ],
    "text": "<p>Key-value pairs that are passed as a table to lua <code>script_init()</code> functions.</p>\n"
  },
  "auth_allow_weak_schemes": {
    "default": "<code>no</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Controls whether password schemes marked as weak are allowed to be used.\nSee <a href=\"/main/core/config/auth/schemes.html\">Password Schemes</a> for disabled by default schemes.</p>\n<p>If enabled, will emit warning to logs. If a disabled scheme is used,\nan error is logged.</p>\n<p>Notably, any explicitly cleartext schemes (such as PLAIN), CRAM-MD5, and\nDIGEST-MD5 are not affected by this setting.</p>\n"
  },
  "auth_anonymous_username": {
    "default": "<code>anonymous</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>This specifies the username to be used for users logging in with the\nANONYMOUS SASL mechanism.</p>\n"
  },
  "auth_allow_cleartext": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "text": "<p>If <code>no</code>, disables the LOGIN command and all other cleartext\nauthentication unless SSL/TLS is used (LOGINDISABLED capability) or the\nconnection is secured (see <code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>).</p>\n<p>See <a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a> for more detailed explanation of how\nthis setting interacts with the <code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code> setting.</p>\n<p>This setting replaces the <code>disable_plaintext_auth</code> setting.</p>\n"
  },
  "auth_cache_negative_ttl": {
    "default": "<code>1hour</code>",
    "tags": [
      "auth_cache"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>This sets the time to live for negative hits to passdb or userdb (i.e.,\nwhen the user is not found or there is a password mismatch).</p>\n<p>The value <code>0</code> completely disables caching of these hits.</p>\n"
  },
  "auth_cache_size": {
    "default": 0,
    "tags": [
      "auth_cache"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "text": "<p>The authentication cache size (e.g., <code>10M</code>).</p>\n<p><code><a href=\"/main/core/summaries/settings.html#auth_cache_size\">auth_cache_size = 0</a></code> disables use of the authentication cache.</p>\n<p>A typical passdb cache entry is around 50 bytes and a typical userdb cache\nentry is around 100-200 bytes, depending on the amount of information your\nuser and password database lookups return.</p>\n"
  },
  "auth_cache_ttl": {
    "default": "<code>1hour</code>",
    "tags": [
      "auth_cache"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>Time to live for cache entries.</p>\n<p>After the TTL expires, the cached record is no longer used, unless the main\ndatabase look-up returns internal failure.</p>\n<p>Entries are removed from the cache only when the cache is full and a new\nentry is to be added.</p>\n"
  },
  "auth_cache_verify_password_with_worker": {
    "default": "<code>no</code>",
    "tags": [
      "auth_cache"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>The auth master process by default is responsible for the hash\nverifications. Setting this to <code>yes</code> moves the verification to auth-worker\nprocesses. This allows distributing the hash calculations to multiple CPU\ncores, which could make sense if strong hashes are used.</p>\n"
  },
  "auth_debug": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "deprecated": [
      {
        "text": "<p>The setting is obsolete, and kept only for backwards compatibility.</p>\n<p>Use <code><a href=\"/main/core/summaries/settings.html#log_debug\">log_debug = category=auth</a></code> instead.</p>\n",
        "version": "<span class=\"VPBadge warning\">Deprecated: 3.0.0</span>"
      }
    ],
    "text": "<p>Enables all authentication debug logging (also enables\n<code><a href=\"/main/core/summaries/settings.html#auth_verbose\">auth_verbose</a></code>).</p>\n<p>Passwords are logged as <code>&lt;hidden&gt;</code>.</p>\n"
  },
  "auth_debug_passwords": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>This setting adjusts log verbosity. In the event of password\nmismatches, the passwords and the scheme used are logged so that the\nproblem can be debugged.</p>\n<p>Note: You also need to enable <code><a href=\"/main/core/summaries/settings.html#log_debug\">log_debug = category=auth</a></code>.</p>\n"
  },
  "auth_default_domain": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>This setting indicates the default realm/domain to use if none has\nbeen specified. The setting is used for both SASL realms\nand appending an <code>@domain</code> element to the username in cleartext logins.</p>\n"
  },
  "auth_failure_delay": {
    "default": "<code>2secs</code>",
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#auth_internal_failure_delay\">auth_internal_failure_delay</a></code>"
    ],
    "text": "<p>This is the delay before replying to failed authentication attempts. Using\n<a href=\"/main/core/config/auth/passdb.html#nodelay\">passdb: nodelay Extra Field</a> bypasses this setting.</p>\n<p>This setting defines the interval for which the authentication process\nflushes all auth failures. Thus, this is the maximum interval a user may\nencounter. However, there can be additional delays added by\n<a href=\"/main/core/config/auth/penalty.html\">authentication penalty</a>.</p>\n<p>This setting doesn't affect internal failures. See\n<code><a href=\"/main/core/summaries/settings.html#auth_internal_failure_delay\">auth_internal_failure_delay</a></code>.</p>\n"
  },
  "auth_gssapi_hostname": {
    "default": "<code>&lt;name returned by gethostname()&gt;</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>This supplies the hostname to use in Generic Security Services API\n(GSSAPI) principal names.</p>\n<p>Use <code>&quot;$ALL&quot;</code> (with the quotation marks) to allow all keytab entries.</p>\n",
    "advanced": true
  },
  "auth_internal_failure_delay": {
    "default": "<code>2secs</code>",
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#auth_failure_delay\">auth_failure_delay</a></code>"
    ],
    "text": "<p>The delay before replying to client when authentication fails with\ninternal failure. An additional 0..50% delay is added on top of this to\nprevent thundering herd issues.</p>\n<p>This setting is intended to prevent clients from hammering the server with\nimmediate retries.</p>\n"
  },
  "auth_krb5_keytab": {
    "default": "<code>&lt;system default (e.g. /etc/krb5.keytab)&gt;</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>This specifies the Kerberos keytab to use for the GSSAPI mechanism.</p>\n<p>Note: You may need to set the auth service to run as root in order for\nthis file to be readable.</p>\n",
    "advanced": true
  },
  "auth_master_user_separator": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The separator to use to enable master users to login by specifying the\nmaster username within the normal username string (i.e., not using the SASL\nmechanism's master support).</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span># Allows master login of the format &#x3C;username>*&#x3C;masteruser></span></span>\n<span class=\"line\"><span># E.g. if user = foo, and master_user = muser,</span></span>\n<span class=\"line\"><span>#\tlogin username = foo*muser</span></span>\n<span class=\"line\"><span>auth_master_user_separator = *</span></span></code></pre>\n</div>"
  },
  "auth_mechanisms": {
    "default": "<code>plain</code>",
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/auth/mechanisms/overview.html\">authentication mechanisms</a>"
    ],
    "text": "<p>Here you can supply a space-separated list of the authentication\nmechanisms you wish to use.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>auth_mechanisms = plain login</span></span></code></pre>\n</div>"
  },
  "auth_policy": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "tags": [
      "auth_policy"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/auth/policy.html\">Authentication Policy</a>"
    ],
    "text": "<p>Filter for auth policy specific settings.</p>\n",
    "no_default": true
  },
  "auth_policy_check_after_auth": {
    "default": "<code>yes</code>",
    "tags": [
      "auth_policy"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#auth_policy_server_url\">auth_policy_server_url</a></code>"
    ],
    "text": "<p>Do policy lookup after authentication is completed?</p>\n"
  },
  "auth_policy_check_before_auth": {
    "default": "<code>yes</code>",
    "tags": [
      "auth_policy"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#auth_policy_server_url\">auth_policy_server_url</a></code>"
    ],
    "text": "<p>Do policy lookup before authentication is started?</p>\n"
  },
  "auth_policy_hash_mech": {
    "default": "<code>sha256</code>",
    "tags": [
      "auth_policy"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "md4",
      "md5",
      "sha1",
      "sha256",
      "sha512"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#auth_policy_server_url\">auth_policy_server_url</a></code>"
    ],
    "text": "<p>Hash mechanism to use for password.</p>\n"
  },
  "auth_policy_hash_nonce": {
    "tags": [
      "auth_policy"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#auth_policy_server_url\">auth_policy_server_url</a></code>"
    ],
    "text": "<p>Cluster-wide nonce to add to hash.</p>\n<p>This should contain a secret randomly generated string, which is the\nsame for each Dovecot server within the cluster.</p>\n<p>REQUIRED configuration when you want to use authentication policy.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>auth_policy_hash_nonce = &#x3C;localized_random_string></span></span></code></pre>\n</div>"
  },
  "auth_policy_hash_truncate": {
    "default": "<code>12</code>",
    "tags": [
      "auth_policy"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#auth_policy_server_url\">auth_policy_server_url</a></code>"
    ],
    "advanced": true,
    "text": "<p>How many bits to use from password hash when reporting to policy server.</p>\n"
  },
  "auth_policy_log_only": {
    "default": "<code>no</code>",
    "tags": [
      "auth_policy"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#auth_policy_server_url\">auth_policy_server_url</a></code>"
    ],
    "text": "<p>Only log what the policy server response would do?</p>\n<p>If <code>yes</code>, no request is made to the policy server.</p>\n"
  },
  "auth_policy_reject_on_fail": {
    "default": "<code>no</code>",
    "tags": [
      "auth_policy"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#auth_policy_server_url\">auth_policy_server_url</a></code>"
    ],
    "text": "<p>If policy request fails for some reason, should users be rejected?</p>\n"
  },
  "auth_policy_report_after_auth": {
    "default": "<code>yes</code>",
    "tags": [
      "auth_policy"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Report authentication result?</p>\n<p>If <code>no</code>, there will be no report for the authentication result.</p>\n"
  },
  "auth_policy_request_attributes": {
    "default": "<code>login=%{requested_username} pwhash=%{hashed_password} remote=%{remote_ip} device_id=%{client_id} protocol=%{protocol} session_id=%{session} fail_type=%{fail_type}</code>",
    "changed": [
      {
        "text": "<p>Default has changed.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.0.0</span>"
      }
    ],
    "tags": [
      "auth_policy"
    ],
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#auth_policy_server_url\">auth_policy_server_url</a></code>"
    ],
    "text": "<p>Request attributes specification.</p>\n<p>See <a href=\"/main/core/config/auth/policy.html#list-of-fields\">Auth Policy Variables</a> for variables that can be used for this\nsetting.</p>\n"
  },
  "auth_policy_server_api_header": {
    "tags": [
      "auth_policy"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#auth_policy_server_url\">auth_policy_server_url</a></code>"
    ],
    "text": "<p>Header and value to add to request (for API authentication).</p>\n<p>Note: See <a href=\"https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side\" target=\"_blank\" rel=\"noreferrer\">https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side</a></p>\n<p>This can be used when you are using the weakforced policy server and the\nweb listener password is &quot;super&quot;:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>$ echo -n wforce:super | base64</span></span>\n<span class=\"line\"><span>d2ZvcmNlOnN1cGVy</span></span></code></pre>\n</div><p>Then the correct value for this setting is:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>auth_policy_server_api_header = Authorization: Basic d2ZvcmNlOnN1cGVy</span></span></code></pre>\n</div>"
  },
  "auth_policy_server_url": {
    "tags": [
      "auth_policy"
    ],
    "values": [
      {
        "label": "URL",
        "url": "<a href=\"/main/core/settings/types.html#url\">URL</a>"
      }
    ],
    "text": "<p>URL of the policy server.</p>\n<p>URL is appended with <code>?command=allow/report</code>. If URL ends with <code>&amp;</code>, the\n<code>?</code> is not appended.</p>\n<p>REQUIRED configuration when you want to use authentication policy.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>auth_policy_server_url = http://example.com:4001/</span></span></code></pre>\n</div>"
  },
  "auth_realms": {
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>This setting supplies a list of realms for those SASL authentication mechanisms\nthat need them. Realms are an integral part of Digest-MD5.</p>\n<p>You will need to specify realms you want to advertise to the client in the\nconfig file:</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>auth_realms = example.com another.example.com foo</span></span></code></pre>\n</div>"
  },
  "auth_socket_path": {
    "default": "<code>auth-userdb</code>",
    "advanced": true,
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The UNIX socket path to the master authentication server for finding users.</p>\n<p>This must be set to <code>cluster-userdb</code> in Palomar cluster configurations, for\nboth proxies and backends.</p>\n"
  },
  "auth_master_socket_path": {
    "default": "<code>auth-master</code>",
    "advanced": true,
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The UNIX socket path to the master authentication server for finishing\nuser logins.</p>\n<p>It is usually neither necessary nor advisable to change the default.</p>\n"
  },
  "auth_ssl_require_client_cert": {
    "default": "<code>no</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl_server_ca_file\">ssl_server_ca_file</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_server_request_client_cert\">ssl_server_request_client_cert</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If <code>yes</code>, authentication fails when a valid SSL client certificate is not\nprovided.</p>\n"
  },
  "auth_ssl_username_from_cert": {
    "default": "<code>no</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl_server_cert_username_field\">ssl_server_cert_username_field</a></code>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Setting to <code>yes</code> indicates that the username should be taken from the\nclient's SSL certificate.</p>\n<p>Generally, this will be either <code>commonName</code> or <code>x500UniqueIdentifier</code>.</p>\n<p>The text is looked up from subject DN's specified field using OpenSSL's\nX509_NAME_get_text_by_NID() function. By default the CommonName field is\nused. You can change the field with\n<code><a href=\"/main/core/summaries/settings.html#ssl_server_cert_username_field\">ssl_server_cert_username_field = name</a></code> setting (parsed using OpenSSL's\nOBJ_txt2nid() function).</p>\n<p><code>x500UniqueIdentifier</code> is a common choice.</p>\n"
  },
  "auth_use_winbind": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>By default, the NTLM mechanism is handled internally.</p>\n<p>If <code>yes</code>, perform NTLM and GSS-SPNEGO authentication with Samba's winbind\ndaemon and ntlm_auth helper.</p>\n<p>This option is useful when you need to authenticate users against a Windows\ndomain (either AD or NT).</p>\n",
    "advanced": true
  },
  "auth_username_chars": {
    "default": "<code>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The list of the characters allowed in a username.</p>\n<p>If the user-supplied username contains a character not listed here, login\nautomatically fails.</p>\n<p>This is an additional check to make sure the user can't exploit any\nquote-escaping vulnerabilities that may be connected with SQL/LDAP\ndatabases.</p>\n<p>If you want to allow all characters, leave the value empty.</p>\n"
  },
  "auth_username_format": {
    "default": "<code>%{user | lower}</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>When this setting is used globally, it changes the username, including\n<code>%{user}</code> variable, for all passdb and userdb lookups.</p>\n<p>This setting can also be used in <a href=\"/main/core/config/auth/databases/passwd_file.html\">passdb/userdb\npasswd_file { auth_username_format }</a> to change the username for the duration\nof the lookup. The <code>%{user}</code> variable is not changed. If used inside other\npassdbs/userdbs the setting is ignored.</p>\n<p>You can use the standard variables here.</p>\n<p>Examples:</p>\n<ul>\n<li><code>%{user | lower}</code>: Lowercases the username</li>\n<li><code>%{user | username}</code>: Drops the domain if one was supplied</li>\n<li><code>%{user | username}-AT-%{user | domain}</code>: Changes the &quot;@&quot; symbol into &quot;-AT-&quot; before lookup</li>\n</ul>\n<p>This translation is done after the changes specified with the\n<code><a href=\"/main/core/summaries/settings.html#auth_username_translation\">auth_username_translation</a></code> setting.</p>\n"
  },
  "auth_username_translation": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>If set, performs username character translations before querying the auth\ndatabase.</p>\n<p>The value is a string formed of sets of <code>from</code> and <code>to</code> characters\nalternating.</p>\n<p>A value of <code>#@/@</code> means that <code>#</code> and <code>/</code> will both be translated to\nthe <code>@</code> character.</p>\n"
  },
  "auth_verbose": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Adjust log verbosity.</p>\n<p>If <code>yes</code>, log unsuccessful authentication attempts and why they failed.</p>\n"
  },
  "auth_verbose_passwords": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "no",
      "yes",
      "plain",
      "sha1"
    ],
    "text": "<p>In case of password mismatches, log the attempted password. You can also\ntruncate the logged password to <code>n</code> chars by appending <code>:n</code> (e.g.\n<code>sha1:6</code>).</p>\n<p>Available transformations:</p>\n<ul>\n<li><code>plain</code>, <code>yes</code>: Output cleartext password (NOT RECOMMENDED)</li>\n<li><code>sha1</code>: Output SHA1 hashed password</li>\n</ul>\n"
  },
  "auth_winbind_helper_path": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>This setting tells the system the path for Samba's ntlm_auth helper binary.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>auth_winbind_helper_path = /usr/bin/ntlm_auth</span></span></code></pre>\n</div>",
    "advanced": true
  },
  "base_dir": {
    "default": "<code>/var/run/dovecot/</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>The base directory in which Dovecot should store runtime data.</p>\n<p>This can be used to override the base directory determined at compile time.</p>\n"
  },
  "debug_log_path": {
    "default": "<code><a href=\"/main/core/summaries/settings.html#info_log_path\">info_log_path</a></code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The log file to use for debug messages.</p>\n"
  },
  "default_client_limit": {
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>1000</code>",
    "text": "<p>Default value for <code><a href=\"/main/core/summaries/settings.html#service_client_limit\">service_client_limit</a></code>, if not overridden by\nservice-specific configuration.</p>\n"
  },
  "default_idle_kill_interval": {
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": "<code>1 min</code>",
    "text": "<p>Default value for <code><a href=\"/main/core/summaries/settings.html#service_idle_kill_interval\">service_idle_kill_interval</a></code>, if not overridden by\nservice-specific configuration.</p>\n"
  },
  "default_internal_group": {
    "default": "<code>dovecot</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#default_internal_user\">default_internal_user</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#mail_access_groups\">mail_access_groups</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Define the default internal group. The\n<code><a href=\"/main/core/summaries/settings.html#mail_access_groups\">mail_access_groups</a></code> uses this as the default for giving mail\nprocesses UNIX socket access to various services. For proper security, no files\nor directories should be made writable for this group.</p>\n"
  },
  "default_internal_user": {
    "default": "<code>dovecot</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#default_internal_group\">default_internal_group</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Define the default internal user.</p>\n<p>Unprivileged processes run under the ID of the internal user. This\nuser should be distinct from the login user, to prevent login processes\nfrom disturbing other processes.</p>\n"
  },
  "default_login_user": {
    "default": "<code>dovenull</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The user the login process should run as.</p>\n<p>This is the least trusted user in Dovecot: this user should not have access\nto anything at all.</p>\n"
  },
  "default_process_limit": {
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>100</code>",
    "text": "<p>Default value for <code><a href=\"/main/core/summaries/settings.html#service_process_limit\">service_process_limit</a></code>, if not overridden by\nservice-specific configuration.</p>\n"
  },
  "default_vsz_limit": {
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": "<code>1 G</code>",
    "text": "<p>Default value for <code><a href=\"/main/core/summaries/settings.html#service_vsz_limit\">service_vsz_limit</a></code>, if not overridden by\nservice-specific configuration.</p>\n"
  },
  "deliver_log_format": {
    "default": "<code>msgid=%{msgid}: %{message}</code>",
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "text": "<p>The format to use for logging mail deliveries.</p>\n<p>Variables that can be used for this setting (see <code><a href=\"/main/core/settings/variables.html#global-variables\">Global variables</a></code>):</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Variable Name</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>%{message}</code></td>\n<td>Delivery status message (e.g., saved to INBOX)</td>\n</tr>\n<tr>\n<td><code>%{msgid}</code></td>\n<td></td>\n</tr>\n<tr>\n<td><code>%{subject}</code></td>\n<td>Subject</td>\n</tr>\n<tr>\n<td><code>%{from}</code></td>\n<td>From address</td>\n</tr>\n<tr>\n<td><code>%{from_envelope}</code></td>\n<td>SMTP FROM envelope</td>\n</tr>\n<tr>\n<td><code>%{size}</code></td>\n<td>Physical size</td>\n</tr>\n<tr>\n<td><code>%{vsize}</code></td>\n<td>Virtual size</td>\n</tr>\n<tr>\n<td><code>%{to_envelope}</code></td>\n<td>RCPT TO envelope</td>\n</tr>\n<tr>\n<td><code>%{delivery_time}</code></td>\n<td>How many milliseconds to deliver the mail</td>\n</tr>\n<tr>\n<td><code>%{session_time}</code></td>\n<td>LMTP session duration, not including <code>%{delivery_time}</code></td>\n</tr>\n<tr>\n<td><code>%{storage_id}</code></td>\n<td>Backend-specific ID for mail, e.g. Maildir filename</td>\n</tr>\n</tbody>\n</table>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>deliver_log_format = stime=%{session_time} msgid=%{msgid}: %{message}</span></span></code></pre>\n</div>"
  },
  "dict": {
    "tags": [
      "dict"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict_name\">dict_name</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#dict_driver\">dict_driver</a></code>"
    ],
    "text": "<p>Creates a new dict. The filter name refers to the <code><a href=\"/main/core/summaries/settings.html#dict_name\">dict_name</a></code>\nsetting.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>dict file {</span></span>\n<span class=\"line\"><span>  # ...</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div><p>Since an empty <code><a href=\"/main/core/summaries/settings.html#dict_driver\">dict_driver</a></code> defaults to <code><a href=\"/main/core/summaries/settings.html#dict_name\">dict_name</a></code>, there\nis no need to specify the <code><a href=\"/main/core/summaries/settings.html#dict_driver\">dict_driver</a></code> setting explicitly.</p>\n"
  },
  "dict_name": {
    "tags": [
      "dict"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict_driver\">dict_driver</a></code>"
    ],
    "text": "<p>Name of the dict. The <code><a href=\"/main/core/summaries/settings.html#dict_driver\">dict_driver</a></code> setting defaults to this.</p>\n"
  },
  "dict_driver": {
    "tags": [
      "dict"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>&lt;dict_name&gt;</code>",
    "text": "<p>The dict driver to use. Defaults to <code><a href=\"/main/core/summaries/settings.html#dict_name\">dict_name</a></code>.</p>\n"
  },
  "dict_file_path": {
    "tags": [
      "dict",
      "dict-file"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Path for the dictionary file.</p>\n"
  },
  "dict_proxy_name": {
    "tags": [
      "dict",
      "dict-proxy"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict_name\">dict_name</a></code>"
    ],
    "text": "<p>Name of the dict to access in the dict server. This refers to the\n<code><a href=\"/main/core/summaries/settings.html#dict_name\">dict_name</a></code> setting.</p>\n"
  },
  "dict_proxy_socket_path": {
    "tags": [
      "dict",
      "dict-proxy"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>dict</code>",
    "text": "<p>Points to the dict server's UNIX socket. The path is relative to the the\n<code><a href=\"/main/core/summaries/settings.html#base_dir\">base_dir</a></code> setting. This should be changed to <code>dict-async</code> if the\ndict driver supports asynchronous lookups (e.g. ldap, pgsql, cassandra, NOT\nmysql). The <code>dict-async</code> service allows more than one client, so this\nconfiguration prevents creating unnecessarily many dict processes.</p>\n"
  },
  "dict_proxy_idle_timeout": {
    "tags": [
      "dict",
      "dict-proxy"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>How long to keep the connection open to dict server before disconnecting. <code>0</code>\nmeans immediate disconnection after finishing the operation.</p>\n"
  },
  "dict_proxy_slow_warn": {
    "tags": [
      "dict",
      "dict-proxy"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>5s</code>",
    "text": "<p>Log a warning about dict lookups that take longer than this interval.</p>\n"
  },
  "redis_socket_path": {
    "tags": [
      "dict",
      "dict-redis"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>UNIX socket path to the Redis server. This is preferred over\n<code><a href=\"/main/core/summaries/settings.html#redis_host\">redis_host</a></code> if both are set.</p>\n"
  },
  "redis_host": {
    "tags": [
      "dict",
      "dict-redis"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>127.0.0.1</code>",
    "text": "<p>Redis server host.</p>\n"
  },
  "redis_port": {
    "tags": [
      "dict",
      "dict-redis"
    ],
    "values": [
      {
        "label": "Port Number",
        "url": "<a href=\"/main/core/settings/types.html#port-number\">Port Number</a>",
        "default_required": true
      }
    ],
    "default": "<code>6379</code>",
    "text": "<p>Redis server port.</p>\n"
  },
  "redis_password": {
    "tags": [
      "dict",
      "dict-redis"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Redis server password.</p>\n"
  },
  "redis_db_id": {
    "tags": [
      "dict",
      "dict-redis"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>Database number.</p>\n"
  },
  "redis_key_prefix": {
    "tags": [
      "dict",
      "dict-redis"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Prefix to add to all keys.</p>\n"
  },
  "redis_expire": {
    "tags": [
      "dict",
      "dict-redis"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": "<code>infinite</code>",
    "text": "<p>Expiration value for all keys.</p>\n"
  },
  "redis_request_timeout": {
    "tags": [
      "dict",
      "dict-redis"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>30s</code>",
    "text": "<p>How long to wait for answer before aborting request.</p>\n"
  },
  "dict_map": {
    "tags": [
      "dict",
      "dict-sql",
      "dict-ldap"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict_map_pattern\">dict_map_pattern</a></code>"
    ],
    "text": "<p>Creates a new dict mapping. The filter name refers to the\n<code><a href=\"/main/core/summaries/settings.html#dict_map_pattern\">dict_map_pattern</a></code> setting.</p>\n"
  },
  "dict_map_pattern": {
    "tags": [
      "dict",
      "dict-sql",
      "dict-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Pattern that is matched to the accessed dict keys. The <code><a href=\"/main/core/summaries/settings.html#dict_map\">dict_map</a></code>\nfilter name refers to this setting. If the pattern matches the key, this dict\nmap (and no other) is used. The dict maps are processed in the order listed in\nthe configuration file.</p>\n"
  },
  "dict_map_sql_table": {
    "tags": [
      "dict",
      "dict-sql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>SQL table to use for accessing this dict map.</p>\n"
  },
  "dict_map_username_field": {
    "tags": [
      "dict",
      "dict-sql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Field in the SQL table to use for accessing private dict keys in this dict map.\nThis setting is optional if only shared keys are accessed.</p>\n"
  },
  "dict_map_expire_field": {
    "tags": [
      "dict",
      "dict-sql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Field in the SQL table to use for tracking dict key expiration. This field is\noptional if no expiration is used by the code accessing the dict map.</p>\n"
  },
  "dict_map_value_field": {
    "tags": [
      "dict",
      "dict-sql",
      "dict-ldap"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict_map_value_field_name\">dict_map_value_field_name</a></code>"
    ],
    "text": "<ul>\n<li>\n<p>sql: Creates a new value for the dict map. The filter name refers to the\n<code><a href=\"/main/core/summaries/settings.html#dict_map_value_field_name\">dict_map_value_field_name</a></code> setting. Dict supports reading/writing multiple\nvalues for the same key.</p>\n</li>\n<li>\n<p>ldap: Value to be returned from an ldap search, as a <a href=\"/main/core/settings/variables.html\">variable-expression</a></p>\n</li>\n</ul>\n"
  },
  "dict_map_key_field": {
    "tags": [
      "dict",
      "dict-sql"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict_map_pattern\">dict_map_pattern</a></code>"
    ],
    "text": "<p>Creates a new field for the dict map. The filter name refers to the\n<code><a href=\"/main/core/summaries/settings.html#dict_map_key_field_value\">dict_map_key_field_value</a></code> setting. The fields are part of the SQL\nquery looking up the dict key.</p>\n"
  },
  "dict_map_value_field_name": {
    "tags": [
      "dict",
      "dict-sql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict_map_value_field\">dict_map_value_field</a></code>"
    ],
    "text": "<p>Field in the SQL table to use for the <code><a href=\"/main/core/summaries/settings.html#dict_map_value_field\">dict_map_value_field</a></code>.</p>\n"
  },
  "dict_map_value_field_type": {
    "tags": [
      "dict",
      "dict-sql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "string",
      "int",
      "uint",
      "double",
      "hexblob",
      "uuid"
    ],
    "default": "<code>string</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict_map_value_field\">dict_map_value_field</a></code>"
    ],
    "text": "<p>Type of the field in the SQL table for the <code><a href=\"/main/core/summaries/settings.html#dict_map_value_field\">dict_map_value_field</a></code>.</p>\n"
  },
  "dict_map_key_field_value": {
    "tags": [
      "dict",
      "dict-sql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict_map_pattern\">dict_map_pattern</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#dict_map_key_field\">dict_map_key_field</a></code>"
    ],
    "text": "<p>Variable in the <code><a href=\"/main/core/summaries/settings.html#dict_map_pattern\">dict_map_pattern</a></code> that maps to this\n<code><a href=\"/main/core/summaries/settings.html#dict_map_key_field\">dict_map_key_field</a></code>. The value must always begin with <code>$</code>.</p>\n"
  },
  "dict_map_key_field_name": {
    "tags": [
      "dict",
      "dict-sql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict_map_key_field\">dict_map_key_field</a></code>"
    ],
    "text": "<p>Field in the SQL table to use for the <code><a href=\"/main/core/summaries/settings.html#dict_map_key_field\">dict_map_key_field</a></code>.</p>\n"
  },
  "dict_map_key_field_type": {
    "tags": [
      "dict",
      "dict-sql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "string",
      "int",
      "uint",
      "double",
      "hexblob",
      "uuid"
    ],
    "default": "<code>string</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict_map_key_field\">dict_map_key_field</a></code>"
    ],
    "text": "<p>Type of the field in the SQL table for the <code><a href=\"/main/core/summaries/settings.html#dict_map_key_field\">dict_map_key_field</a></code>.</p>\n"
  },
  "dict_server": {
    "tags": [
      "dict",
      "dict-server"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict\">dict</a></code>"
    ],
    "text": "<p>Named filter for the dict server settings. Add the available named dicts for\nthe dict server under this filter using the <code><a href=\"/main/core/summaries/settings.html#dict\">dict</a></code> settings.</p>\n<p>For example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>dict_server {</span></span>\n<span class=\"line\"><span>  dict quota {</span></span>\n<span class=\"line\"><span>    driver = sql</span></span>\n<span class=\"line\"><span>    # ...</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>  dict acl {</span></span>\n<span class=\"line\"><span>    driver = file</span></span>\n<span class=\"line\"><span>    # ...</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "no_default": true
  },
  "dns_client_socket_path": {
    "advanced": true,
    "tags": [
      "dns",
      "dns_client"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>dns-client</code>",
    "text": "<p>UNIX socket path to the dns-client service.</p>\n"
  },
  "dns_client_timeout": {
    "tags": [
      "dns",
      "dns_client"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>10s</code>",
    "text": "<p>Timeout for DNS lookups.</p>\n"
  },
  "dotlock_use_excl": {
    "default": "<code>yes</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If <code>yes</code>, rely on O_EXCL to work when creating dotlock files.</p>\n<p>NFS has supported O_EXCL since version 3, so <code>yes</code> should be safe to use\nby default.</p>\n"
  },
  "doveadm_allowed_commands": {
    "default": "<code>ALL</code>",
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>Lists the commands that the client may use with the doveadm server.</p>\n<p>The setting <code>ALL</code> allows all commands.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>This setting provides rather weak security. Do not assume that it is safe to\ngive doveadm access to untrusted users by simply limiting the allowed commands.\nMany commands (especially <code>sync</code>, <code>backup</code> and <code>import</code>) have parameters\nthat cannot safely be accessed by untrusted users.</p>\n</div>\n"
  },
  "doveadm_api_key": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#doveadm_password\">doveadm_password</a></code>"
    ],
    "text": "<p>Set an API key for use of the HTTP API for the doveadm server.</p>\n<p>If set, this allows HTTP clients to authenticate to the doveadm HTTP server\nusing the X-API-Key header, which contains the API key base64 encoded.</p>\n<p>This API key must be kept secret. The doveadm API allows doing almost anything\nin the server, including accessing users' mailboxes.</p>\n<p>It's possible to use both <code><a href=\"/main/core/summaries/settings.html#doveadm_password\">doveadm_password</a></code> and API key. This\nallows clients to use either method to authenticate.</p>\n"
  },
  "doveadm_password": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#doveadm_api_key\">doveadm_api_key</a></code>"
    ],
    "text": "<p>Specify the password, which is used by both doveadm server and client.\nThe client sends this password to the server for authentication, and the\nserver accepts only this password. Alternatively, doveadm HTTP API can be\nauthenticated to using <code><a href=\"/main/core/summaries/settings.html#doveadm_api_key\">doveadm_api_key</a></code>.</p>\n<p>This password must be kept secret. The doveadm API allows doing almost anything\nin the server, including accessing users' mailboxes.</p>\n<p>If doveadm server is accessed via UNIX socket that has 0600 permissions, the\nauthentication is skipped. However, the doveadm HTTP API always requires\nauthentication.</p>\n"
  },
  "doveadm_port": {
    "default": 0,
    "values": [
      {
        "label": "Port Number",
        "url": "<a href=\"/main/core/settings/types.html#port-number\">Port Number</a>",
        "default_required": true
      }
    ],
    "text": "<p>The destination port to be used for the next doveadm proxying hop.\nThis implicitly enables doing a passdb lookup for finding the proxy settings.</p>\n<p>A value of <code>0</code> means that proxying is not in use. This also means no passdb\nlookup is done - only userdb lookup.</p>\n<p>This setting is required with Palomar cluster configuration even in backends,\nbecause the backend may still ask proxy to reject the connection and proxy\nthe user to another backend.</p>\n"
  },
  "doveadm_server": {
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Filter for doveadm server specific settings.</p>\n",
    "no_default": true
  },
  "doveadm_socket_path": {
    "default": "<code>doveadm-server</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The UNIX socket or host (<code>host:port</code> syntax is allowed) for connecting to\nthe doveadm server.</p>\n"
  },
  "doveadm_ssl": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "no",
      "ssl",
      "starttls"
    ],
    "text": "<p>TODO</p>\n"
  },
  "doveadm_username": {
    "default": "<code>doveadm</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The username for authentication to the doveadm service.</p>\n"
  },
  "doveadm_worker_count": {
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>If the worker count set here is non-zero, mail commands are run via this\nmany connections to the doveadm service.</p>\n<p>If <code>0</code>, commands are run directly in the same process.</p>\n"
  },
  "dovecot_config_version": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "text": "<p>Dovecot configuration version. It uses the same versioning as Dovecot in\ngeneral, e.g. <code>3.0.5</code>. This must be the first setting in the\nconfiguration file. It specifies the configuration syntax, the used setting\nnames and the expected default values.</p>\n<p>When there are default configuration changes in newer Dovecot versions, the\nexisting installations will continue to work the same as before with the same\ndefault settings until this version number is increased. If there are other\nconfiguration changes, the old configuration will either keep working or there\nwill be a clear failure at startup.</p>\n"
  },
  "dovecot_storage_version": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "text": "<p>Dovecot storage file format version. It uses the same versioning as Dovecot in\ngeneral, e.g. <code>3.0.5</code>. It specifies the oldest Dovecot version\nthat must be able to read files written by this Dovecot instance. The intention\nis that when upgrading Dovecot cluster, this setting is first kept as the old\nDovecot version. Once the cluster is fully upgraded to a new version and\nthere is no intention to rollback to the old version anymore, this version\nnumber can be increased.</p>\n"
  },
  "dsync_alt_char": {
    "default": "<code>_</code>",
    "tags": [
      "dsync"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>When the source and destination mailbox formats are different, it's\npossible for a mailbox name to exist on one source that isn't valid for\nthe destination. Any invalid characters are replaced with the\ncharacter indicated here.</p>\n"
  },
  "dsync_commit_msgs_interval": {
    "default": "<code>100</code>",
    "tags": [
      "dsync"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>Dsync will commit this number of messages incrementally, to avoid huge\ntransactions that fail.</p>\n"
  },
  "dsync_features": {
    "tags": [
      "dsync"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>This setting specifies features and workarounds that can be used with\ndsync. Options are specified in this setting via a space-separated list.</p>\n<p>Available options:</p>\n<dl>\n<dt><code>empty-header-workaround</code></dt>\n<dd>Workaround for servers (e.g. Zimbra) that sometimes send FETCH replies\ncontaining no headers.</dd>\n<dt><code>no-header-hashes</code></dt>\n<dd>When this setting is enabled and one dsync side doesn't support mail\nGUIDs (i.e. imapc), there is no fallback to using header hashes. Instead,\ndsync assumes that all mails with identical IMAP UIDs contain the same\nmail contents. This can significantly improve dsync performance with some\nIMAP servers that don't support caching Date/Message-ID headers.</dd>\n</dl>\n"
  },
  "dsync_hashed_headers": {
    "tags": [
      "dsync"
    ],
    "default": "<code>Date Message-ID</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>Which email headers are used in incremental syncing for checking whether\nthe local email matches the remote email?</p>\n<p>Format: a space-separated list of headers.</p>\n<p>This list should only include headers that can be efficiently downloaded\nfrom the remote server.</p>\n"
  },
  "event_exporter": {
    "tags": [
      "event-export"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#event_exporter_name\">event_exporter_name</a></code>"
    ],
    "text": "<p>Creates a new event exporter. The filter name refers to the\n<code><a href=\"/main/core/summaries/settings.html#event_exporter_name\">event_exporter_name</a></code> setting.</p>\n"
  },
  "event_exporter_driver": {
    "tags": [
      "event-export"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "log",
      "file",
      "unix",
      "http-post",
      "drop"
    ],
    "default": "<code>log</code>",
    "seealso": [
      "<a href=\"/main/core/config/events/export.html#drivers\">Event Export: Drivers</a>"
    ],
    "text": "<p>The event exporter driver to use.</p>\n"
  },
  "event_exporter_http_post_url": {
    "tags": [
      "event-export"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Target URL for <code><a href=\"/main/core/summaries/settings.html#event_exporter_driver\">event_exporter_driver = http-post</a></code>.</p>\n"
  },
  "event_exporter_file_path": {
    "tags": [
      "event-export"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Path to event log file with <code><a href=\"/main/core/summaries/settings.html#event_exporter_driver\">event_exporter_driver = file</a></code>.</p>\n"
  },
  "event_exporter_format": {
    "tags": [
      "event-export"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/events/export.html#formats\">Event Export: Formats</a>"
    ],
    "text": "<p>Format used for serializing the event.</p>\n"
  },
  "event_exporter_name": {
    "tags": [
      "event-export"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#metric_exporter\">metric_exporter</a></code>"
    ],
    "text": "<p>Name of the event exporter. It is referred by the <code><a href=\"/main/core/summaries/settings.html#metric_exporter\">metric_exporter</a></code>\nsettings.</p>\n"
  },
  "event_exporter_time_format": {
    "tags": [
      "event-export",
      "event-exporter-format"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "rfc3339",
      "unix"
    ],
    "default": "<code>rfc3339</code>",
    "seealso": [
      "<a href=\"/main/core/config/events/export.html#formats\">Event Export: Formats</a>"
    ],
    "text": "<dl>\n<dt><code>rfc3339</code></dt>\n<dd>Serialize timestamps as strings using the <a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc3339\">RFC 3339</a> format\n(<code>YYYY-MM-DDTHH:MM:SS.uuuuuuZ</code>).</dd>\n<dt><code>unix</code></dt>\n<dd>Serialize timestamps as a floating point number of seconds since the Unix\nepoch.</dd>\n</dl>\n"
  },
  "event_exporter_unix_connect_timeout": {
    "tags": [
      "event-export"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>250ms</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#event_exporter_unix_path\">event_exporter_unix_path</a></code>"
    ],
    "text": "<p>Timeout when connecting to unix socket with\n<code><a href=\"/main/core/summaries/settings.html#event_exporter_driver\">event_exporter_driver = unix</a></code>.</p>\n"
  },
  "event_exporter_unix_path": {
    "tags": [
      "event-export"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#event_exporter_unix_connect_timeout\">event_exporter_unix_connect_timeout</a></code>"
    ],
    "text": "<p>Path to event unix socket with <code><a href=\"/main/core/summaries/settings.html#event_exporter_driver\">event_exporter_driver = unix</a></code>.</p>\n"
  },
  "execute": {
    "tags": [
      "execute"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/execute.html\">Execute Scripts</a>"
    ],
    "text": "<p>Configure external execution script. Used by various different features, such\nas <a href=\"/main/core/plugins/welcome.html\">welcome</a>. Currently only a single execute block (per feature) is\nallowed.</p>\n"
  },
  "execute_args": {
    "tags": [
      "execute"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>External execution script arguments. The parameters are split by space\ncharacters. Currently escape characters are not supported.</p>\n"
  },
  "execute_driver": {
    "tags": [
      "execute"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "unix",
      "fork",
      "tcp"
    ],
    "seealso": [
      "<a href=\"/main/core/config/execute.html\">Execute Scripts</a>"
    ],
    "text": "<p>How to execute the external script:</p>\n<dl>\n<dt><code>unix</code></dt>\n<dd>Use UNIX socket connection to a <code>script</code> service listening in\n<code><a href=\"/main/core/summaries/settings.html#execute_unix_socket_path\">execute_unix_socket_path</a></code>.</dd>\n<dt><code>fork</code></dt>\n<dd>Fork and execute the <code><a href=\"/main/core/summaries/settings.html#execute_fork_path\">execute_fork_path</a></code> binary directly.</dd>\n<dt><code>tcp</code></dt>\n<dd>Use TCP connection to a <code>script</code> service listening in\n<code><a href=\"/main/core/summaries/settings.html#execute_tcp_host\">execute_tcp_host</a></code>:<code><a href=\"/main/core/summaries/settings.html#execute_tcp_port\">execute_tcp_port</a></code>.</dd>\n</dl>\n"
  },
  "execute_fork_path": {
    "tags": [
      "execute"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code><a href=\"/main/core/summaries/settings.html#execute_name\">execute_name</a></code>",
    "text": "<p>Path to the binary that is executed with <code><a href=\"/main/core/summaries/settings.html#execute_driver\">execute_driver = fork</a></code>.</p>\n"
  },
  "execute_name": {
    "tags": [
      "execute"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Name of the execution script. This is the <code><a href=\"/main/core/summaries/settings.html#execute\">execute</a></code> named filter\nname. It is also used to provide a default driver-specific settings:</p>\n<dl>\n<dt><code>unix</code></dt>\n<dd>Used as the default for <code><a href=\"/main/core/summaries/settings.html#execute_unix_socket_path\">execute_unix_socket_path</a></code>.</dd>\n<dt><code>fork</code></dt>\n<dd>Used as the default for <code><a href=\"/main/core/summaries/settings.html#execute_fork_path\">execute_fork_path</a></code>.</dd>\n<dt><code>tcp</code></dt>\n<dd>Used as the default for <code><a href=\"/main/core/summaries/settings.html#execute_tcp_host\">execute_tcp_host</a></code>:<code><a href=\"/main/core/summaries/settings.html#execute_tcp_port\">execute_tcp_port</a></code>.</dd>\n</dl>\n"
  },
  "execute_tcp_host": {
    "tags": [
      "execute"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code><a href=\"/main/core/summaries/settings.html#execute_name\">execute_name = host:</a></code>",
    "text": "<p>TCP host where to connect to with <code><a href=\"/main/core/summaries/settings.html#execute_driver\">execute_driver = tcp</a></code>.</p>\n"
  },
  "execute_tcp_port": {
    "tags": [
      "execute"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code><a href=\"/main/core/summaries/settings.html#execute_name\">execute_name = :port</a></code>",
    "text": "<p>TCP port where to connect to with <code><a href=\"/main/core/summaries/settings.html#execute_driver\">execute_driver = tcp</a></code>.</p>\n"
  },
  "execute_unix_socket_path": {
    "tags": [
      "execute"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code><a href=\"/main/core/summaries/settings.html#execute_name\">execute_name</a></code>",
    "text": "<p>UNIX socket path where to connect to with <code><a href=\"/main/core/summaries/settings.html#execute_driver\">execute_driver = unix</a></code>.</p>\n"
  },
  "fifo_listener": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#service\">service</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#fifo_listener_path\">fifo_listener_path</a></code>"
    ],
    "text": "<p>Creates a new FIFO listener for a <code><a href=\"/main/core/summaries/settings.html#service\">service</a></code>. The filter name refers\nto the <code><a href=\"/main/core/summaries/settings.html#fifo_listener_path\">fifo_listener_path</a></code> setting.</p>\n"
  },
  "fifo_listener_path": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#base_dir\">base_dir</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#fifo_listener\">fifo_listener</a></code>"
    ],
    "text": "<p>Path to the FIFO, relative to <code><a href=\"/main/core/summaries/settings.html#base_dir\">base_dir</a></code> setting. The\n<code><a href=\"/main/core/summaries/settings.html#fifo_listener\">fifo_listener</a></code> filter name refers to this setting.</p>\n"
  },
  "fifo_listener_type": {
    "tags": [
      "service"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Listener type. This string value has service-specific meaning and is used to\ndistinguish different listener types that one service may employ.</p>\n"
  },
  "fifo_listener_mode": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Octal Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#octal-unsigned-integer\">octal unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>0600</code>",
    "text": "<p>Mode of the file. Note that <code>0600</code> is an octal value, while <code>600</code> is a\ndifferent decimal value. Setting mode to <code>0</code> disables the listener.</p>\n"
  },
  "fifo_listener_user": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Owner of the listener file. Empty (default) means UID 0 (root).</p>\n"
  },
  "fifo_listener_group": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Group of the listener file. Empty (default) means GID 0 (root/wheel).</p>\n"
  },
  "first_valid_gid": {
    "default": "<code>1</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#last_valid_gid\">last_valid_gid</a></code>"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>This setting and <code><a href=\"/main/core/summaries/settings.html#last_valid_gid\">last_valid_gid</a></code> specify the valid GID\nrange for users.</p>\n<p>A user whose primary GID is outside this range is not allowed to log in.</p>\n<p>If the user belongs to any supplementary groups, the corresponding IDs are\nnot set.</p>\n"
  },
  "first_valid_uid": {
    "default": "<code>500</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#last_valid_uid\">last_valid_uid</a></code>"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>This setting and <code><a href=\"/main/core/summaries/settings.html#last_valid_uid\">last_valid_uid</a></code> specify the valid UID\nrange for users.</p>\n<p>A user whose UID is outside this range is not allowed to log in.</p>\n"
  },
  "haproxy_timeout": {
    "default": "<code>3secs</code>",
    "tags": [
      "haproxy"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>When to abort the HAProxy connection when no complete header has been\nreceived.</p>\n"
  },
  "haproxy_trusted_networks": {
    "tags": [
      "haproxy"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>A space-separated list of trusted network ranges for HAProxy connections.</p>\n<p>Connections from networks outside these ranges to ports that are configured\nfor HAProxy are aborted immediately.</p>\n"
  },
  "hostname": {
    "default": "<code>&lt;system's real hostname@domain.tld&gt;</code>",
    "tags": [
      "submission"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The hostname to be used in email messages sent out by the local delivery\nagent (such as the Message-ID: header), in LMTP replies, and as the\nhostname advertised by submission SMTP service.</p>\n"
  },
  "http_client_auto_redirect": {
    "advanced": true,
    "tags": [
      "http",
      "http_client"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>yes</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#http_client_request_max_redirects\">http_client_request_max_redirects</a></code>"
    ],
    "text": "<p>If this setting is <code>yes</code> redirects are handled as long as\n<code><a href=\"/main/core/summaries/settings.html#http_client_request_max_redirects\">http_client_request_max_redirects</a></code> isn't reached. If <code>no</code> the\nredirect responses are handled as regular failure responses.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>This setting should likely be changed only in the code, never in configuration.</p>\n</div>\n"
  },
  "http_client_auto_retry": {
    "advanced": true,
    "tags": [
      "http",
      "http_client"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>yes</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#http_client_request_max_attempts\">http_client_request_max_attempts</a></code>"
    ],
    "text": "<p>If this setting is <code>no</code> requests are not automatically retried by the generic\nHTTP client code. It's still possible to retry the requests with explicit\n<code>http_client_request_try_retry()</code> calls as long as\n<code><a href=\"/main/core/summaries/settings.html#http_client_request_max_attempts\">http_client_request_max_attempts</a></code> isn't reached.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>This setting should likely be changed only in the code, never in configuration.</p>\n</div>\n"
  },
  "http_client_connect_backoff_max_time": {
    "advanced": true,
    "tags": [
      "http",
      "http_client"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>1 min</code>",
    "text": "<p>Maximum backoff time for retries.</p>\n"
  },
  "http_client_connect_backoff_time": {
    "advanced": true,
    "tags": [
      "http",
      "http_client"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>100 ms</code>",
    "text": "<p>Initial backoff time for retries. It's doubled at each connection failure.</p>\n"
  },
  "http_client_connect_timeout": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "default": 0,
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#http_client_request_timeout\">http_client_request_timeout</a></code>"
    ],
    "text": "<p>Max time to wait for TCP connect and SSL handshake to finish before retrying.\n<code>0</code> = use <code><a href=\"/main/core/summaries/settings.html#http_client_request_timeout\">http_client_request_timeout</a></code>.</p>\n"
  },
  "http_client_delete_request_max_attempts": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#http_client_request_max_attempts\">http_client_request_max_attempts</a></code>"
    ],
    "text": "<p>If non-zero, override <code><a href=\"/main/core/summaries/settings.html#http_client_request_max_attempts\">http_client_request_max_attempts</a></code> for\n<code>DELETE</code> requests.</p>\n"
  },
  "http_client_delete_request_timeout": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "default": 0,
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#http_client_request_timeout\">http_client_request_timeout</a></code>"
    ],
    "text": "<p>If non-zero, override <code><a href=\"/main/core/summaries/settings.html#http_client_request_timeout\">http_client_request_timeout</a></code> for\n<code>DELETE</code> requests.</p>\n"
  },
  "http_client_dns_ttl": {
    "advanced": true,
    "tags": [
      "http",
      "http_client"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>30 mins</code>",
    "text": "<p>How long to cache DNS entries.</p>\n"
  },
  "http_client_max_auto_retry_delay": {
    "advanced": true,
    "tags": [
      "http",
      "http_client"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>Maximum acceptable delay for automatically retrying/redirecting requests. If a\nserver sends a response with a <code>Retry-After</code> header that causes a delay\nlonger than this, the request is not automatically retried and the response is\nreturned.</p>\n"
  },
  "http_client_max_connect_attempts": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "text": "<p>Maximum number of connection attempts to a host before all associated requests fail.</p>\n<p>If non-zero, the maximum will be enforced across all IPs for that host, meaning\nthat IPs may be tried more than once eventually if the number of IPs is smaller\nthan the specified maximum attempts. If the number of IPs is higher than the\nmaximum attempts not all IPs are tried.</p>\n<p>If <code>0</code>, all IPs are tried at most once.</p>\n"
  },
  "http_client_max_idle_time": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "default": 0,
    "text": "<p>Maximum time a connection will idle. If parallel connections are idle, the\nduplicates will end earlier based on how many idle connections exist to that\nsame service.</p>\n"
  },
  "http_client_max_parallel_connections": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "default": "<code>1</code>",
    "text": "<p>Maximum number of parallel connections per peer.</p>\n"
  },
  "http_client_max_pipelined_requests": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "default": "<code>1</code>",
    "text": "<p>Maximum number of pipelined requests per connection.</p>\n"
  },
  "http_client_proxy_password": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "text": "<p>Password for HTTP proxy.</p>\n"
  },
  "http_client_proxy_socket_path": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#http_client_proxy_url\">http_client_proxy_url</a></code>"
    ],
    "text": "<p>UNIX socket path for HTTP proxy. Overrides <code><a href=\"/main/core/summaries/settings.html#http_client_proxy_url\">http_client_proxy_url</a></code>.</p>\n"
  },
  "http_client_proxy_ssl_tunnel": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "default": "<code>yes</code>",
    "text": "<p>If <code>no</code> the HTTP proxy delegates SSL negotiation to proxy, rather than\ncreating a <code>CONNECT</code> tunnel through the proxy for the SSL link.</p>\n"
  },
  "http_client_proxy_url": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#http_client_proxy_socket_path\">http_client_proxy_socket_path</a></code>"
    ],
    "text": "<p>URL for HTTP proxy. Ignored if <code><a href=\"/main/core/summaries/settings.html#http_client_proxy_socket_path\">http_client_proxy_socket_path</a></code> is\nset.</p>\n"
  },
  "http_client_proxy_username": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "text": "<p>Username for HTTP proxy.</p>\n"
  },
  "http_client_rawlog_dir": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "text": "<p>Directory for writing raw log data for debugging purposes.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>Must be writable by the process creating this log.</p>\n</div>\n"
  },
  "http_client_read_request_max_attempts": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#http_client_request_max_attempts\">http_client_request_max_attempts</a></code>"
    ],
    "text": "<p>If non-zero, override <code><a href=\"/main/core/summaries/settings.html#http_client_request_max_attempts\">http_client_request_max_attempts</a></code> for <code>GET</code>\nand <code>HEAD</code> requests.</p>\n"
  },
  "http_client_read_request_timeout": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "default": 0,
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#http_client_request_timeout\">http_client_request_timeout</a></code>"
    ],
    "text": "<p>If non-zero, override <code><a href=\"/main/core/summaries/settings.html#http_client_request_timeout\">http_client_request_timeout</a></code> for <code>GET</code> and\n<code>HEAD</code> requests.</p>\n"
  },
  "http_client_request_absolute_timeout": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "text": "<p>Max total time to wait for HTTP request to finish, including all retries. <code>0</code>\nmeans no limit.</p>\n"
  },
  "http_client_request_max_attempts": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "default": "<code>1</code>",
    "text": "<p>Maximum number of attempts for a request.</p>\n"
  },
  "http_client_request_max_redirects": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "text": "<p>Maximum number of redirects for a request. <code>0</code> = redirects refused.</p>\n"
  },
  "http_client_request_timeout": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "default": "<code>1 min</code>",
    "text": "<p>Max time to wait for HTTP requests to finish before retrying.</p>\n"
  },
  "http_client_response_hdr_max_field_size": {
    "advanced": true,
    "tags": [
      "http",
      "http_client"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": "<code>8k</code>",
    "text": "<p>Response header limit: Max size for an individual field.</p>\n"
  },
  "http_client_response_hdr_max_fields": {
    "advanced": true,
    "tags": [
      "http",
      "http_client"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>50</code>",
    "text": "<p>Response header limit: Max number of fields.</p>\n"
  },
  "http_client_response_hdr_max_size": {
    "advanced": true,
    "tags": [
      "http",
      "http_client"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": "<code>200k</code>",
    "text": "<p>Response header limit: Max size for the entire response header.</p>\n"
  },
  "http_client_socket_recv_buffer_size": {
    "advanced": true,
    "tags": [
      "http",
      "http_client"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>The kernel receive buffer size for the connection sockets. <code>0</code> = kernel\ndefaults.</p>\n"
  },
  "http_client_socket_send_buffer_size": {
    "advanced": true,
    "tags": [
      "http",
      "http_client"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>The kernel send buffer size for the connection sockets. <code>0</code> = kernel\ndefaults.</p>\n"
  },
  "http_client_soft_connect_timeout": {
    "advanced": true,
    "tags": [
      "http",
      "http_client"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>Time to wait for TCP connect and SSL handshake to finish for the first\nconnection before trying the next IP in parallel. <code>0</code> = wait until current\nconnection attempt finishes.</p>\n"
  },
  "http_client_user_agent": {
    "advanced": true,
    "tags": [
      "http",
      "http_client"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p><code>User-Agent:</code> header to send.</p>\n"
  },
  "http_client_write_request_max_attempts": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#http_client_request_max_attempts\">http_client_request_max_attempts</a></code>"
    ],
    "text": "<p>If non-zero, override <code><a href=\"/main/core/summaries/settings.html#http_client_request_max_attempts\">http_client_request_max_attempts</a></code> for <code>PUT</code>\nand <code>POST</code> requests.</p>\n"
  },
  "http_client_write_request_timeout": {
    "tags": [
      "http",
      "http_client"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "default": 0,
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#http_client_request_timeout\">http_client_request_timeout</a></code>"
    ],
    "text": "<p>If non-zero, override <code><a href=\"/main/core/summaries/settings.html#http_client_request_timeout\">http_client_request_timeout</a></code> for <code>PUT</code> and\n<code>POST</code> requests.</p>\n"
  },
  "http_server_default_host": {
    "advanced": true,
    "tags": [
      "http",
      "http-server"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Overwrite the local hostname with http_server_default_host.</p>\n"
  },
  "http_server_max_idle_time": {
    "tags": [
      "http",
      "http-server"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>Maximum time a connection will idle.</p>\n"
  },
  "http_server_max_payload_size": {
    "advanced": true,
    "tags": [
      "http",
      "http-server"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": "<code>10G</code>",
    "text": "<p>Request payload limit: Max size for the request payload.</p>\n"
  },
  "http_server_max_pipelined_requests": {
    "tags": [
      "http",
      "http-server"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>1</code>",
    "text": "<p>Maximum number of pipelined requests per connection.</p>\n"
  },
  "http_server_max_target_length": {
    "advanced": true,
    "tags": [
      "http",
      "http-server"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": "<code>8k</code>",
    "text": "<p>Request target limit: Maximum length of the request target.</p>\n"
  },
  "http_server_request_hdr_max_field_size": {
    "advanced": true,
    "tags": [
      "http",
      "http-server"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": "<code>8k</code>",
    "text": "<p>Request header limit: Max size for an individual field.</p>\n"
  },
  "http_server_request_hdr_max_fields": {
    "advanced": true,
    "tags": [
      "http",
      "http-server"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>50</code>",
    "text": "<p>Request header limit: Max number of fields.</p>\n"
  },
  "http_server_request_hdr_max_size": {
    "advanced": true,
    "tags": [
      "http",
      "http-server"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": "<code>200k</code>",
    "text": "<p>Request header limit: Max size for the entire request header.</p>\n"
  },
  "http_server_socket_recv_buffer_size": {
    "advanced": true,
    "tags": [
      "http",
      "http-server"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>The kernel receive buffer size for the connection sockets. <code>0</code> = kernel\ndefaults.</p>\n"
  },
  "http_server_socket_send_buffer_size": {
    "advanced": true,
    "tags": [
      "http",
      "http-server"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": "<code>0</code>",
    "text": "<p>The kernel send buffer size for the connection sockets. <code>0</code> = kernel\ndefaults.</p>\n"
  },
  "http_server_rawlog_dir": {
    "tags": [
      "http",
      "http-server"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Directory for writing raw log data for debugging purposes.</p>\n"
  },
  "imap_capability": {
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>Override the IMAP CAPABILITY response.</p>\n<p>Example of modifying capability banner by adding QUOTA and ACL, and removing IDLE:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>imap_capability {</span></span>\n<span class=\"line\"><span>  QUOTA = yes</span></span>\n<span class=\"line\"><span>  ACL = yes</span></span>\n<span class=\"line\"><span>  IDLE = no</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div><p>Example of setting capability banner to exactly IMAP4rev1 SASL-IR IDLE:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>imap_capability = IMAP4rev1 SASL-IR IDLE</span></span></code></pre>\n</div>"
  },
  "imap_client_workarounds": {
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>Workarounds for various IMAP client bugs can be enabled here.</p>\n<p>The following values are currently supported:</p>\n<dl>\n<dt><code>delay-newmail</code></dt>\n<dd>EXISTS/RECENT new-mail notifications are sent only in replies to NOOP\nand CHECK commands. Some clients, such as pre-2.1 versions of Mac OS X\nMail, ignore them otherwise, and, worse, Outlook Express may report\nthat the message is no longer on the server (note that the workaround\ndoes not help for OE6 if synchronization is set to Headers Only).</dd>\n<dt><code>tb-extra-mailbox-sep</code></dt>\n<dd>Because <code><a href=\"/main/core/summaries/settings.html#mailbox_list_layout\">mailbox_list_layout = fs</a></code> (mbox and dbox) confuses\nThunderbird, causing extra / suffixes to mailbox names, Dovecot can be told\nto ignore the superfluous character instead of judging the mailbox name to\nbe invalid.</dd>\n<dt><code>tb-lsub-flags</code></dt>\n<dd>Without this workaround, Thunderbird doesn't immediately recognize\nthat LSUB replies with <code><a href=\"/main/core/summaries/settings.html#mailbox_list_layout\">mailbox_list_layout = fs</a></code> aren't\nselectable, and users may receive pop-ups with not selectable errors.\nShowing \\Noselect flags for these replies (e.g., in mbox use) causes them\nto be grayed out.</dd>\n</dl>\n"
  },
  "imap_fetch_failure": {
    "default": "<code>disconnect-immediately</code>",
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "disconnect-after",
      "disconnect-immediately",
      "no-after"
    ],
    "text": "<p>Behavior when IMAP FETCH fails due to some internal error. Options:</p>\n<dl>\n<dt><code>disconnect-immediately</code></dt>\n<dd>\n<p>The FETCH is aborted immediately and the IMAP client is disconnected.</p>\n</dd>\n<dt><code>disconnect-after</code></dt>\n<dd>\n<p>The FETCH runs for all the requested mails returning as much data as\npossible. The client is finally disconnected without a tagged reply.</p>\n</dd>\n<dt><code>no-after</code></dt>\n<dd>\n<p>Same as disconnect-after, but tagged NO reply is sent instead of\ndisconnecting the client.</p>\n<p>If the client attempts to FETCH the same failed mail more than once,\nthe client is disconnected.</p>\n<p>This is to avoid clients from going into infinite loops trying to FETCH\na broken mail.</p>\n</dd>\n</dl>\n"
  },
  "imap_hibernate_timeout": {
    "default": "<code>30secs</code>",
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>How long to wait while the client is in IDLE state before moving the\nconnection to the hibernate process, to save on memory use, and close the\nexisting IMAP process.</p>\n<p>If nothing happens for this long while client is IDLEing, move the\nconnection to imap-hibernate process and close the old imap process. This\nsaves memory, because connections use very little memory in imap-hibernate\nprocess. The downside is that recreating the imap process back uses some\nadditional system resources.</p>\n"
  },
  "imap_id_retain": {
    "default": "<code>no</code>",
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>When proxying IMAP connections to other hosts, this variable must be\nenabled to forward the IMAP ID command provided by the client.</p>\n<p>This setting enables the <code>%{client_id}</code> variable for auth processes. See\n<code><a href=\"/main/core/settings/variables.html#authentication-variables\">Authentication variables</a></code>.</p>\n"
  },
  "imap_id_send": {
    "default": "<code>name=%{dovecot:name}</code>",
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "text": "<p>Which ID field names and values to send to clients.</p>\n<p>You can access the default values by using\n<a href=\"/main/core/settings/variables.html#distribution-variables\">Distribution Variables</a>.</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>imap_id_send {</span></span>\n<span class=\"line\"><span>  name = %{dovecot:name}</span></span>\n<span class=\"line\"><span>  version = %{dovecot:version}</span></span>\n<span class=\"line\"><span>  support-url = http://example.com/</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "imap_idle_notify_interval": {
    "default": "<code>2mins</code>",
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>The amount of time to wait between &quot;OK Still here&quot; untagged IMAP responses\nwhen the client is in IDLE operation.</p>\n"
  },
  "imap_literal_minus": {
    "default": "<code>no</code>",
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Enable IMAP LITERAL- (<a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc7888\">RFC 7888</a>) extension (replaces LITERAL+)?</p>\n"
  },
  "imap_logout_format": {
    "default": "<code>in=%{input} out=%{output} deleted=%{deleted} expunged=%{expunged} trashed=%{trashed} hdr_count=%{fetch_hdr_count} hdr_bytes=%{fetch_hdr_bytes} body_count=%{fetch_body_count} body_bytes=%{fetch_body_bytes}</code>",
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "text": "<p>This setting specifies the IMAP logout format string. Supported variables,\nin addition to <code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> are:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Variable Name</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>%{input}</code></td>\n<td>Total number of bytes read from client</td>\n</tr>\n<tr>\n<td><code>%{output}</code></td>\n<td>Total number of bytes sent to client</td>\n</tr>\n<tr>\n<td><code>%{fetch_hdr_count}</code></td>\n<td>Number of mails with mail header data sent to client</td>\n</tr>\n<tr>\n<td><code>%{fetch_hdr_bytes}</code></td>\n<td>Number of bytes with mail header data sent to client</td>\n</tr>\n<tr>\n<td><code>%{fetch_body_count}</code></td>\n<td>Number of mails with mail body data sent to client</td>\n</tr>\n<tr>\n<td><code>%{fetch_body_bytes}</code></td>\n<td>Number of bytes with mail body data sent to client</td>\n</tr>\n<tr>\n<td><code>%{deleted}</code></td>\n<td>Number of mails where client added Deleted flag</td>\n</tr>\n<tr>\n<td><code>%{expunged}</code></td>\n<td>Number of mails that client expunged, which does not include automatically expunged mails</td>\n</tr>\n<tr>\n<td><code>%{autoexpunged}</code></td>\n<td>Number of mails that were automatically expunged after client disconnected</td>\n</tr>\n<tr>\n<td><code>%{trashed}</code></td>\n<td>Number of mails that client copied/moved to the special_use=Trash mailbox.</td>\n</tr>\n<tr>\n<td><code>%{appended}</code></td>\n<td>Number of mails saved during the session</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "imap_max_line_length": {
    "default": "<code>64k</code>",
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Maximum IMAP command line length. Some clients generate very long command\nlines with huge mailboxes, so you may need to raise this if you get\nToo long argument or IMAP command line too large errors often.</p>\n"
  },
  "imap_metadata": {
    "default": "<code>no</code>",
    "tags": [
      "imap",
      "metadata"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Dovecot supports the IMAP METADATA extension (<a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc5464\">RFC 5464</a>), which allows\nper-mailbox, per-user data to be stored and accessed via IMAP commands. Set\nthis parameter's value to <code>yes</code> if you wish to activate the IMAP METADATA\ncommands.</p>\n<p>Note: If activated, a dictionary needs to be configured, via the\n<code><a href=\"/main/core/summaries/settings.html#mail_attribute\">mail_attribute</a></code> setting.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span># Store METADATA information within user's Maildir directory</span></span>\n<span class=\"line\"><span>mail_attribute {</span></span>\n<span class=\"line\"><span>  dict file {</span></span>\n<span class=\"line\"><span>    path = %{home}/Maildir/dovecot-attributes</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span>protocol imap {</span></span>\n<span class=\"line\"><span>  imap_metadata = yes</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "imap_urlauth_host": {
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "URL",
        "url": "<a href=\"/main/core/settings/types.html#url\">URL</a>"
      }
    ],
    "text": "<p>Specifies the host used for URLAUTH URLs. Only this host is accepted in\nthe client-provided URLs. Using <code>*</code> value (not recommended) allows all\nhosts and the generated URLs use <code><a href=\"/main/core/summaries/settings.html#hostname\">hostname</a></code> as the host.</p>\n<p>An empty value disables the URLAUTH extension entirely.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>URLAUTH in current versions of Dovecot is broken in several ways.\nThis will be fixed in the future, but activating URLAUTH support on\nproduction systems is not recommended.</p>\n</div>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>This setting is REQUIRED for the URLAUTH (<a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc4467\">RFC 4467</a>) extension to\nbe active.</p>\n</div>\n"
  },
  "imap_urlauth_logout_format": {
    "default": "<code>in=%{input} out=%{output}</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#imap_urlauth_host\">imap_urlauth_host</a></code>"
    ],
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "text": "<p>Specifies the logout format used with the URLAUTH extension in IMAP\noperation.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>This setting is currently not used.</p>\n</div>\n<p>Variables allowed:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Name</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>%{input}</code></td>\n<td>Total number of bytes read from the client</td>\n</tr>\n<tr>\n<td><code>%{output}</code></td>\n<td>Total number of bytes sent to the client</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "imap_urlauth_port": {
    "default": "<code>143</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#imap_urlauth_host\">imap_urlauth_host</a></code>"
    ],
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "Port Number",
        "url": "<a href=\"/main/core/settings/types.html#port-number\">Port Number</a>",
        "default_required": true
      }
    ],
    "text": "<p>The port is used with the URLAUTH extension in IMAP operation.</p>\n"
  },
  "imapc_cmd_timeout": {
    "default": "<code>5 mins</code>",
    "tags": [
      "imapc"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>How long to wait for a reply to an IMAP command sent to the remote IMAP\nserver before disconnecting and retrying.</p>\n"
  },
  "imapc_connection_timeout_interval": {
    "tags": [
      "imapc"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>30secs</code>",
    "text": "<p>How long to wait before considering a connection attempt as timed out.</p>\n"
  },
  "imapc_connection_retry_count": {
    "default": "<code>1</code>",
    "tags": [
      "imapc"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>How many times to retry connection against a remote IMAP server?</p>\n"
  },
  "imapc_connection_retry_interval": {
    "default": "<code>1 secs</code>",
    "tags": [
      "imapc"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "text": "<p>How long to wait between retries against a remote IMAP server?</p>\n"
  },
  "imapc_features": {
    "tags": [
      "imapc"
    ],
    "changed": [
      {
        "text": "<p>Several features are now automatically enabled and the respective flags\ndropped. In their place new flags to disable these features were added.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.0.0</span>"
      }
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>List of features, optimizations, and workarounds that can be enabled.</p>\n<p><span class=\"VPBadge info\">Changed: 3.2.0</span> Any remote IMAP server\nextension can now be disabled by using <code>no-</code> prefixed with the capability\nname. For example <code>no-sort</code>, <code>no-sort=display</code> or <code>no-quota</code>.</p>\n<dl>\n<dt><strong>Features</strong></dt>\n<dd>\n<dl>\n<dt><code>no-acl</code></dt>\n<dd>\n<p>If the <a href=\"/main/core/plugins/imap_acl.html\">imap-acl plugin</a> is loaded, the imapc acl feature is\nautomatically enabled. With it IMAP ACL commands (MYRIGHTS, GETACL,\nSETACL, DELETEACL) are proxied to the imapc remote location. Note\nthat currently these commands are attempted to be used even if the\nremote IMAP server doesn't advertise the ACL capability.</p>\n<p>To disable this feature either unload the <a href=\"/main/core/plugins/imap_acl.html\">imap-acl plugin</a> or\nprovide this feature.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\"><span class=\"VPBadge info\">Changed: 3.0.0</span></p>\n<p>Earlier versions had an &quot;acl&quot; feature, which is now enabled by default.</p>\n</div>\n</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>no-delay-login</code></dt>\n<dd>\n<p>Immediately connect to the remote server. By default this is\ndelayed until a command requires a connection.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\"><span class=\"VPBadge info\">Changed: 3.0.0</span></p>\n<p>Earlier versions had a &quot;delay-login&quot; feature, which is now enabled\nby default.</p>\n</div>\n</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>gmail-migration</code></dt>\n<dd>Enable GMail-specific migration. Use IMAP <code>X-GM-MSGID</code> as POP3 UIDL.\nAdd <code>$GMailHaveLabels</code> keyword to mails that have <code>X-GM-LABELS</code>\nexcept for <code>Muted</code> keyword (to be used for migrating only archived\nemails in <code>All Mails</code>). Add <code><a href=\"/main/core/summaries/settings.html#pop3_deleted_flag\">pop3_deleted_flag</a></code> to\nmails that don't exist in POP3 server.</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>no-modseq</code></dt>\n<dd>\n<p>Disable access to <code>MODSEQ</code> and <code>HIGHESTMODSEQ</code> fields. By default\nthese fields are available if the remote server advertises the\nCONDSTORE or the QRESYNC capability. If modseqs are disabled, or not\nsupported by the new server, they can still be used if imapc is\nconfigured to have local index files.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\"><span class=\"VPBadge info\">Changed: 3.0.0</span></p>\n<p>Earlier versions had a &quot;modseq&quot; feature, which is now enabled by\ndefault.</p>\n</div>\n</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>proxyauth</code></dt>\n<dd>Use Sun/Oracle IMAP-server specific <code>PROXYAUTH</code> command to do master\nuser authentication. Normally this would be done using the SASL PLAIN\nauthentication.</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>send-id</code></dt>\n<dd>Send session ID with the IMAP ID <code>x-session-ext-id</code> parameter. If\n<code><a href=\"/main/core/summaries/settings.html#login_trusted_networks\">login_trusted_networks</a></code> on the target host is\nconfigured to trust the connecting imapc IP, the session ID is\npreserved as the new imapc connection's session ID prefix.</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>throttle:&lt;INIT&gt;:&lt;MAX&gt;:&lt;SHRINK&gt;</code></dt>\n<dd>\n<p>When receiving [THROTTLED] response (from GMail), throttling is\napplied.</p>\n<p><strong>INIT</strong> = initial throttling msecs (default: 50 ms), afterwards each\nsubsequent [THROTTLED] doubles the throttling until <strong>MAX</strong> is reached\n(default: 16000 ms). When [THROTTLED] is not received for a while,\nit's shrunk again. The initial shrinking is done after <strong>SHRINK</strong>\n(default: 500 ms). If [THROTTLED] is received again within this\ntimeout, it's doubled, otherwise both throttling and the next\nshrinking timeout is shrank to 3/4 the previous value.</p>\n</dd>\n</dl>\n</dd>\n<dt><strong>Optimizations</strong></dt>\n<dd>\n<dl>\n<dt><code>no-fetch-bodystructure</code></dt>\n<dd>\n<p>Disable fetching of IMAP <code>BODY</code> and <code>BODYSTRUCTURE</code> from the\nremote server. Instead, the whole message body is fetched to\nregenerate them.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\"><span class=\"VPBadge info\">Changed: 3.0.0</span></p>\n<p>Earlier versions had a &quot;fetch-bodystructure&quot; feature, which is now\nenabled by default.</p>\n</div>\n</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>no-fetch-headers</code></dt>\n<dd>\n<p>Disable fetching of specific message headers from the remote server\nusing the IMAP <code>FETCH BODY.PEEK[HEADER.FIELDS(...)]</code> command.\nInstead, the whole header is fetched and the wanted headers are\nparsed from it.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\"><span class=\"VPBadge info\">Changed: 3.0.0</span></p>\n<p>Earlier versions had a &quot;fetch-headers&quot; feature, which is now enabled\nby default.</p>\n</div>\n</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>no-fetch-size</code></dt>\n<dd>\n<p>Disable fetching of message sizes from the remote server using the\nIMAP <code>FETCH RFC822.SIZE</code> command. Instead, the whole message body\nis fetched to calculate the size.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\"><span class=\"VPBadge info\">Changed: 3.0.0</span></p>\n<p>Earlier versions had a &quot;rfc822.size&quot; feature, which is now enabled\nby default.</p>\n</div>\n</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>no-metadata</code></dt>\n<dd>Disable the detection of the <code>METADATA</code> capability from the\nremote server. The client will receive a <code>NO [UNAVAILABLE]</code>\nresponse for any request that requires access to metadata on the\nremote server (the same happens if the server does not announce\nthe capability at all).</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>no-search</code></dt>\n<dd>\n<p>Disable searching messages using the IMAP <code>SEARCH</code> command.\nInstead, all the message headers/bodies are fetched to perform\nthe search locally.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\"><span class=\"VPBadge info\">Changed: 3.0.0</span></p>\n<p>Earlier versions had a &quot;search&quot; feature, which is now enabled by\ndefault.</p>\n</div>\n</dd>\n</dl>\n</dd>\n<dt><strong>Workarounds</strong></dt>\n<dd>\n<dl>\n<dt><code>fetch-fix-broken-mails</code></dt>\n<dd>\n<p>If a <code>FETCH</code> returns <code>NO</code> (but not <code>NO [LIMIT]</code> or <code>NO   [SERVERBUG]</code>), assume the mail is broken in server and just treat\nit as if it were an empty email.</p>\n<div class=\"danger custom-block\"><p class=\"custom-block-title\">DANGER</p>\n<p>This is often a dangerous option! It's not safe to assume that <code>NO</code>\nmeans a permanent error rather than a temporary error. This feature\nshould be enabled only for specific users who have been determined\nto be broken.</p>\n</div>\n</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>fetch-msn-workarounds</code></dt>\n<dd>Try to ignore wrong message sequence numbers in <code>FETCH</code> replies\nwhenever possible, preferring to use the returned UID number instead.</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>no-examine</code></dt>\n<dd>Use <code>SELECT</code> instead of <code>EXAMINE</code> even when we don't want to\nmodify anything in the mailbox. This is a Courier-workaround where\nit didn't permanently assign <code>UIDVALIDITY</code> to an <code>EXAMINE</code>d\nmailbox, but assigned it for <code>SELECT</code>ed mailbox.</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>no-qresync</code> <span class=\"VPBadge tip\">Added: 3.0.0</span></dt>\n<dd>This can be used to work around a Zimbra bug where it doesn't send\nuntagged &quot;OK [CLOSED]&quot; imap-resp-code when selecting a folder.</dd>\n</dl>\n</dd>\n<dd>\n<dl>\n<dt><code>zimbra-workarounds</code></dt>\n<dd>Fetch full message using <code>BODY.PEEK[HEADER] BODY.PEEK[TEXT]</code>\ninstead of just <code>BODY.PEEK[]</code> because the header differs between\nthese two when there are illegal control chars or 8bit chars.\nThis mainly caused problems with dsync, but this should no longer\nbe a problem and there's probably no need to enable this workaround.</dd>\n</dl>\n</dd>\n</dl>\n"
  },
  "imapc_host": {
    "tags": [
      "imapc",
      "imapc-auth"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The remote IMAP host to connect to.</p>\n"
  },
  "imapc_list_prefix": {
    "tags": [
      "imapc"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Access only mailboxes under this prefix.</p>\n<p>Example, for a source IMAP server that uses an INBOX namespace prefix:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>imapc_list_prefix = INBOX</span></span></code></pre>\n</div>"
  },
  "imapc_master_user": {
    "tags": [
      "imapc"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#imapc_password\">imapc_password</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#imapc_user\">imapc_user</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The master username to authenticate as on the remote IMAP host.</p>\n<p>To authenticate as a master user but use a separate login user, the\nfollowing configuration should be employed, where the credentials are\nrepresented by masteruser and masteruser-secret:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>imapc_user = %{user}</span></span>\n<span class=\"line\"><span>imapc_master_user = masteruser</span></span>\n<span class=\"line\"><span>imapc_password = masteruser-secret</span></span></code></pre>\n</div><p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> can be used.</p>\n"
  },
  "imapc_max_idle_time": {
    "default": "<code>29 mins</code>",
    "tags": [
      "imapc"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>Send a command to the source IMAP server as a keepalive after no other\ncommand has been sent for this amount of time.</p>\n<p>Dovecot will send either <code>NOOP</code> or <code>DONE</code> to the source IMAP server.</p>\n"
  },
  "imapc_max_line_length": {
    "tags": [
      "imapc"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": "<code>unlimited</code>",
    "text": "<p>The maximum line length to accept from the remote IMAP server.</p>\n<p>This setting is used to limit maximum memory usage.</p>\n"
  },
  "imapc_password": {
    "tags": [
      "imapc"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#imapc_master_user\">imapc_master_user</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#imapc_user\">imapc_user</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#imapc_sasl_mechanisms\">imapc_sasl_mechanisms</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The authentication password for the remote IMAP server.</p>\n<p>If using master users, this setting will be the password of the master user.</p>\n"
  },
  "imapc_port": {
    "default": "<code>143</code>",
    "tags": [
      "imapc",
      "imapc-auth"
    ],
    "values": [
      {
        "label": "Port Number",
        "url": "<a href=\"/main/core/settings/types.html#port-number\">Port Number</a>",
        "default_required": true
      }
    ],
    "text": "<p>The port on the remote IMAP host to connect to.</p>\n"
  },
  "imapc_rawlog_dir": {
    "seealso": [
      "<a href=\"/main/core/admin/rawlog.html\">rawlog</a>"
    ],
    "tags": [
      "imapc",
      "imapc-auth"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Log all IMAP traffic input/output to this directory.</p>\n"
  },
  "imapc_sasl_mechanisms": {
    "default": "<code>plain</code>",
    "tags": [
      "imapc"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>The <a href=\"/main/core/admin/sasl.html\">SASL</a> mechanisms to use for authentication when connection to a\nremote IMAP server.</p>\n<p>The first one advertised by the remote IMAP sever is used.</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>imapc_sasl_mechanisms {</span></span>\n<span class=\"line\"><span>  external = yes</span></span>\n<span class=\"line\"><span>  plain = yes</span></span>\n<span class=\"line\"><span>  login = yes</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div><p>Supported mechanisms are:</p>\n<ul>\n<li>ANONYMOUS</li>\n<li>EXTERNAL</li>\n<li>LOGIN</li>\n<li>OAUTHBEARER</li>\n<li>PLAIN</li>\n<li>SCRAM-SHA-1</li>\n<li>SCRAM-SHA-1-PLUS</li>\n<li>SCRAM-SHA-256</li>\n<li>SCRAM-SHA-256-PLUS</li>\n<li>XOAUTH2</li>\n</ul>\n<p>Note that <code><a href=\"/main/core/summaries/settings.html#imapc_password\">imapc_password</a></code> is ignored for <code>ANONYMOUS</code> and <code>EXTERNAL</code> mechanisms.\nFor <code>OAUTHBEARER</code> and <code>XOAUTH2</code> <code><a href=\"/main/core/summaries/settings.html#imapc_password\">imapc_password</a></code> should be bearer token.</p>\n"
  },
  "imapc_ssl": {
    "default": "<code>no</code>",
    "tags": [
      "imapc",
      "imapc-auth"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "no",
      "imaps",
      "starttls"
    ],
    "text": "<p>Use TLS to connect to the remote IMAP server.</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>no</code></td>\n<td>No TLS</td>\n</tr>\n<tr>\n<td><code>imaps</code></td>\n<td>Explicitly connect to remote IMAP port using TLS</td>\n</tr>\n<tr>\n<td><code>starttls</code></td>\n<td>Use IMAP STARTTLS command to switch to TLS connection</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "imapc_ssl_verify": {
    "removed": [
      {
        "text": "<p>Dropped in favor of using the global\n<code><a href=\"/main/core/summaries/settings.html#ssl_client_require_valid_cert\">ssl_client_require_valid_cert</a></code>.</p>\n",
        "version": "<span class=\"VPBadge danger\">Removed: 3.1.0</span>"
      }
    ],
    "default": "<code>yes</code>",
    "tags": [
      "imapc"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#imapc_ssl\">imapc_ssl</a></code>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Verify remote IMAP TLS certificate?</p>\n<p>Verification may be disabled during testing, but should be enabled during\nproduction use.</p>\n<p>Only used if <code><a href=\"/main/core/summaries/settings.html#imapc_ssl\">imapc_ssl</a></code> is enabled.</p>\n"
  },
  "imapc_user": {
    "tags": [
      "imapc",
      "imapc-auth"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#imapc_master_user\">imapc_master_user</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#imapc_password\">imapc_password</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#imapc_sasl_mechanisms\">imapc_sasl_mechanisms</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>%{owner_user}</code>",
    "text": "<p>The user identity to be used for performing a regular IMAP LOGIN to the\nsource IMAP server.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> can be used.</p>\n"
  },
  "import_environment": {
    "default": "<code>\nTZ=%{env:TZ} CORE_OUTOFMEM=%{env:CORE_OUTOFMEM} CORE_ERROR=%{env:CORE_ERROR}\nPATH=%{env:PATH} MALLOC_MMAP_THRESHOLD_=131072\n<br />\n<br />\nAlso systemd environments: LISTEN_PID=%{env:LISTEN_PID} LISTEN_FDS=%{env:LISTEN_FDS} NOTIFY_SOCKET=%{env:NOTIFY_SOCKET}\n</code>",
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "text": "<p>A list of environment key=value pairs, that are preserved and passed to all\nchild processes.</p>\n<p>The value can be determined from the existing environment upon Dovecot startup or directly specified.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>import_environment {</span></span>\n<span class=\"line\"><span>  TZ = :/etc/localtime</span></span>\n<span class=\"line\"><span>  TMPDIR = /dovecot-tmp</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "inet_listener": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#service\">service</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#inet_listener_name\">inet_listener_name</a></code>"
    ],
    "text": "<p>Creates a new network socket listener for a <code><a href=\"/main/core/summaries/settings.html#service\">service</a></code>. The filter\nname refers to the <code><a href=\"/main/core/summaries/settings.html#inet_listener_name\">inet_listener_name</a></code> setting.</p>\n"
  },
  "inet_listener_name": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#inet_listener_type\">inet_listener_type</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#inet_listener\">inet_listener</a></code>"
    ],
    "text": "<p>Name of this listener. It is meant to be descriptive for humans (e.g. <code>imap</code>,\n<code>imaps</code>), but it is also used by services to determine the socket type,\nunless <code><a href=\"/main/core/summaries/settings.html#inet_listener_type\">inet_listener_type</a></code> overrides it. The\n<code><a href=\"/main/core/summaries/settings.html#inet_listener\">inet_listener</a></code> filter name refers to this setting.</p>\n"
  },
  "inet_listener_type": {
    "tags": [
      "service"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Listener type. This string value has service-specific meaning and is used to\ndistinguish different listener types that one service may employ.</p>\n"
  },
  "inet_listener_port": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Port Number",
        "url": "<a href=\"/main/core/settings/types.html#port-number\">Port Number</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#listen\">listen</a></code>"
    ],
    "default": 0,
    "text": "<p>Port number where to listen. <code>0</code> disables the listener.</p>\n"
  },
  "inet_listener_ssl": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>"
    ],
    "text": "<p>If <code>yes</code>, the listener does an immediate SSL/TLS handshake after accepting a\nconnection. This is needed for e.g. the <code>imaps</code> and <code>pop3s</code> ports.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>All listeners with <code>ssl=yes</code> will be removed if the global <code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>\nsetting is <code>no</code>.</p>\n<p>Regardless of the value for listener's ssl setting, some services will still\ntry to initialize encryption if the global <code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code> is <code>yes</code>. This is\nfor example done to accommodate STARTTLS commands for IMAP/SUBMISSION/LMTP\nprotocols. In other words, SSL is truly disabled only when the global\n<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code> is <code>no</code>.</p>\n</div>\n<p>Note: Do not confuse this with the <code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code> setting. When used as\n<code>inet_listener { ssl }</code>, it expands to this <code>inet_listener_ssl</code> setting.</p>\n"
  },
  "inet_listener_haproxy": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>If <code>yes</code>, this listener is configured for use with HAProxy. It expects a\nProxy Protocol header right after accepting the connection. Connections are\naborted immediately if this protocol is violated.</p>\n"
  },
  "info_log_path": {
    "default": "<code><a href=\"/main/core/summaries/settings.html#log_path\">log_path</a></code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The log file to use for informational messages.</p>\n"
  },
  "instance_name": {
    "default": "<code>dovecot</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>For multi-instance setups, supply the unique name of this Dovecot instance.</p>\n<p>This simplifies use of commands such as doveadm: rather than using <code>-c</code>\nand the config path, you can use the <code>-i</code> flag with the relevant instance\nname.</p>\n"
  },
  "last_valid_gid": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#first_valid_gid\">first_valid_gid</a></code>"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>unlimited</code>",
    "text": "<p>This setting and <code><a href=\"/main/core/summaries/settings.html#first_valid_gid\">first_valid_gid</a></code> specify the valid GID\nrange for users.</p>\n<p>A user whose primary GID is outside this range is not allowed to log in.</p>\n<p>If the user belongs to any supplementary groups, the corresponding IDs are\nnot set.</p>\n"
  },
  "last_valid_uid": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#first_valid_uid\">first_valid_uid</a></code>"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>unlimited</code>",
    "text": "<p>This setting and <code><a href=\"/main/core/summaries/settings.html#first_valid_uid\">first_valid_uid</a></code> specify the valid UID\nrange for users.</p>\n<p>A user whose UID is outside this range is not allowed to log in.</p>\n"
  },
  "lda_mailbox_autocreate": {
    "default": "<code>no</code>",
    "tags": [
      "lda"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Should LDA create a nonexistent mailbox automatically when attempting to\nsave a mail message?</p>\n"
  },
  "lda_mailbox_autosubscribe": {
    "default": "<code>no</code>",
    "tags": [
      "lda"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Should automatically created mailboxes be subscribed to?</p>\n"
  },
  "lda_original_recipient_header": {
    "tags": [
      "lda"
    ],
    "default": "<code>&lt;lda/lmtp specific&gt;</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The header from which the original recipient address (used in the SMTP RCPT\nTO: address) is obtained if that address is not available elsewhere.</p>\n<p>With <a href=\"/main/core/config/delivery/lda.html\">LDA</a> the default is based on the username in <code>-d</code> parameter.\nWith <a href=\"/main/core/config/delivery/lmtp.html\">LMTP Server</a> the default is the same as RCPT TO.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>lda_original_recipient_header = X-Original-To</span></span></code></pre>\n</div>"
  },
  "libexec_dir": {
    "default": "<code>/usr/libexec/dovecot</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>The directory from which you execute commands via doveadm-exec.</p>\n"
  },
  "listen": {
    "default": "<code>*, ::</code>",
    "values": [
      {
        "label": "IP Address(es)",
        "url": "<a href=\"/main/core/settings/types.html#ip-addresses\">IP addresses</a>"
      }
    ],
    "text": "<p>A comma-separated list of IP addresses or hostnames on which external network\nconnections will be handled.</p>\n<p><code>*</code> listens at all IPv4 interfaces, and <code>::</code> listens at all IPv6\ninterfaces.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>listen = 127.0.0.1, 192.168.0.1</span></span></code></pre>\n</div><p>This setting can be used also inside an <code><a href=\"/main/core/summaries/settings.html#inet_listener\">inet_listener</a></code> to override\nthe listener address, e.g.:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>service imap-login {</span></span>\n<span class=\"line\"><span>  inet_listener imap {</span></span>\n<span class=\"line\"><span>    listen = 192.168.0.1</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "lmtp_add_received_header": {
    "default": "<code>yes</code>",
    "tags": [
      "lmtp"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Controls if &quot;Received:&quot; header should be added to delivered mails.</p>\n"
  },
  "lmtp_client_workarounds": {
    "tags": [
      "lmtp"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>Configures the list of active workarounds for LMTP client bugs. Supported\nworkaround identifiers are:</p>\n<dl>\n<dt><code>whitespace-before-path</code></dt>\n<dd>Allow one or more spaces or tabs between 'MAIL FROM:' and path and\nbetween 'RCPT TO:' and path.</dd>\n<dt><code>mailbox-for-path</code></dt>\n<dd>Allow using bare Mailbox syntax (i.e., without &lt;...&gt;) instead of full\npath syntax.</dd>\n</dl>\n"
  },
  "lmtp_hdr_delivery_address": {
    "default": "<code>final</code>",
    "tags": [
      "lmtp"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "alternative",
      "final",
      "none"
    ],
    "text": "<p>The recipient address to use for the &quot;Delivered-To:&quot; header and the\nrelevant &quot;Received:&quot; header.</p>\n<p>Options:</p>\n<dl>\n<dt><code>alternative</code></dt>\n<dd>Address from the RCPT TO OCRPT parameter</dd>\n<dt><code>final</code></dt>\n<dd>Address from the RCPT TO command</dd>\n<dt><code>none</code></dt>\n<dd>No address (always used for messages with multiple recipients)</dd>\n</dl>\n"
  },
  "lmtp_proxy": {
    "default": "<code>no</code>",
    "seealso": [
      "<a href=\"/main/core/config/proxy/overview.html\">proxy passdb</a>"
    ],
    "tags": [
      "lmtp"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If yes, LMTP sessions perform a passdb lookup to see if the user should be\nproxied. The user is proxied only if the <code>proxy</code> extra field is returned.\nThe proxy destination is determined via returned passdb extra fields.</p>\n<p>This setting is required with Palomar cluster configuration even in backends,\nbecause the backend may still ask proxy to reject the connection and proxy\nthe user to another backend.</p>\n"
  },
  "lmtp_proxy_rawlog_dir": {
    "seealso": [
      "<a href=\"/main/core/admin/rawlog.html\">rawlog</a>"
    ],
    "tags": [
      "lmtp"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Directory location to store raw LMTP proxy protocol traffic logs.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-service-user-variables\">Mail service user variables</a></code> can be used. However, because LMTP session\nstarts without a user, all user-specific variables expand to empty.</p>\n"
  },
  "lmtp_rawlog_dir": {
    "seealso": [
      "<a href=\"/main/core/admin/rawlog.html\">rawlog</a>"
    ],
    "tags": [
      "lmtp"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Directory location to store raw LMTP protocol traffic logs.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-service-user-variables\">Mail service user variables</a></code> can be used. However, because LMTP session\nstarts without a user, all user-specific variables expand to empty.</p>\n"
  },
  "lmtp_rcpt_check_quota": {
    "default": "<code>no</code>",
    "tags": [
      "lmtp"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Should quota be verified before a reply to RCPT TO is issued?</p>\n<p>If active, this creates a small amount of extra overhead so it is disabled\nby default.</p>\n"
  },
  "lmtp_save_to_detail_mailbox": {
    "default": "<code>no</code>",
    "tags": [
      "lmtp"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If the recipient address includes a detail element / role (as in user+detail\nformat), save the message to the detail mailbox.</p>\n"
  },
  "lmtp_user_concurrency_limit": {
    "tags": [
      "lmtp",
      "user_concurrency_limits"
    ],
    "changed": [
      {
        "text": "<p>Changed from <code>unlimited</code> to <code>10</code>.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>10</code>",
    "text": "<p>Limit the number of concurrent deliveries to a single user to this maximum\nvalue.</p>\n<p>It is useful if one user is receiving numerous mail messages and thereby\ncausing delays to other deliveries.</p>\n<p>To prevent limiting concurrent user deliveries set this to <code>unlimited</code>.</p>\n"
  },
  "lmtp_verbose_replies": {
    "default": "<code>no</code>",
    "tags": [
      "lmtp"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>This setting makes the replies returned to the client much more verbose.\nCurrently, this only applies when the LMTP proxy is involved, for which\ne.g. backend connection errors are returned in full detail.</p>\n<p>Normally, these errors are replaced by a more generic error message to\nprevent leaking system details to the clients (e.g. IP addresses and ports).\nIt is therefore not recommended to enable this setting beyond troubleshooting\nefforts.</p>\n"
  },
  "lock_method": {
    "default": "<code>fcntl</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "fcntl",
      "flock",
      "dotlock"
    ],
    "text": "<p>Specify the locking method to use for index files.</p>\n<p>Options:</p>\n<dl>\n<dt><code>dotlock</code></dt>\n<dd><code>mailboxname.lock</code> file created by almost all software when writing to\nmboxes. This grants the writer an exclusive lock over the mbox, so it's\nusually not used while reading the mbox so that other processes can also\nread it at the same time. So while using a dotlock typically prevents\nactual mailbox corruption, it doesn't protect against read errors if\nmailbox is modified while a process is reading.</dd>\n<dt><code>flock</code></dt>\n<dd>flock() system call is quite commonly used for both read and write\nlocking. The read lock allows multiple processes to obtain a read lock\nfor the mbox, so it works well for reading as well. The one downside to\nit is that it doesn't work if mailboxes are stored in NFS.</dd>\n<dt><code>fcntl</code></dt>\n<dd>Very similar to flock, also commonly used by software. In some systems\nthis fcntl() system call is compatible with flock(), but in other\nsystems it's not, so you shouldn't rely on it. fcntl works with NFS if\nyou're using lockd daemon in both NFS server and client.</dd>\n</dl>\n"
  },
  "log_core_filter": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Crash after logging a matching event. The syntax of the filter is described\nin <a href=\"/main/core/config/events/filter.html#global-filter-syntax\">Global Metric Filters</a>.</p>\n<p>For example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>log_core_filter = category=error</span></span></code></pre>\n</div><p>will crash any time an error is logged, which can be useful for debugging.</p>\n"
  },
  "log_debug": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Filter to specify what debug logging to enable.  The syntax of the filter is\ndescribed in <a href=\"/main/core/config/events/filter.html#global-filter-syntax\">Global Metric Filters</a>.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>This will eventually replace <code><a href=\"/main/core/summaries/settings.html#mail_debug\">mail_debug</a></code> and\n<code><a href=\"/main/core/summaries/settings.html#auth_debug\">auth_debug</a></code> settings.</p>\n</div>\n"
  },
  "log_path": {
    "default": "<code>syslog</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#debug_log_path\">debug_log_path</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#info_log_path\">info_log_path</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Specify the log file to use for error messages.</p>\n<p>Options:</p>\n<ul>\n<li><code>syslog</code>: Log to syslog</li>\n<li><code>/dev/stderr</code>: Log to stderr</li>\n</ul>\n<p>If you don't want to use syslog, or if you just can't find the Dovecot's\nerror logs, you can make Dovecot log elsewhere as well:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>log_path = /var/log/dovecot.log</span></span></code></pre>\n</div><p>If you don't want errors, info, and debug logs all in one file, specify\n<code><a href=\"/main/core/summaries/settings.html#info_log_path\">info_log_path</a></code> or <code><a href=\"/main/core/summaries/settings.html#debug_log_path\">debug_log_path</a></code> as well:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>log_path = /var/log/dovecot.log</span></span>\n<span class=\"line\"><span>info_log_path = /var/log/dovecot-info.log</span></span></code></pre>\n</div>"
  },
  "log_timestamp": {
    "default": "<code>%b %d %H:%M:%S</code>",
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "text": "<p>The prefix for each line written to the log file.</p>\n<p><code>%</code> variables are in strftime(3) format.</p>\n"
  },
  "login_socket_path": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "text": "<p>Default socket path for all services' login processes. Can be overridden by\npassing a parameter to the login executable.</p>\n<p>This must be set to <code>cluster</code> in Palomar cluster configurations, for\nboth proxies and backends.</p>\n"
  },
  "login_greeting": {
    "default": "<code>Dovecot ready.</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>The greeting message displayed to clients.</p>\n<p>Variables allowed:</p>\n<ul>\n<li>LMTP: <code><a href=\"/main/core/settings/variables.html#mail-service-user-variables\">Mail service user variables</a></code></li>\n<li>Other Protocols: <code><a href=\"/main/core/settings/variables.html#login-variables\">Login variables</a></code></li>\n</ul>\n"
  },
  "login_log_format": {
    "default": "<code>%{message}: %{elements}</code>",
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "text": "<p>The formatting of login log messages.</p>\n<p>Variables allowed (in addition to <code><a href=\"/main/core/settings/variables.html#global-variables\">Global variables</a></code>):</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Variable Name</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>%{elements}</code></td>\n<td>A <code><a href=\"/main/core/summaries/settings.html#login_log_format_elements\">login_log_format_elements</a></code> string</td>\n</tr>\n<tr>\n<td><code>%{message}</code></td>\n<td>The log data</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "login_log_format_elements": {
    "default": "<code>user=&lt;%{user}&gt; method=%{mechanism} rip=%{remote_ip} lip=%{local_ip} mpid=%{mail_pid} %{secured} session=&lt;%{session}&gt;</code>",
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "text": "<p>A space-separated list of elements of the login log formatting.</p>\n<p>Elements that have a non-empty value are joined together to form a\ncomma-separated string.</p>\n<p><code><a href=\"/main/core/settings/variables.html#login-variables\">Login variables</a></code> can be used.</p>\n"
  },
  "login_plugin_dir": {
    "default": "<code>/usr/lib64/dovecot/login</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Location of the login plugin directory.</p>\n"
  },
  "login_plugins": {
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>List of plugins to load for IMAP and POP3 login processes.</p>\n"
  },
  "login_proxy_max_disconnect_delay": {
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": "<code>30 secs</code>",
    "text": "<p>Specify the delayed disconnection interval of clients when there is a\nserver mass-disconnect.</p>\n<p>For prevention of load spikes when a backend server fails or is restarted,\ndisconnection is spread over the amount of time indicated.</p>\n<p><code>0</code> disables the delay.</p>\n"
  },
  "login_proxy_max_reconnects": {
    "default": "<code>3</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>How many times login proxy will attempt to reconnect to destination server\non connection failures (3 reconnects = total 4 connection attempts).</p>\n<p>Reconnecting is done for most types of failures, except for regular\nauthentication failures.</p>\n<p>There is a 1 second delay between each reconnection attempt.</p>\n<p>If <code><a href=\"/main/core/summaries/settings.html#login_proxy_timeout\">login_proxy_timeout</a></code> is reached, further reconnects\naren't attempted.</p>\n"
  },
  "login_proxy_rawlog_dir": {
    "seealso": [
      "<a href=\"/main/core/admin/rawlog.html\">rawlog</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Login processes write rawlogs for proxied connections to this directory for\ndebugging purposes. Note that login processes are usually chrooted, so the\ndirectory is relative to <code>$base_dir/login/</code>.</p>\n<p><span class=\"VPBadge info\">Changed: 3.2.0</span> You can use <a href=\"/main/core/settings/variables.html#login-variables\">Login Variables</a> with this setting.</p>\n"
  },
  "login_proxy_timeout": {
    "default": "<code>30 secs</code>",
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "text": "<p>Timeout for login proxy failures.</p>\n<p>The timeout covers everything from the time connection is started until a\nsuccessful login reply is received.</p>\n<p>This can be overwritten by <a href=\"/main/core/config/proxy/overview.html\">proxy passdb</a> passdb extra field.</p>\n<p>This setting applies only to proxying via login processes, not to lmtp or\ndoveadm processes.</p>\n"
  },
  "login_source_ips": {
    "values": [
      {
        "label": "IP Address(es)",
        "url": "<a href=\"/main/core/settings/types.html#ip-addresses\">IP addresses</a>"
      }
    ],
    "text": "<p>Value Format: List of trusted network ranges, see\n<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>.</p>\n<p>A list of hosts / IP addresses that are used in a round-robin manner for\nthe source IP address when the proxy creates TCP connections.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>login_source_ips {</span></span>\n<span class=\"line\"><span>  proxy-sources.example.com = yes</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "login_trusted_networks": {
    "values": [
      {
        "label": "IP Address(es)",
        "url": "<a href=\"/main/core/settings/types.html#ip-addresses\">IP addresses</a>"
      }
    ],
    "text": "<p>Value Format: List of trusted network ranges, see\n<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>.</p>\n<p>This setting is used for a few different purposes, but most importantly it\nallows the client connection to tell the server what the original client's\nIP address was. This original client IP address is then used for logging\nand authentication checks.</p>\n<p>Client connections from trusted networks are also treated as secured unless\n<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl = required</a></code>. Plaintext authentication is always allowed for\n<a href=\"/main/core/config/ssl.html#secured-connections\">secured connections</a> (<code><a href=\"/main/core/summaries/settings.html#auth_allow_cleartext\">auth_allow_cleartext</a></code> is ignored).</p>\n<p>Localhost connections are secured by default, but they are not\ntrusted by default. If you want localhost to be trusted, it needs to be\nincluded in this setting.</p>\n<p>The details of how this setting works depends on the used protocol:</p>\n<dl>\n<dt><strong>IMAP</strong></dt>\n<dd>\n<p>ID command can be used to override:</p>\n<ul>\n<li>Session ID</li>\n<li>Client IP and port (<code>%{remote_ip}</code>, <code>%{remote_port}</code>)</li>\n<li>Server IP and port (<code>%{local_ip}</code>, <code>%{local_port}</code>)</li>\n</ul>\n<p><code>forward_*</code> fields can be sent to auth process's passdb lookup</p>\n<p>The trust is always checked against the connecting IP address.\nExcept if HAProxy is used, then the original client IP address is used.</p>\n</dd>\n<dt><strong>POP3</strong></dt>\n<dd>\n<p>XCLIENT command can be used to override:</p>\n<ul>\n<li>Session ID</li>\n<li>Client IP and port (<code>%{remote_ip}</code>, <code>%{remote_port}</code>)</li>\n<li><span class=\"VPBadge tip\">Added: 3.2.0</span> Server IP and port (<code>%{local_ip}</code>, <code>%{local_port}</code>)</li>\n</ul>\n<p><code>forward_*</code> fields can be sent to auth process's passdb lookup</p>\n<p>The trust is always checked against the connecting IP address.\nExcept if HAProxy is used, then the original client IP address is used.</p>\n</dd>\n<dt><strong>ManageSieve</strong></dt>\n<dd>\n<p>XCLIENT command can be used to override:</p>\n<ul>\n<li>Session ID</li>\n<li>Client IP and port (<code>%{remote_ip}</code>, <code>%{remote_port}</code>)</li>\n<li><span class=\"VPBadge tip\">Added: 3.2.0</span> Server IP and port (<code>%{local_ip}</code>, <code>%{local_port}</code>)</li>\n</ul>\n<p>The trust is always checked against the connecting IP address.\nExcept if HAProxy is used, then the original client IP address is used.</p>\n</dd>\n<dt><strong>Submission</strong></dt>\n<dd>\n<p>XCLIENT command can be used to override:</p>\n<ul>\n<li>Session ID</li>\n<li>Client IP and port (<code>%{remote_ip}</code>, <code>%{remote_port}</code>)</li>\n<li>HELO - Overrides what the client sent earlier in the EHLO command</li>\n<li>LOGIN - Currently unused</li>\n<li>PROTO - Currently unused</li>\n<li><span class=\"VPBadge tip\">Added: 3.2.0</span> Server IP and port (<code>%{local_ip}</code>, <code>%{local_port}</code>)</li>\n</ul>\n<p><code>forward_*</code> fields can be sent to auth process's passdb lookup</p>\n<p>The trust is always checked against the connecting IP address.\nExcept if HAProxy is used, then the original client IP address is used.</p>\n</dd>\n<dt><strong>LMTP</strong></dt>\n<dd>\n<p>XCLIENT command can be used to override:</p>\n<ul>\n<li>Session ID</li>\n<li>Client IP and port (<code>%{remote_ip}</code>, <code>%{remote_port}</code>)</li>\n<li>HELO - Overrides what the client sent earlier in the LHLO command</li>\n<li>LOGIN - Currently unused</li>\n<li>PROTO - Currently unused</li>\n<li>TIMEOUT (overrides <code><a href=\"/main/core/summaries/settings.html#mail_max_lock_timeout\">mail_max_lock_timeout</a></code>)</li>\n<li><span class=\"VPBadge tip\">Added: 3.2.0</span> Server IP and port (<code>%{local_ip}</code>, <code>%{local_port}</code>)</li>\n</ul>\n<p>The trust is always checked against the connecting IP address.\nExcept if HAProxy is used, then the original client IP address is used.</p>\n</dd>\n</dl>\n"
  },
  "mail_access_groups": {
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "default": "<code><a href=\"/main/core/summaries/settings.html#default_internal_group\">default_internal_group</a></code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_privileged_group\">mail_privileged_group</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#service_extra_groups\">service_extra_groups</a></code>"
    ],
    "changed": [
      {
        "text": "<p>Changed from empty to <code><a href=\"/main/core/summaries/settings.html#default_internal_group\">default_internal_group</a></code>.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.2.0</span>"
      }
    ],
    "text": "<p>Supplementary groups that are granted access for mail processes (imap, pop3,\nlmtp, etc.) The default is to include <code><a href=\"/main/core/summaries/settings.html#default_internal_group\">default_internal_group</a></code> to\nallow UNIX socket access to various internal Dovecot services. For proper\nsecurity, there should be no regular files or directories writable for the\n<code><a href=\"/main/core/summaries/settings.html#default_internal_group\">default_internal_group</a></code>.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>It may be dangerous to use access groups if (untrusted) users can create\nsymlinks to any paths the mail processes access.</p>\n<p>For example if using <code><a href=\"/main/core/summaries/settings.html#mail_access_groups\">mail_access_groups = mail</a></code>:</p>\n<ul>\n<li><code>ln -s /var/mail ~/mail/var</code> could allow a user to delete others'\nmailboxes, or</li>\n<li><code>ln -s /secret/shared/box ~/mail/mybox</code> would allow reading others' mail.</li>\n</ul>\n</div>\n"
  },
  "mail_always_cache_fields": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_cache_fields\">mail_cache_fields</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#mail_never_cache_fields\">mail_never_cache_fields</a></code>"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>The fields specified here are always added to cache when saving mails, even\nif the client never accesses these fields.</p>\n<p>See <a href=\"/main/core/config/mail_cache.html\">mail cache configuration</a> for details and for the list of fields.</p>\n",
    "default": "<code>\nflags hdr.date hdr.subject hdr.from hdr.sender hdr.reply-to hdr.to hdr.cc hdr.bcc hdr.in-reply-to hdr.message-id date.received size.virtual imap.bodystructure mime.parts hdr.references hdr.importance hdr.x-priority hdr.x-open-xchange-share-url pop3.uidl pop3.order</code>",
    "changed": [
      {
        "text": "<p>The default fields were changed. They used to be empty.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.1.0</span>"
      }
    ]
  },
  "mail_attachment_detection_options": {
    "changed": [
      {
        "text": "<p>The default was set.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.2.0</span>"
      },
      {
        "text": "<p>The Maildir default was reverted to empty.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.2.0</span>"
      }
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "default": "<code>\n- mbox, imapc, maildir: &lt;empty&gt;<br /> \n- others: add-flags content-type=!application/signature</code>",
    "text": "<p>Settings to control adding <code>$HasAttachment</code> or <code>$HasNoAttachment</code>\nkeywords. By default, all MIME parts with <code>Content-Disposition=attachment</code>\nor inlines with filename parameter are considered attachments.</p>\n<p>To enable this feature, this setting needs at least one option specified.\nMultiple options can be added in a space-separated list.</p>\n<p>Options:</p>\n<dl>\n<dt><code>add-flags</code></dt>\n<dd>Attachments are detected and marked during save. Detection is done also\nduring fetch if it can be done without extra disk IO and with minimal CPU\ncost. This means that either both <code>mime.parts</code> and\n<code>imap.bodystructure</code> has to be in cache already, or if mail body is\nopened in any case.</dd>\n<dt><code>add-flags no-flags-on-fetch</code></dt>\n<dd>Flags are added during save, but not during fetch. This option will\nlikely be removed in a later release.</dd>\n<dt><code>content-type=&lt;type|!type&gt;</code></dt>\n<dd>Include or exclude given content type. Including will only negate an\nexclusion (e.g. <code>content-type=!foo/* content-type=foo/bar</code>).</dd>\n<dt><code>exclude-inlined</code></dt>\n<dd>Do not consider any attachment with disposition inlined.</dd>\n</dl>\n"
  },
  "mail_ext_attachment_path": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The directory in which to store mail attachments.</p>\n<p>With <a href=\"/main/core/config/mailbox_formats/dbox.html#single-dbox-sdbox\">sdbox</a> and <a href=\"/main/core/config/mailbox_formats/dbox.html#multi-dbox-mdbox\">mdbox</a>, mail attachments can be saved to\nexternal files, which also allows single-instance storage of them.</p>\n<p>If no value is specified, attachment saving to external files is disabled.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> and <code>~/</code> can be used.</p>\n"
  },
  "mail_ext_attachment": {
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_driver\">fs_driver</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#mail_ext_attachment_path\">mail_ext_attachment_path</a></code>"
    ],
    "text": "<p>Named filter for initializing <a href=\"/main/core/config/fs.html\">FS Driver</a> for external attachments.</p>\n<p>Commonly used options:</p>\n<dl>\n<dt><code>posix</code></dt>\n<dd>\n<p>No single-instance storage (SIS) done (this option might simplify the\nfilesystem's own de-duplication operations).</p>\n</dd>\n<dt><code>sis</code></dt>\n<dd>\n<p>SIS with immediate byte-by-byte comparison during saving.</p>\n<p>SIS is deprecated and writing of SIS files is disabled. Reading is\nsupported for now, any missing SIS attachments are replaced with files\nfilled with spaces.</p>\n</dd>\n<dt><code>sis-queue</code></dt>\n<dd>\n<p>SIS with delayed comparison and de-duplication.</p>\n<p><span class=\"VPBadge info\">Changed: 3.1.0</span> SIS is deprecated\nand writing SIS files is disabled. Reading is supported for now. Any\nmissing SIS attachments are replaced with files filled with spaces.</p>\n</dd>\n</dl>\n",
    "no_default": true
  },
  "mail_ext_attachment_hash": {
    "default": "<code>%{sha1}</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_ext_attachment_path\">mail_ext_attachment_path</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "%{md4}",
      "%{md5}",
      "%{sha1}",
      "%{sha256}",
      "%{sha512}",
      "%{size}"
    ],
    "advanced": true,
    "text": "<p>The hash format to use in attachment filenames when saving attachments\nexternally.</p>\n<p>Variables and additional text can be included in this string.</p>\n<p>The syntax allows truncation of any variable. For example <code>%{sha256:80}</code>\nwill return only the first 80 bits of the SHA256 output.</p>\n"
  },
  "mail_ext_attachment_min_size": {
    "default": "<code>128k</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_ext_attachment_path\">mail_ext_attachment_path</a></code>"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "text": "<p>Attachments below this size will not be saved externally.</p>\n"
  },
  "mail_attribute": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#imap_metadata\">imap_metadata</a></code>"
    ],
    "tags": [
      "metadata"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Named filter for initializing <a href=\"/main/core/config/dict.html\">dict driver</a> for server and mailbox\nattributes (<code>key=value</code>).</p>\n<p>This is used by the URLAUTH and METADATA extensions, as well as various other\nfeatures.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>mail_attribute {</span></span>\n<span class=\"line\"><span>  dict file {</span></span>\n<span class=\"line\"><span>    path = %{home}/dovecot-attributes</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "no_default": true
  },
  "mail_cache_fields": {
    "changed": [
      {
        "text": "<p>The default fields were changed. They used to be just &quot;flags&quot;.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.1.0</span>"
      }
    ],
    "default": "<code>\nflags hdr.date hdr.subject hdr.from hdr.sender hdr.reply-to hdr.to hdr.cc hdr.bcc hdr.in-reply-to hdr.message-id date.received size.virtual imap.bodystructure mime.parts hdr.references hdr.importance hdr.x-priority hdr.x-open-xchange-share-url pop3.uidl pop3.order</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_always_cache_fields\">mail_always_cache_fields</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#mail_never_cache_fields\">mail_never_cache_fields</a></code>"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>The default list of fields that are added to cache if no other caching\ndecisions exist yet. This setting is used only when creating the initial\nINBOX for the user. Other folders get their defaults from the INBOX.</p>\n<p>See <a href=\"/main/core/config/mail_cache.html\">mail cache configuration</a> for details and for the list of fields.</p>\n"
  },
  "mail_chroot": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The default chroot directory for mail processes.</p>\n<p>This chroots all users globally into the same directory.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-service-user-variables\">Mail service user variables</a></code> can be used.</p>\n"
  },
  "mail_debug": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>This setting adjusts log verbosity. It enables mail-process debugging. This\ncan help you figure out the reason if Dovecot isn't finding certain mail\nmessages.</p>\n"
  },
  "mail_fsync": {
    "default": "<code>never for obox; optimized for others</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "always",
      "optimized",
      "never"
    ],
    "text": "<p>Specify when to use fsync() or fdatasync() calls.</p>\n<p>Using fsync waits until the data is written to disk before it continues,\nwhich is used to prevent corruption or data loss in case of server crashes.</p>\n<p>This setting applies to mail files and index files on the filesystem. This\nsetting doesn't apply to object storage operations.</p>\n<p>Options:</p>\n<dl>\n<dt><code>always</code></dt>\n<dd>\n<p>Use fsync after all disk writes.</p>\n<p>Recommended for NFS to make sure there aren't any delayed write()s.</p>\n</dd>\n<dt><code>optimized</code></dt>\n<dd>\n<p>Use fsync after important disk writes.</p>\n<p>For example cache file writes aren't fsynced, because they can be\nregenerated if necessary.</p>\n</dd>\n<dt><code>never</code></dt>\n<dd>\n<p>Never fsync any disk writes.</p>\n<p>This provides the best performance, but risks losing recently saved emails\nin case of a crash with most mailbox formats.</p>\n</dd>\n</dl>\n"
  },
  "mail_full_filesystem_access": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mailbox_list_validate_fs_names\">mailbox_list_validate_fs_names</a></code>"
    ],
    "text": "<p>Allow full filesystem access to clients?</p>\n<p>If enabled, no access checks are performed other than what the operating\nsystem does for the active UID/GID. This also disables the\n<code><a href=\"/main/core/summaries/settings.html#mailbox_list_validate_fs_names\">mailbox_list_validate_fs_names</a></code> setting.</p>\n<p>This setting works with both <a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a> and <a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a>, allowing you\nto prefix mailbox names with <code>/path/</code> or <code>~user/</code> indicators.</p>\n"
  },
  "mail_gid": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_uid\">mail_uid</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      },
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>vmail</code>",
    "text": "<p>The system group ID used for accessing mail messages.</p>\n<p>Can be either a numeric ID or a group name.</p>\n<p>This can be overridden via the <code>gid</code> <a href=\"/main/core/config/auth/userdb.html#fields\">userdb field</a>.</p>\n"
  },
  "mail_home": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_path\">mail_path</a></code>",
      "<a href=\"/main/core/config/auth/users/virtual.html#home-directories\">Home Directories for Virtual Users</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>User's home directory. This is used as the root for some of the user-specific\nfiles and directories. The <code>%{home}</code> variable expands to this value. Also\nsome path settings expand <code>~/</code> to this value.</p>\n<p>There are various possible ways of specifying this parameter and\n<code><a href=\"/main/core/summaries/settings.html#mail_path\">mail_path</a></code>.</p>\n<p>The following example is one option when home is in <code>/var/vmail/domain/user/</code>\nand mails are in <code>/var/vmail/domain/user/mail/</code>:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>mail_home = /var/vmail/%{user | domain}/%{user | username}</span></span>\n<span class=\"line\"><span>mail_path = ~/mail</span></span></code></pre>\n</div><p><code><a href=\"/main/core/settings/variables.html#mail-service-user-variables\">Mail service user variables</a></code> can be used.</p>\n"
  },
  "mail_log_prefix": {
    "default": "<code>%{service}(%{user})&lt;%{process:pid}&gt;&lt;%{session}&gt;: </code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>You can specify a log prefix for mail processes here.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-service-user-variables\">Mail service user variables</a></code> can be used.</p>\n"
  },
  "mail_max_keyword_length": {
    "default": "<code>50</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>The maximum length allowed for a mail keyword name.</p>\n<p>Compliance is enforced only during attempts to create new keywords.</p>\n"
  },
  "mail_max_lock_timeout": {
    "default": "<code>0</code>",
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>This value is used as a timeout for tempfailing mail connections.  It\ncan be set globally, for application to all Dovecot services, but\nis normally better to set it in only certain protocol blocks.  You\nmay wish to set a value for this for LMTP and LDA while leaving it at\nthe global default of <code>0</code> for IMAP and POP3 connections, which\ntolerate tempfailing less well.</p>\n"
  },
  "mail_max_userip_connections": {
    "default": "<code>10</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "tags": [
      "user_concurrency_limits"
    ],
    "text": "<p>The maximum number of IMAP connections allowed for a user from each IP\naddress.</p>\n<p>This setting is checked only by backends, not proxies.</p>\n<p>Note that for this to work, any username changes must be done already by\npassdb lookup (not by userdb lookup).</p>\n<p>Unique users are identified via case-sensitive comparison.</p>\n"
  },
  "mail_never_cache_fields": {
    "default": "<code>imap.envelope</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_always_cache_fields\">mail_always_cache_fields</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#mail_cache_fields\">mail_cache_fields</a></code>"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>List of fields that should never be cached.</p>\n<p>This should generally never include anything other than <code>imap.envelope</code>,\nwhich isn't needed because it can be generated from the cached header\nfields.</p>\n<p>See <a href=\"/main/core/config/mail_cache.html\">mail cache configuration</a> for details and for the list of fields.</p>\n"
  },
  "mail_nfs_index": {
    "default": "<code>no</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_nfs_storage\">mail_nfs_storage</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#mail_fsync\">mail_fsync</a></code>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>This setting attempts to flush NFS caches when accessing index files. The\nintention was that it would allow accessing the same user's index files in\nmultiple servers at the same time. However, this couldn't be made to work\nperfectly due to the way Linux and BSD kernels work internally. The setting\nexists for now, but it is not a supported way of running Dovecot.</p>\n<p>When using this setting, be sure also to use <code><a href=\"/main/core/summaries/settings.html#mmap_disable\">mmap_disable = yes</a></code>\nand <code><a href=\"/main/core/summaries/settings.html#mail_fsync\">mail_fsync = optimized</a></code>.</p>\n"
  },
  "mail_nfs_storage": {
    "default": "<code>no</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_nfs_index\">mail_nfs_index</a></code>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>This setting attempts to flush NFS caches when accessing mail storage. The\nintention was that it would allow accessing the same user's mails in\nmultiple servers at the same time. However, this couldn't be made to work\nperfectly due to the way Linux and BSD kernels work internally. The setting\nexists for now, but it is not a supported way of running Dovecot.</p>\n"
  },
  "mail_plugin_dir": {
    "default": "<code>/usr/lib64/dovecot</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_plugins\">mail_plugins</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The directory in which to search for Dovecot mail plugins.</p>\n"
  },
  "mail_plugins": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_plugin_dir\">mail_plugin_dir</a></code>"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>A list of mail plugins to load.</p>\n"
  },
  "mail_prefetch_count": {
    "default": "<code>10 for obox; 0 for others</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>The number of messages to try to prefetch whenever possible. <code>0</code> means that\nno prefetching is done. Depending on the (remote) storage latency, this may\nsignificantly speed up performance when reading many mails. The exact behavior\ndepends on the mailbox format:</p>\n<ul>\n<li>\n<p><a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a>, <a href=\"/main/core/config/mailbox_formats/dbox.html#multi-dbox-mdbox\">mdbox</a>: No effect in behavior.</p>\n</li>\n<li>\n<p><a href=\"/main/core/config/mailbox_formats/dbox.html#single-dbox-sdbox\">sdbox</a>, <a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a>: Call\n<code>posix_fadvise(POSIX_FADV_WILLNEED)</code> on mail files to instruct kernel to\nread the whole files into memory.</p>\n</li>\n<li>\n<p><a href=\"/main/core/config/mailbox_formats/imapc.html\">imapc</a>: Combine multiple mail reads into the same remote imapc FETCH\ncommand. For example with <code><a href=\"/main/core/summaries/settings.html#mail_prefetch_count\">mail_prefetch_count = 0</a></code> reading two mails\nwould result in <code>FETCH 1 BODY.PEEK[]</code> and <code>FETCH 2 BODY.PEEK[]</code>\ncommands, while with <code><a href=\"/main/core/summaries/settings.html#mail_prefetch_count\">mail_prefetch_count = 1</a></code> they would be\ncombined into a single <code>FETCH 1:2 BODY.PEEK[]</code> command. The downside is\nthat each mail uses a file descriptor and disk space in\n<code><a href=\"/main/core/summaries/settings.html#mail_temp_dir\">mail_temp_dir</a></code>. A good value is likely between <code>10..100</code>.</p>\n</li>\n<li>\n<p>obox: Number of mails to download concurrently from object storage.</p>\n</li>\n</ul>\n"
  },
  "mail_privileged_group": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_access_groups\">mail_access_groups</a></code>"
    ],
    "text": "<p>This group is enabled temporarily for privileged operations.  Currently,\nthis is used only with the <a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox format</a> with INBOX when either its\ninitial creation or dotlocking fails.</p>\n<p>Typically, this is set to <code>mail</code> to give access to <code>/var/mail</code> when using\nthe <a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox format</a>.</p>\n<p>You can give Dovecot access to mail group by setting\n<code>mail_privileged_group = mail</code>.</p>\n"
  },
  "mail_save_crlf": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Save message with CR+LF line endings?</p>\n<p>Messages are normally saved with LF line endings.</p>\n<p>Enabling this makes saving messages less CPU-intensive, especially with the\nsendfile() system call used in Linux and FreeBSD. However, enabling comes at\nthe cost of slightly increased disk I/O, which could decrease the speed in\nsome deployments.</p>\n"
  },
  "mail_server_admin": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#imap_metadata\">imap_metadata</a></code>"
    ],
    "tags": [
      "metadata"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The method for contacting the server administrator.</p>\n<p>Per the METADATA standard (<a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc5464\">RFC 5464</a>), this value MUST be a URI (e.g., a\nmailto: or tel: URL), but that requirement is not enforced by Dovecot.</p>\n<p>This value is accessible to authenticated users through the\n<code>/shared/admin</code> IMAP METADATA server entry.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>mail_server_admin = mailto:admin@example.com</span></span></code></pre>\n</div>"
  },
  "mail_server_comment": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#imap_metadata\">imap_metadata</a></code>"
    ],
    "tags": [
      "metadata"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>A comment or note that is associated with the server.</p>\n<p>This value is accessible to authenticated users through the\n<code>/shared/comment</code> IMAP METADATA server entry.</p>\n"
  },
  "mail_shared_explicit_inbox": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>This setting determines whether a shared INBOX should be visible as\n&quot;shared/user&quot; or as &quot;shared/user/INBOX&quot; instead.</p>\n"
  },
  "mail_sort_max_read_count": {
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>100 for obox; 0 for others</code>",
    "text": "<p>The number of slow mail accesses an IMAP SORT can perform before it returns\nfailure to the client.</p>\n<p>On failure, the untagged SORT reply is retuned, but it is likely not correct.</p>\n<p>The IMAP reply returned to the client is:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>NO [LIMIT] Requested sort would have taken too long.</span></span></code></pre>\n</div>"
  },
  "mail_temp_dir": {
    "default": "<code>/dev/shm/dovecot</code>",
    "tags": [
      "lda",
      "lmtp"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The directory in which LDA/LMTP will temporarily store incoming message data\nthat is above 128kB in size.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> can be used.</p>\n"
  },
  "mail_temp_scan_interval": {
    "default": "<code>1week</code>",
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>How often Dovecot scans for and deletes stale temporary files. These files\nexist only if Dovecot crashes while saving a message. This is just to make\nsure such temporary files will eventually get deleted to avoid wasting disk\nspace. This scan happens independently for each folder, and it's done at the\ntime the folder is opened.</p>\n<p>In order to prevent load spikes, the actual value of the setting is spread\nincreasing it by 0..30%, based on a hash of the username.</p>\n<p>The scanning is done only for these mailbox formats:</p>\n<ul>\n<li><a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a>: Delete all files having ctime older than 36 hours from\n<code>tmp/</code>. The scan is done if tmp/ directory's atime older than this setting.</li>\n<li><a href=\"/main/core/config/mailbox_formats/dbox.html#single-dbox-sdbox\">sdbox</a>, <a href=\"/main/core/config/mailbox_formats/dbox.html#multi-dbox-mdbox\">mdbox</a>: Delete <code>.temp.*</code> files having ctime older\nthan 36 hours from <code>dbox-Mails/</code>. The scan is done if the\n<code>last_temp_file_scan</code> header field in dovecot.index is older than this\nsetting.</li>\n<li><a href=\"/main/core/config/mailbox_formats/dbox.html#multi-dbox-mdbox\">mdbox</a>: Delete <code>.temp.*</code> files having ctime older than 36 hours\nfrom <code>storage/</code>. The scan is done if storage/ directory's atime is older\nthan this setting.</li>\n</ul>\n<p>A value of <code>0</code> means this scan never occurs.</p>\n"
  },
  "mail_uid": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_gid\">mail_gid</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      },
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>vmail</code>",
    "text": "<p>This setting indicates the system userid used for accessing mail\nmessages.</p>\n<p>Can be either a numeric ID or a username.</p>\n<p>This can be overridden via the <code>uid</code> <a href=\"/main/core/config/auth/userdb.html#fields\">userdb field</a>.</p>\n"
  },
  "mail_utf8_extensions": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If Dovecot has been compiled with --enable-experimental-mail-utf8 configure option,\nthis setting can be used to enable the feature. Settings this to <code>yes</code> will\nenable SMTPUTF8 for LMTP and Submission sessions, and UTF8=ACCEPT for IMAP sessions.</p>\n"
  },
  "mail_vsize_bg_after_count": {
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>unlimited</code>",
    "text": "<p>Controls transitioning mail size determination to the background instead of\nsynchronously during the delivery process.</p>\n<p>After this many messages have been opened, the system allows a background\nindexer-worker process to perform quota calculations in the background.</p>\n<p>This may happen when mail messages do not have their virtual sizes cached.</p>\n<p>When indexing is occurring in the background, explicit quota size queries\nreturn an internal error and mail deliveries are assumed to succeed.</p>\n<p>This setting must not be set to indexer-worker process, or the background\ncalculation isn't finished. The configuration should be like:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>protocol !indexer-worker {</span></span>\n<span class=\"line\"><span>  mail_vsize_bg_after_count = 10</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "mail_driver": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/overview.html#mailbox-formats\">Mailbox Formats</a>",
      "<a href=\"/main/core/config/mail_location.html#mailbox-root-autodetection\">Mailbox Root Autodetection</a>",
      "<code><a href=\"/main/core/summaries/settings.html#mail_path\">mail_path</a></code>"
    ],
    "text": "<p>One of the mailbox formats described at <a href=\"/main/core/config/mailbox_formats/overview.html#mailbox-formats\">Mailbox Formats</a>.</p>\n<p>For an empty value or <code>auto</code>, Dovecot attempts to find the mailboxes\nautomatically.</p>\n"
  },
  "mail_path": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>&lt;specific to mail_driver setting&gt;</code>",
    "seealso": [
      "<a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail User Variables</a>",
      "<a href=\"/main/core/config/auth/users/virtual.html#home-directories\">Home Directories for Virtual Users</a>",
      "<code><a href=\"/main/core/summaries/settings.html#mail_driver\">mail_driver</a></code>"
    ],
    "text": "<p>Path to a directory where the mail is stored. <a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail User Variables</a> are commonly used here.</p>\n<p>Usually the mails should be stored in a sub-directory under the home directory,\nbut not the home directory itself (see\n<a href=\"/main/core/config/auth/users/virtual.html#home-directories\">Home Directories for Virtual Users</a>).</p>\n<p>The path must be absolute, not a relative path. Even if relative paths appear\nto work, this usage is deprecated and will likely stop working at some point.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> and <code>~/</code> can be used.</p>\n"
  },
  "mail_inbox_path": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_home\">mail_home</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#mail_path\">mail_path</a></code>"
    ],
    "text": "<p>Path to the INBOX mailbox. The path doesn't have to be absolute - it is\nrelative to the <code><a href=\"/main/core/summaries/settings.html#mail_path\">mail_path</a></code>.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>If your inbox <em>does not</em> reside in some weird location, you should <em>not</em>\nset this setting to any value.</p>\n<p>Setting it to <code>.</code> or <code>$MAIL_HOME/</code> will just cause problems.</p>\n<p>You almost certainly want to change <code>mail_home</code> or <code>mail_path</code>\nsettings instead.</p>\n</div>\n<p>This is often used with mbox format where INBOX is in <code>/var/mail/</code> while the\nrest of the folders are under the user's home directory.</p>\n<p>This can also be used to specify a different INBOX path with Maildir:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span> mail_driver = maildir</span></span>\n<span class=\"line\"><span> mail_path = ~/Maildir</span></span>\n<span class=\"line\"><span> mail_inbox_path = ~/Maildir/.INBOX</span></span></code></pre>\n</div><p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> and <code>~/</code> can be used.</p>\n"
  },
  "mail_index_path": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>&lt;same as mail_path setting&gt;</code>",
    "seealso": [
      "<a href=\"/main/core/config/mail_location.html#index-files\">Mail Location: Index Files</a>"
    ],
    "text": "<p>Location of <a href=\"/main/core/config/mail_location.html#index-files\">index files</a>.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> and <code>~/</code> can be used.</p>\n"
  },
  "mail_index_private_path": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/shared_mailboxes.html#public-shared-mailboxes\">public shared mailboxes</a>"
    ],
    "text": "<p>The private index files are used with shared mailboxes to provide private\n(per-user) message flags.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> and <code>~/</code> can be used.</p>\n"
  },
  "mail_cache_path": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>&lt;same as mail_index_path setting&gt;</code>",
    "text": "<p>Place <code>dovecot.index.cache</code> files to this directory instead of among the\nother index files. This may be used as an optimization to split most index\nfiles to the fastest (smallest) storage while keeping cache files in a slightly\nslower (larger) storage.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> and <code>~/</code> can be used.</p>\n"
  },
  "mail_control_path": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Location for (mailbox-format specific) control files.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> and <code>~/</code> can be used.</p>\n"
  },
  "mail_alt_path": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/dbox.html#alternate-storage\">dbox alternate storage</a>"
    ],
    "text": "<p>Specifies the <a href=\"/main/core/config/mailbox_formats/dbox.html#alternate-storage\">dbox alternate storage</a> path.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> and <code>~/</code> can be used.</p>\n"
  },
  "mail_alt_check": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>yes</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_alt_path\">mail_alt_path</a></code>"
    ],
    "text": "<p>Whether to perform a sanity check and warn if <code><a href=\"/main/core/summaries/settings.html#mail_alt_path\">mail_alt_path</a></code> changes\nfrom the last access. This can catch accidentally broken configurations before\nusers start reporting missing mails. The downside to this check is some\nadditional disk IO.</p>\n"
  },
  "mailbox_list_layout": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "fs",
      "index",
      "Maildir++"
    ],
    "default": "<code>fs</code>",
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/dbox.html\">dbox</a>",
      "<a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a>",
      "<a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a>",
      "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
    ],
    "text": "<p>Directory layout to use.</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Maildir++</code></td>\n<td>The default used by <a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a>.</td>\n</tr>\n<tr>\n<td><code>fs</code></td>\n<td>The default used by <a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a> and <a href=\"/main/core/config/mailbox_formats/dbox.html\">dbox</a>.</td>\n</tr>\n<tr>\n<td><code>index</code></td>\n<td>The default used by <a href=\"/main/core/plugins/obox.html\">obox plugin</a>. Uses mailbox GUIDs as the directory names. The mapping between mailbox names and GUIDs exists in <code>dovecot.list.index*</code> files.</td>\n</tr>\n</tbody>\n</table>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>The <code><a href=\"/main/core/summaries/settings.html#mail_driver\">mail_driver</a></code> setting provides the default value, that the\n<code>mailbox_list_layout</code> setting can override.</p>\n</div>\n"
  },
  "mailbox_subscriptions_filename": {
    "advanced": true,
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>subscriptions</code><br />specific <a href=\"/main/core/config/mailbox_formats/overview.html#mailbox-formats\">Mailbox Formats</a> have different defaults",
    "text": "<p>Specifies the filename used for storing mailbox subscriptions.</p>\n"
  },
  "mailbox_directory_name": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>&lt;specific to mail_driver setting&gt;</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_driver\">mail_driver</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#mailbox_directory_name_legacy\">mailbox_directory_name_legacy</a></code>"
    ],
    "text": "<p>Specifies the directory name used for mailbox, index, and control directory\npaths. See the individual mailbox format pages for further information. For\nexample <code>dbox-Mails</code> with <a href=\"/main/core/config/mailbox_formats/dbox.html\">dbox</a>.</p>\n<p>With mbox format this works differently. The user-provided mailbox name is the\ndirectory name, while <code>mailbox_directory_name</code> is the mbox file. For example\nwith <code>mailbox_directory_name=mbox</code>, creating <code>foo/bar</code> mailbox name ends up\ncreating <code>.../foo/bar/mbox</code> file.</p>\n"
  },
  "mailbox_directory_name_legacy": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "changed": [
      {
        "text": "<p>The default value changed from <code>yes</code> to <code>no</code>.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.2.0</span>"
      }
    ],
    "deprecated": [
      {
        "text": "<p>This legacy setting is obsolete and destined to be removed. Changing this\nsetting requires migration, see\n<a href=\"/main/core/config/mailbox_formats/dbox.html#migrating-away-from-mailbox-directory-name-legacy\">dbox: Migrating away from `mailbox_directory_name_legacy`</a></p>\n",
        "version": "<span class=\"VPBadge warning\">Deprecated: 3.2.0</span>"
      }
    ],
    "default": "<code>no</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mailbox_directory_name\">mailbox_directory_name</a></code>"
    ],
    "text": "<p>If <code>no</code>, <code><a href=\"/main/core/summaries/settings.html#mailbox_directory_name\">mailbox_directory_name</a></code> applies also to index and control\ndirectories. The only reason to set this to <code>yes</code> is if you already have an\nexisting Dovecot installation with the legacy <code>DIRNAME</code> (rather than\n<code>FULLDIRNAME</code>) parameter and don't want to migrate the data.</p>\n"
  },
  "mailbox_root_directory_name": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>specific to the mail_driver setting</code>",
    "text": "<p>Specifies directory name under which all mailbox directories are stored. For\nexample <code>mailboxes</code> with <a href=\"/main/core/config/mailbox_formats/dbox.html\">dbox</a>.</p>\n"
  },
  "mail_volatile_path": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Specifies the location of volatile files. This includes lock files and\npotentially other files that don't need to exist permanently, so it can point\nto an in-memory filesystem (<code>tmpfs</code>). This is especially useful to avoid\ncreating lock files to NFS or other remote filesystems.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> and <code>~/</code> can be used.</p>\n"
  },
  "mailbox_list_index_prefix": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>dovecot.list.index</code>",
    "text": "<p>Prefix for the mailbox list index filename. It may also optionally include a\npath (relative to <code><a href=\"/main/core/summaries/settings.html#mail_index_path\">mail_index_path</a></code>) to place it in a different\ndirectory.</p>\n"
  },
  "mailbox_list_visible_escape_char": {
    "tags": [
      "mail-location"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mailbox_list_storage_escape_char\">mailbox_list_storage_escape_char</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "The default for <a href=\"/main/core/config/mailbox_formats/imapc.html\">imapc</a> storage is <code>~</code>.",
    "text": "<p>Specifies an escape character that is used for broken or otherwise inaccessible\nmailbox names. If mailbox name can't be changed reversibly to UTF-8 and back,\nencode the problematic parts using\n<code>&lt;mailbox_list_visible_escape_char&gt;&lt;hex&gt;</code>in the user-visible UTF-8 name. The\n<code>mailbox_list_visible_escape_char</code> itself also has to be encoded the same\nway.</p>\n<p>This can be useful with <a href=\"/main/core/config/mailbox_formats/imapc.html\">imapc</a> to access mailbox names that aren't\nvalid mUTF-7 charset from remote servers, or if the remote server uses a\ndifferent hierarchy separator and has folder names containing the local\nseparator.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>It's possible to use the same character here as for\n<code><a href=\"/main/core/summaries/settings.html#mailbox_list_storage_escape_char\">mailbox_list_storage_escape_char</a></code>.</p>\n</div>\n"
  },
  "mailbox_list_storage_escape_char": {
    "tags": [
      "mail-location"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mailbox_list_visible_escape_char\">mailbox_list_visible_escape_char</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "The default for <a href=\"/main/core/config/mailbox_formats/imapc.html\">imapc</a> storage is <code>%</code>.",
    "text": "<p>Specifies an escape character that it used for encoding special characters in\nthe mailbox names in storage. This allows users to use characters in mailboxes\nnames that would otherwise be illegal. For example:</p>\n<ul>\n<li><a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a> layout disallows using the <code>.</code> character, since it's used\ninternally as the folder hierarchy separator.</li>\n<li>The <code>~</code> character at the beginning of the mailbox name is disallowed,\nbecause of the possibility that it gets expanded to user's home directory.</li>\n<li>The <code>/</code> character can't be used on POSIX filesystems, since it's the\ndirectory separator.</li>\n</ul>\n<p>The characters are escaped to the mailbox name as\n<code>&lt;mailbox_list_storage_escape_char&gt;&lt;hex&gt;</code>.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>It's possible to use the same character here as for\n<code><a href=\"/main/core/summaries/settings.html#mailbox_list_visible_escape_char\">mailbox_list_visible_escape_char</a></code>.</p>\n</div>\n"
  },
  "mailbox_list_drop_noselect": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>yes</code>",
    "text": "<p>Specifies whether to automatically delete <code>NoSelect</code> mailboxes that have no\nchildren. These mailboxes are sometimes confusing to users. Also if a\n<code>NoSelect</code> mailbox is attempted to be created with <code>CREATE box/</code>, it's\ncreated as selectable mailbox instead.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p><a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a> layout does not support <code>NoSelect</code> mailboxes, so this\nsetting has no effect with it.</p>\n</div>\n"
  },
  "mailbox_list_validate_fs_names": {
    "tags": [
      "mail-location"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_full_filesystem_access\">mail_full_filesystem_access</a></code>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>yes</code>",
    "text": "<p>Specifies whether to disallow mailbox names that might be unsafe to use in\nfilesystems or potentially allow bypassing ACL checks:</p>\n<ul>\n<li><code>/</code> character anywhere in the name (except as a hierarchy separator),\nunless mailbox list isn't on a filesystem (e.g. index, imapc).</li>\n<li><code>/</code> as the first character.</li>\n<li><code>~</code> as the first character (so it's not confused as home directory).</li>\n<li>No adjacent <code>/</code> characters.</li>\n<li>No <code>.</code> or <code>..</code> names between <code>/</code> characters.</li>\n<li>No <code><a href=\"/main/core/summaries/settings.html#mailbox_directory_name\">mailbox_directory_name</a></code> between <code>/</code> characters.</li>\n<li>No mailbox format-specific internal directories between <code>/</code> characters,</li>\n<li>unless <code><a href=\"/main/core/summaries/settings.html#mailbox_directory_name\">mailbox_directory_name</a></code> is non-empty. This mainly means the\nMaildir <code>new</code>, <code>cur</code> and <code>tmp</code> directories in some configurations.</li>\n</ul>\n<p>Enabling <code><a href=\"/main/core/summaries/settings.html#mail_full_filesystem_access\">mail_full_filesystem_access</a></code> enables also this setting.</p>\n"
  },
  "mailbox_list_iter_from_index_dir": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Perform mailbox listing using the <code><a href=\"/main/core/summaries/settings.html#mail_index_path\">mail_index_path</a></code> directories\ninstead of the <code><a href=\"/main/core/summaries/settings.html#mail_path\">mail_path</a></code> directories. Mainly useful when the index\nfile storage is on a faster storage.</p>\n"
  },
  "mailbox_list_utf8": {
    "tags": [
      "mail-location"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Store mailbox names on disk using UTF-8 instead of modified UTF-7 (mUTF-7).</p>\n"
  },
  "mailbox_idle_check_interval": {
    "default": "<code>30secs</code>",
    "tags": [
      "imap"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>The minimum time between checks for new mail/other changes when a mailbox\nis in the IMAP IDLE state.</p>\n"
  },
  "mailbox_list_index": {
    "default": "<code>yes</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Dovecot indexes live at the root of user's mailbox storage, and allows\nquick lookup of mailbox status instead of needing to open all mailbox\nindexes separately.</p>\n<p>Enabling this optimizes the server reply to IMAP STATUS commands, which are\ncommonly issued by clients. This also needs to be enabled if you wish to\nenable the IMAP NOTIFY extension.</p>\n"
  },
  "mailbox_list_index_include_inbox": {
    "default": "<code>no<br/><code>obox { yes }</code></code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mailbox_list_index\">mailbox_list_index</a></code>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Should INBOX be kept up-to-date in the mailbox list index?</p>\n<p>Disabled by default as most mailbox accesses will open INBOX anyway.</p>\n"
  },
  "mailbox_list_index_very_dirty_syncs": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, assume that the mailbox list index is fully updated so that\nstat() will not be run for mailbox files/directories.</p>\n"
  },
  "maildir_broken_filename_sizes": {
    "default": "<code>no</code>",
    "tags": [
      "maildir"
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, do not obtain a mail message's physical size from the\n<code>S=&lt;size&gt;</code> data in the Maildir filename except when recalculating the\nMaildir++ quota.</p>\n"
  },
  "maildir_copy_with_hardlinks": {
    "default": "<code>yes</code>",
    "tags": [
      "maildir"
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, copying of a message is done with hard links whenever possible.</p>\n<p>This makes the performance much better, and it's unlikely to have any side\neffects. The only reason to disable this is if you're using a filesystem\nwhere hard links are slow (e.g. HFS+).</p>\n"
  },
  "maildir_empty_new": {
    "default": "<code>no</code>",
    "tags": [
      "maildir"
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Should mail messages always be moved from the <code>new/</code> directory to\n<code>cur/</code>, even when the <code>Recent</code> flags aren't being reset?</p>\n"
  },
  "maildir_stat_dirs": {
    "default": "<code>no</code>",
    "tags": [
      "maildir"
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, don't include non-directory files in a LIST response that begin\nwith a dot. Thus, if disabled, Dovecot assumes that all the files beginning\nwith a dot in the Maildir are Maildirs.</p>\n<p>You shouldn't have any non-directory files beginning with a dot in the\nMaildirs, but if you do you may need to set this to <code>yes</code>, in which case\nDovecot needs to <code>stat()</code> each directory entry, which degrades the\nperformance. Some filesystems (e.g. ext4) provide the\ndirectory/non-directory status for free without having to <code>stat()</code>.\nIn those filesystems this setting is ignored.</p>\n"
  },
  "maildir_very_dirty_syncs": {
    "default": "<code>no</code>",
    "tags": [
      "maildir"
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled (<code>yes</code>), Dovecot is assumed to be the only MUA that accesses\nMaildir directly, so the <code>cur/</code> directory is scanned only when its mtime\nchanges unexpectedly or when the mail cannot otherwise be found.</p>\n<p>If enabled and another process (or a Dovecot process which doesn't update\nindex files) does changes to <code>cur/</code> while the mailbox is simultaneously\nbeing modified by Dovecot, Dovecot may not notice those external changes.</p>\n<p>It is still safe to deliver new mails to <code>new/</code> using non-Dovecot\nsoftware (except with <code><a href=\"/main/core/summaries/settings.html#mailbox_list_index\">mailbox_list_index = yes</a></code>, changes aren't\nnoticed outside INBOX).</p>\n"
  },
  "mbox_dirty_syncs": {
    "default": "<code>yes</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mbox_very_dirty_syncs\">mbox_very_dirty_syncs</a></code>",
      "<a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a>"
    ],
    "tags": [
      "mbox"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Enable optimized mbox syncing?</p>\n<p>For larger mbox files, it can take a long time to determine what has\nchanged when the file is altered unexpectedly. Since the change in\nmost cases consists solely of newly appended mail, Dovecot can\noperate more quickly if it starts off by simply reading the new\nmessages, then falls back to reading the entire mbox file if\nsomething elsewhere in it isn't as expected.</p>\n<p>Dovecot assumes that external mbox file changes only mean that new messages\nwere appended to it. Without this setting Dovecot re-reads the whole mbox\nfile whenever it changes. There are various safeguards in place to make this\nsetting safe even when other changes than appends were done to the mbox. The\ndownside to this setting is that external message flag modifications may not\nbe visible immediately.</p>\n<p>When this setting is enabled, Dovecot tries to avoid re-reading the mbox\nevery time something changes. Whenever the mbox changes (i.e. timestamp or\nsize), Dovecot first checks if the mailbox's size changed. If it didn't, it\nmost likely meant that only message flags were changed so it does a full\nmbox read to find it. If the mailbox shrunk, it means that mails were\nexpunged and again Dovecot does a full sync. Usually however the only thing\nbesides Dovecot that modifies the mbox is the LDA which appends new mails\nto the mbox. So if the mbox size was grown, Dovecot first checks if the\nlast known message is still where it was last time. If it is, Dovecot reads\nonly the newly added messages and goes into &quot;dirty mode&quot;. As long as\nDovecot is in dirty mode, it can't be certain that mails are where it\nexpects them to be, so whenever accessing some mail, it first verifies that\nit really is the correct mail by finding its X-UID header. If the X-UID\nheader is different, it fallbacks to a full sync to find the mail's correct\nposition. The dirty mode goes away after a full sync. If\n<code><a href=\"/main/core/summaries/settings.html#mbox_lazy_writes\">mbox_lazy_writes</a></code> was enabled and the mail didn't yet\nhave an X-UID header, Dovecot uses the MD5 sum of a couple of headers to\ncompare the mails.</p>\n"
  },
  "mbox_dotlock_change_timeout": {
    "default": "<code>2 mins</code>",
    "tags": [
      "mbox"
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a>"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>Override a lockfile after this amount of time if a dot-lock exists but the\nmailbox hasn't been modified in any way.</p>\n"
  },
  "mbox_lazy_writes": {
    "default": "<code>yes</code>",
    "tags": [
      "mbox"
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, mbox headers (e.g., metadata updates, such as writing X-UID\nheaders or flag changes) are not written until a full write sync is\nperformed (triggered via IMAP EXPUNGE or CHECK commands and/or when the\nmailbox is closed). mbox rewrites can be costly, so this may avoid a lot of\ndisk writes.</p>\n<p>Enabling this setting is especially useful with POP3, in which clients\noften delete all mail messages.</p>\n<p>One negative consequence of enabling this setting is that the changes\naren't immediately visible to other MUAs.</p>\n<p>C-Client works the same way. The upside of this is that it reduces writes\nbecause multiple flag updates to same message can be grouped, and sometimes\nthe writes don't have to be done at all if the whole message is expunged.\nThe downside is that other processes don't notice the changes immediately\n(but other Dovecot processes do notice because the changes are in index\nfiles).</p>\n"
  },
  "mbox_lock_timeout": {
    "default": "<code>5 mins</code>",
    "tags": [
      "mbox"
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a>"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>The maximum time to wait for all locks to be released before aborting.</p>\n"
  },
  "mbox_md5": {
    "default": "<code>apop3d</code>",
    "tags": [
      "mbox"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#pop3_uidl_format\">pop3_uidl_format</a></code>",
      "<a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "values_enum": [
      "apop3d",
      "all"
    ],
    "advanced": true,
    "text": "<p>The mail-header selection algorithm to use for MD5 POP3 UIDLs when the\nsetting <code><a href=\"/main/core/summaries/settings.html#pop3_uidl_format\">pop3_uidl_format = %{md5}</a></code> is applied.</p>\n"
  },
  "mbox_min_index_size": {
    "default": 0,
    "tags": [
      "mbox"
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a>"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>For mboxes smaller than this size, index files are not written.</p>\n<p>If an index file already exists, it gets read but not updated.</p>\n<p>The default should not be changed for most installations.</p>\n"
  },
  "mbox_read_locks": {
    "default": "<code>fcntl</code>",
    "tags": [
      "mbox"
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a>"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "values_enum": [
      "dotlock",
      "dotlock_try",
      "fcntl",
      "flock",
      "lockf"
    ],
    "text": "<p>Specify which locking method(s) to use for locking the mbox files during\nreading.</p>\n<p>Descriptions of the locking methods can be found at <a href=\"/main/core/config/mailbox_formats/mbox.html#locking\">mbox locking</a>.</p>\n"
  },
  "mbox_very_dirty_syncs": {
    "default": "<code>no</code>",
    "tags": [
      "mbox"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mbox_dirty_syncs\">mbox_dirty_syncs</a></code>",
      "<a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, Dovecot performs the optimizations from\n<code><a href=\"/main/core/summaries/settings.html#mbox_dirty_syncs\">mbox_dirty_syncs</a></code> also for the IMAP SELECT, EXAMINE,\nEXPUNGE, and CHECK commands.</p>\n<p>If set, this option overrides <code><a href=\"/main/core/summaries/settings.html#mbox_dirty_syncs\">mbox_dirty_syncs</a></code>.</p>\n"
  },
  "mbox_write_locks": {
    "default": "<code>dotlock fcntl</code>",
    "tags": [
      "mbox"
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a>"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "values_enum": [
      "dotlock",
      "dotlock_try",
      "fcntl",
      "flock",
      "lockf"
    ],
    "text": "<p>Specify which locking method(s) to use for locking the mbox files during\nwriting.</p>\n<p>Descriptions of the locking methods can be found at <a href=\"/main/core/config/mailbox_formats/mbox.html#locking\">mbox locking</a>.</p>\n"
  },
  "mdbox_preallocate_space": {
    "default": "<code>no</code>",
    "tags": [
      "mdbox"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mdbox_rotate_size\">mdbox_rotate_size</a></code>",
      "<a href=\"/main/core/config/mailbox_formats/dbox.html#multi-dbox-mdbox\">mdbox</a>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>mdbox only: If enabled, preallocate space for newly created files.</p>\n<p>In creation of new mdbox files, their size is immediately\npreallocated as <code><a href=\"/main/core/summaries/settings.html#mdbox_rotate_size\">mdbox_rotate_size</a></code>.</p>\n<p>This setting currently works only in Linux with certain filesystems (ext4\nand xfs).</p>\n"
  },
  "mdbox_rotate_interval": {
    "default": 0,
    "tags": [
      "mdbox"
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/dbox.html#multi-dbox-mdbox\">mdbox</a>"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "text": "<p>mdbox only: The maximum age the dbox file may reach before it's rotated.</p>\n<p><code>0</code> means there is no age-based rotation.</p>\n"
  },
  "mdbox_rotate_size": {
    "default": "<code>10M</code>",
    "tags": [
      "mdbox"
    ],
    "seealso": [
      "<a href=\"/main/core/config/mailbox_formats/dbox.html#multi-dbox-mdbox\">mdbox</a>"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "text": "<p>mdbox only: The maximum size the dbox file may reach before it is rotated.</p>\n"
  },
  "mmap_disable": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Disable mmap() usage?</p>\n<p>This must be set to <code>yes</code> if you store indexes to shared filesystems\n(i.e., if you use NFS or a clustered filesystem).</p>\n"
  },
  "namespace": {
    "tags": [
      "namespace"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "text": "<p>Creates a new namespace to the list of namespaces. The filter name refers to\nthe <code><a href=\"/main/core/summaries/settings.html#namespace_name\">namespace_name</a></code> setting.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>namespace foo {</span></span>\n<span class=\"line\"><span>  [...]</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "namespace_name": {
    "tags": [
      "namespace"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Name of the namespace. This is used only in configurations - it's not visible\nto user. The <code><a href=\"/main/core/summaries/settings.html#namespace\">namespace</a></code> filter refers to this setting.</p>\n"
  },
  "namespace_alias_for": {
    "tags": [
      "namespace"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Refers to an alias namespace's <code><a href=\"/main/core/summaries/settings.html#namespace_name\">namespace_name</a></code>.</p>\n<p>If multiple namespaces point to the same location, they should be marked as\naliases against one primary namespace. This avoids duplicating work for\nsome commands (listing the same mailbox multiple times).</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> can be used.</p>\n<p>Note: Alias namespaces often have <code>hidden=yes</code> and <code>list=no</code> so\nthey are not visible unless clients have specifically configured\nthem, and they're typically used when migrating to a different\nnamespace prefix for existing users.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>namespace inbox {</span></span>\n<span class=\"line\"><span>  prefix =</span></span>\n<span class=\"line\"><span>  # ...</span></span>\n<span class=\"line\"><span>}</span></span>\n<span class=\"line\"><span>namespace alias {</span></span>\n<span class=\"line\"><span>  prefix = INBOX/</span></span>\n<span class=\"line\"><span>  alias_for = inbox</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "namespace_disabled": {
    "default": "<code>no</code>",
    "tags": [
      "namespace"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If <code>yes</code>, namespace is disabled and cannot be accessed by user in any way.</p>\n<p>Useful when returned by a userdb lookup to easily configure per-user\nnamespaces.</p>\n"
  },
  "namespace_hidden": {
    "default": "<code>no</code>",
    "tags": [
      "namespace"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If <code>yes</code>, namespace will be hidden from IMAP NAMESPACE (<a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc2342\">RFC 2342</a>)\ncommand.</p>\n"
  },
  "namespace_ignore_on_failure": {
    "default": "<code>no</code>",
    "tags": [
      "namespace"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If namespace's storage initialization fails, by default the entire session will\nfail to start. If this is set, this namespace will be ignored instead.</p>\n"
  },
  "namespace_inbox": {
    "default": "<code>no</code>",
    "tags": [
      "namespace"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If <code>yes</code>, this namespace will be considered the one holding the INBOX\nfolder.</p>\n<p>There can be only one namespace defined like this.</p>\n"
  },
  "namespace_list": {
    "default": "<code>yes</code>",
    "tags": [
      "namespace"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#namespace_hidden\">namespace_hidden</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "yes",
      "no",
      "children"
    ],
    "text": "<p>Include this namespace in LIST output when listing its parent's folders.</p>\n<p>Options:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>children</code></td>\n<td>Namespace prefix list listed only if it has child mailboxes.</td>\n</tr>\n<tr>\n<td><code>no</code></td>\n<td>Namespace and mailboxes not listed unless listing requests explicitly mailboxes under the namespace prefix.</td>\n</tr>\n<tr>\n<td><code>yes</code></td>\n<td>Namespace and mailboxes are always listed.</td>\n</tr>\n</tbody>\n</table>\n<p>It is still possible to list the namespace's folders by explicitly asking\nfor them. For example, if this setting is <code>no</code>, using <code>LIST &quot;&quot; *</code> with\nnamespace prefix &quot;lazy-expunge/&quot; won't list it, but using <code>LIST &quot;&quot; lazy-expunge/*</code> lists all folders under it.</p>\n"
  },
  "namespace_order": {
    "tags": [
      "namespace"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>Sets display order in IMAP NAMESPACE (<a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc2342\">RFC 2342</a>) command.</p>\n<p>Namespaces are automatically numbered if this setting does not exist.</p>\n"
  },
  "namespace_prefix": {
    "tags": [
      "namespace"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Specifies prefix for namespace.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>Must end with <code><a href=\"/main/core/summaries/settings.html#namespace_separator\">namespace_separator</a></code>.</p>\n</div>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> can be used.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>namespace shared {</span></span>\n<span class=\"line\"><span>  prefix = Shared/</span></span>\n<span class=\"line\"><span>  separator = /</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "namespace_separator": {
    "default": "<code>&quot;.&quot; for Maildir; &quot;/&quot; for other mbox formats</code>",
    "tags": [
      "namespace"
    ],
    "seealso": [
      "<a href=\"/main/core/config/namespaces.html#hierarchy-separators\">Namespaces: Hierarchy Separators</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Specifies the hierarchy separator for the namespace.</p>\n<p>The separator is a single character, which can't then otherwise be used in\nfolder names.</p>\n<p>The commonly used separators are <code>.</code> and <code>/</code>, but other separators can\nbe used as well. For example <code>^</code> is less likely to be found in normal\nfolder names.</p>\n<p>Recommended value is to leave it empty and accept the default value.</p>\n"
  },
  "namespace_subscriptions": {
    "default": "<code>yes</code>",
    "tags": [
      "namespace"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Whether subscriptions are stored in this namespace.</p>\n<p>This is usually <code>no</code> for shared namespaces so that the shared folders'\nsubscriptions are stored in the user's primary subscriptions file. If\n<code>no</code>, the subscriptions are stored in the first parent namespace (based\non the prefix) that has this setting enabled.</p>\n<p>Example: If this setting is <code>no</code> for a namespace with\n<code>prefix=foo/bar/</code>, Dovecot first sees if there's a <code>prefix=foo/</code>\nnamespace with <code>subscriptions=yes</code> and then a namespace with an empty\nprefix. If neither is found, an error is given.</p>\n"
  },
  "namespace_type": {
    "default": "<code>private</code>",
    "tags": [
      "namespace"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "private",
      "shared",
      "public"
    ],
    "text": "<p>The namespace type.  One of:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>public</code></td>\n<td>Contains <a href=\"/main/core/config/shared_mailboxes.html#public-shared-mailboxes\">public shared mailboxes</a>.</td>\n</tr>\n<tr>\n<td><code>private</code></td>\n<td>Typically contains only user's own private mailboxes.</td>\n</tr>\n<tr>\n<td><code>shared</code></td>\n<td>Contains other users' <a href=\"/main/core/config/shared_mailboxes.html#user-shared-mailboxes\">user shared mailboxes</a>.</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "mailbox": {
    "tags": [
      "mailbox"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "text": "<p>Create a new mailbox to the list of mailboxes. The filter name refers to the\n<code><a href=\"/main/core/summaries/settings.html#mailbox_name\">mailbox_name</a></code> setting.</p>\n<p>The mailbox name can contain <code>?</code> and <code>*</code> wildcards. Settings are applied\nfor all matching mailbox filters.</p>\n<div class=\"tip custom-block\"><p class=\"custom-block-title\">TIP</p>\n<p>If the mailbox name has spaces, you can put it into quotes:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>mailbox \"Test Mailbox\" {</span></span>\n<span class=\"line\"><span>  # ...</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div></div>\n<div class=\"tip custom-block\"><p class=\"custom-block-title\">TIP</p>\n<p>It's possible to rename the mailbox in userdb. For example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>mailbox junk {</span></span>\n<span class=\"line\"><span>  name = Junk</span></span>\n<span class=\"line\"><span>  special_use = \\Junk</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div><p>The userdb can then return <code>mailbox/junk/name=Spam</code> to rename the mailbox\nfor a specific user.</p>\n</div>\n"
  },
  "mailbox_name": {
    "tags": [
      "mailbox"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Name of the mailbox being configured. The <code><a href=\"/main/core/summaries/settings.html#mailbox\">mailbox</a></code> filter name\nrefers to this setting.</p>\n"
  },
  "mailbox_auto": {
    "default": "<code>no</code>",
    "tags": [
      "mailbox"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "create",
      "no",
      "subscribe"
    ],
    "text": "<p>Autocreate and/or subscribe to the mailbox?</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>create</code></td>\n<td>Autocreate but don't autosubscribe</td>\n</tr>\n<tr>\n<td><code>no</code></td>\n<td>Don't autocreate or autosubscribe</td>\n</tr>\n<tr>\n<td><code>subscribe</code></td>\n<td>Autocreate and autosubscribe</td>\n</tr>\n</tbody>\n</table>\n<p>Autocreated mailboxes are created lazily to disk only when accessed for\nthe first time. The autosubscribed mailboxes aren't written to\nsubscriptions file, unless SUBSCRIBE command is explicitly used for them.</p>\n"
  },
  "mailbox_autoexpunge": {
    "default": 0,
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mailbox_autoexpunge_max_mails\">mailbox_autoexpunge_max_mails</a></code>"
    ],
    "tags": [
      "mailbox"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>Expunge all mails in this mailbox whose saved-timestamp is older than this\nvalue. <code>0</code> means autoexpunging is disabled.</p>\n<p>For IMAP and POP3 this happens after the client is already disconnected.</p>\n<p>For LMTP this happens when the user's mail delivery is finished. Note that\nin case there are multiple recipients, autoexpunging is done only for some\nof the recipients to prevent delays with the mail delivery: The last\nrecipient user is autoexpunged first. Next, the first recipient user is\nautoexpunged (because the first user's mail was kept open in case it could\nbe directly copied to the other users). None of the middle recipient users\nare autoexpunged.</p>\n<p><code><a href=\"/main/core/summaries/settings.html#mailbox_list_index\">mailbox_list_index = yes</a></code> is highly recommended when\nusing this setting, as it avoids actually opening the mailbox to see if\nanything needs to be expunged.</p>\n<p><code><a href=\"/main/core/summaries/settings.html#mail_always_cache_fields\">mail_always_cache_fields = date.save</a></code> is also\nrecommended when using this setting with <a href=\"/main/core/config/mailbox_formats/dbox.html#single-dbox-sdbox\">sdbox</a> or <a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a>,\nas it avoids using <code>stat()</code> to find out the mail's saved-timestamp. With\n<a href=\"/main/core/config/mailbox_formats/dbox.html#multi-dbox-mdbox\">mdbox</a> format this isn't necessary, since the saved-timestamp is\nalways available.</p>\n"
  },
  "mailbox_autoexpunge_max_mails": {
    "tags": [
      "mailbox"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>Mails are autoexpunged until mail count is at or below this number of messages.</p>\n<p>Once this threshold has been reached, <code><a href=\"/main/core/summaries/settings.html#mailbox_autoexpunge\">mailbox_autoexpunge</a></code>\nprocessing is done.</p>\n"
  },
  "mailbox_special_use": {
    "tags": [
      "mailbox"
    ],
    "changed": [
      {
        "text": "<p>Using non-standard special-use flags will result in a warning message at\nstartup.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/namespaces.html\">Namespaces</a>"
    ],
    "text": "<p>List of SPECIAL-USE (<a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc6154\">RFC 6154</a>) flags to broadcast for the mailbox.</p>\n<p>There are no validity checks, so you could specify anything you want here,\nbut it's not a good idea to use other than the standard ones specified in\nthe RFC.</p>\n"
  },
  "metric": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#metric_name\">metric_name</a></code>"
    ],
    "text": "<p>Creates a new metric. The filter name refers to the <code><a href=\"/main/core/summaries/settings.html#metric_name\">metric_name</a></code>\nsetting.</p>\n"
  },
  "metric_name": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Name of the metric. It is visible in statistics outputs. The <code><a href=\"/main/core/summaries/settings.html#metric\">metric</a></code>\nfilter name refers to this setting.</p>\n"
  },
  "metric_fields": {
    "changed": [
      {
        "text": "<p>All listed fields are exported to OpenMetrics as well.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.1.0</span>"
      }
    ],
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>A list of fields included in the metric. All events have a default <code>duration</code>\nfield that does not need to be listed explicitly.</p>\n"
  },
  "metric_group_by": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/statistics.html#group-by\">Statistics: Group By</a>"
    ],
    "text": "<p>Creates a new <a href=\"/main/core/config/statistics.html#group-by\">group_by</a> for dynamically generating\nsub-metrics based on the specified field's values. The filter name refers to\nthe <code><a href=\"/main/core/summaries/settings.html#metric_group_by_field\">metric_group_by_field</a></code>.</p>\n"
  },
  "metric_group_by_field": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/statistics.html#group-by\">Statistics: Group By</a>"
    ],
    "text": "<p>Generate sub-metrics based on this event field name. The\n<code><a href=\"/main/core/summaries/settings.html#metric_group_by\">metric_group_by</a></code> filter name refers to this setting.</p>\n"
  },
  "metric_group_by_method": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/statistics.html#group-by\">Statistics: Group By</a>"
    ],
    "text": "<p>Configures <code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_method\">metric_group_by_method_method = the aggregation method</a></code> for\nthe <code><a href=\"/main/core/summaries/settings.html#metric_group_by\">metric_group_by</a></code>. Only a single method can be specified for\na group_by. The filter name refers to the\n<code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_method\">metric_group_by_method_method</a></code>.</p>\n"
  },
  "metric_group_by_method_method": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "discrete",
      "exponential",
      "linear"
    ],
    "default": "<code>discrete</code>",
    "seealso": [
      "<a href=\"/main/core/config/statistics.html#group-by\">Statistics: Group By</a>"
    ],
    "text": "<p>Configures the aggregation method for the\n<code><a href=\"/main/core/summaries/settings.html#metric_group_by\">metric_group_by</a></code>. The <code><a href=\"/main/core/summaries/settings.html#metric_group_by_method\">metric_group_by_method</a></code> filter name\nrefers to this setting.</p>\n"
  },
  "metric_group_by_method_discrete_modifier": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/statistics.html#group-by\">Statistics: Group By</a>"
    ],
    "text": "<p>Configures a modifier string for values grouped by the\n<a href=\"/main/core/config/statistics.html#discrete\">discrete method</a>.\n<a href=\"/main/core/settings/variables.html\">%variables</a> and their functions can be used:</p>\n<dl>\n<dt><code>%{value}</code></dt>\n<dd>The original value.</dd>\n<dt><code>%{user | domain}</code></dt>\n<dd>If the value is in <code>user@domain</code> format, this contains the <code>domain</code>\ntext. Otherwise empty.</dd>\n</dl>\n"
  },
  "metric_group_by_method_exponential_min_magnitude": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "seealso": [
      "<a href=\"/main/core/config/statistics.html#group-by\">Statistics: Group By</a>",
      "<code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_exponential_max_magnitude\">metric_group_by_method_exponential_max_magnitude</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_exponential_base\">metric_group_by_method_exponential_base</a></code>"
    ],
    "text": "<p>Configures the minimum magnitude for values grouped by the\n<a href=\"/main/core/config/statistics.html#exponential\">exponential method</a>.</p>\n"
  },
  "metric_group_by_method_exponential_max_magnitude": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "seealso": [
      "<a href=\"/main/core/config/statistics.html#group-by\">Statistics: Group By</a>",
      "<code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_exponential_min_magnitude\">metric_group_by_method_exponential_min_magnitude</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_exponential_base\">metric_group_by_method_exponential_base</a></code>"
    ],
    "text": "<p>Configures the maximum magnitude for values grouped by the\n<a href=\"/main/core/config/statistics.html#exponential\">exponential method</a>.</p>\n"
  },
  "metric_group_by_method_exponential_base": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>10</code>",
    "seealso": [
      "<a href=\"/main/core/config/statistics.html#group-by\">Statistics: Group By</a>",
      "<code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_exponential_min_magnitude\">metric_group_by_method_exponential_min_magnitude</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_exponential_max_magnitude\">metric_group_by_method_exponential_max_magnitude</a></code>"
    ],
    "text": "<p>Configures the base for values grouped by the\n<a href=\"/main/core/config/statistics.html#exponential\">exponential method</a>. Only <code>2</code> and\n<code>10</code> are supported.</p>\n"
  },
  "metric_group_by_method_linear_min": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "seealso": [
      "<a href=\"/main/core/config/statistics.html#group-by\">Statistics: Group By</a>",
      "<code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_linear_max\">metric_group_by_method_linear_max</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_linear_step\">metric_group_by_method_linear_step</a></code>"
    ],
    "text": "<p>Configures the minimum for values grouped by the\n<a href=\"/main/core/config/statistics.html#linear\">linear method</a>.</p>\n"
  },
  "metric_group_by_method_linear_max": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "seealso": [
      "<a href=\"/main/core/config/statistics.html#group-by\">Statistics: Group By</a>",
      "<code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_linear_min\">metric_group_by_method_linear_min</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_linear_step\">metric_group_by_method_linear_step</a></code>"
    ],
    "text": "<p>Configures the maximum for values grouped by the\n<a href=\"/main/core/config/statistics.html#linear\">linear method</a>.</p>\n"
  },
  "metric_group_by_method_linear_step": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "seealso": [
      "<a href=\"/main/core/config/statistics.html#group-by\">Statistics: Group By</a>",
      "<code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_linear_min\">metric_group_by_method_linear_min</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#metric_group_by_method_linear_max\">metric_group_by_method_linear_max</a></code>"
    ],
    "text": "<p>Configures the step for values grouped by the\n<a href=\"/main/core/config/statistics.html#linear\">linear method</a>.</p>\n"
  },
  "metric_filter": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/events/filter.html#metric-filter-syntax\">Metric Filters</a>"
    ],
    "text": "<p><a href=\"/main/core/config/events/filter.html#metric-filter-syntax\">Event filter</a> that matches the events belonging to\nthis metric.</p>\n"
  },
  "metric_exporter": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/events/export.html\">Event Export</a>",
      "<code><a href=\"/main/core/summaries/settings.html#event_exporter_name\">event_exporter_name</a></code>"
    ],
    "text": "<p>Export events matching the filter with this\n<a href=\"/main/core/config/events/export.html\">event exporter</a>. Refers to the\n<code><a href=\"/main/core/summaries/settings.html#event_exporter_name\">event_exporter_name</a></code> setting. If empty, the events are used only for\nstatistics, and no exporting is done.</p>\n"
  },
  "metric_exporter_include": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "default": "<code>name hostname timestamps categories fields</code>",
    "text": "<p>Specifies which parts of the event are exported to the serialized event:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Values</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>The name of the event.</td>\n</tr>\n<tr>\n<td><code>hostname</code></td>\n<td>The name of the host generating this event.</td>\n</tr>\n<tr>\n<td><code>timestamps</code></td>\n<td>The event start and end timestamps.</td>\n</tr>\n<tr>\n<td><code>categories</code></td>\n<td>A set of categories associated with this event.</td>\n</tr>\n<tr>\n<td><code>fields</code></td>\n<td>The fields associated with this event. The fields that will be exported are defined by the <code><a href=\"/main/core/summaries/settings.html#metric_fields\">metric_fields</a></code> setting.</td>\n</tr>\n</tbody>\n</table>\n<p>For example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>metric example {</span></span>\n<span class=\"line\"><span>  exporter_include = name hostname timestamps</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div><p>includes just the 3 specified parts, while</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>metric another_example {</span></span>\n<span class=\"line\"><span>  exporter_include =</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div><p>includes nothing and the exported event will be empty (i.e. <code>{}</code> in JSON).</p>\n"
  },
  "metric_description": {
    "tags": [
      "metrics"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Human-readable description of the metric. This is included in the HELP text\nsent to OpenMetrics.</p>\n"
  },
  "oauth2": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/auth/databases/oauth2.html\">OAuth2 Authentication Database</a>"
    ],
    "text": "<p>Filter for oauth2 specific settings.</p>\n",
    "no_default": true
  },
  "oauth2_token_expire_grace": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": "<code>1min</code>",
    "text": "<p>Specifies how long after token expiration it is still accepted. It shouldn't be\n0 because clocks aren't exact, and network can add some delays.</p>\n"
  },
  "oauth2_tokeninfo_url": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>URL for verifying token validity. Token is appended to the URL.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>oauth2_tokeninfo_url = http://endpoint/oauth/tokeninfo?access_token=</span></span></code></pre>\n</div>"
  },
  "oauth2_introspection_url": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>URL for getting more information about token.</p>\n"
  },
  "oauth2_introspection_mode": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "<empty>",
      "auth",
      "get",
      "post",
      "local"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#oauth2_introspection_url\">oauth2_introspection_url</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#oauth2_tokeninfo_url\">oauth2_tokeninfo_url</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#oauth2_force_introspection\">oauth2_force_introspection</a></code>"
    ],
    "text": "<p>To enable oauth2 you must choose how to do token introspection.\n<code><a href=\"/main/core/summaries/settings.html#oauth2_introspection_url\">oauth2_introspection_url</a></code> is not required if\n<code><a href=\"/main/core/summaries/settings.html#oauth2_tokeninfo_url\">oauth2_tokeninfo_url</a></code> already provides all the necessary fields, or\nif you are using <code>local</code> validation.</p>\n<p>You can force introspection with <code><a href=\"/main/core/summaries/settings.html#oauth2_force_introspection\">oauth2_force_introspection</a></code>, if you\nneed to it every time.</p>\n<p>With <code>local</code> validation, <code><a href=\"/main/core/summaries/settings.html#oauth2_tokeninfo_url\">oauth2_tokeninfo_url</a></code> is also ignored.</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>auth</code></td>\n<td>GET request with Bearer authentication.</td>\n</tr>\n<tr>\n<td><code>get</code></td>\n<td>GET request with token appended to URL.</td>\n</tr>\n<tr>\n<td><code>post</code></td>\n<td>POST request with token=bearer_token as content.</td>\n</tr>\n<tr>\n<td><code>local</code></td>\n<td>Attempt to locally validate and decode JWT token.</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "oauth2_force_introspection": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Force introspection even if tokeninfo contains wanted fields. Set this to\n<code>yes</code> if you are using <code><a href=\"/main/core/summaries/settings.html#oauth2_active_attribute\">oauth2_active_attribute</a></code>.</p>\n"
  },
  "oauth2_local_validation": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict\">dict</a></code>"
    ],
    "text": "<p>A dictionary for fetching validation keys.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>oauth2_local_validation {</span></span>\n<span class=\"line\"><span>  dict fs {</span></span>\n<span class=\"line\"><span>    fs posix {</span></span>\n<span class=\"line\"><span>      prefix = /tmp/keys/</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>",
    "no_default": true
  },
  "oauth2_scope": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>A list of valid scopes.</p>\n"
  },
  "oauth2_username_attribute": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>email</code>",
    "text": "<p>Username attribute in response.</p>\n"
  },
  "oauth2_username_validation_format": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>%{user}</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#oauth2_username_attribute\">oauth2_username_attribute</a></code>"
    ],
    "text": "<p>Normalization for oauth2 provided username, this setting is normally not\nneeded. You only need this if the username that comes from authentication will\nnot otherwise match with <code><a href=\"/main/core/summaries/settings.html#oauth2_username_attribute\">oauth2_username_attribute</a></code> value.</p>\n"
  },
  "oauth2_active_attribute": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Attribute name for (optional) checking whether account is disabled.</p>\n"
  },
  "oauth2_active_value": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Expected value in <code>active_attribute</code>. (empty = require present, but anything\ngoes)</p>\n"
  },
  "oauth2_issuers": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>Valid issuer(s) for the token.</p>\n"
  },
  "oauth2_openid_configuration_url": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>URL to <a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc7628\">RFC 7628</a> OpenID Provider Configuration Information schema.</p>\n"
  },
  "oauth2_fields": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "text": "<p>Key-value fields to include in successful authentication.</p>\n"
  },
  "oauth2_send_auth_headers": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Whether to send special headers about authentication to remote server. If you\nenable this, the following headers will be sent:</p>\n<dl>\n<dt><code>X-Dovecot-Auth-Protocol</code></dt>\n<dd>Requested protocol, such as imap or pop3.</dd>\n<dt><code>X-Dovecot-Auth-Local</code></dt>\n<dd>Local IP address where client connected to.</dd>\n<dt><code>X-Dovecot-Auth-Remote</code></dt>\n<dd>Remote IP address of the client connection.</dd>\n</dl>\n"
  },
  "oauth2_use_worker_with_mech": {
    "tags": [
      "oauth2"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#passdb_use_worker\">passdb_use_worker</a></code>"
    ],
    "text": "<p>Use worker process to verify token. This setting only applies to mechanism. If\nyou want to use worker with <code>passdb oauth2</code>, use\n<code><a href=\"/main/core/summaries/settings.html#passdb_use_worker\">passdb_use_worker</a></code> instead. Worker processes are mostly useful for\ndistributing local token validation to multiple CPUs.</p>\n"
  },
  "passdb": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "dependencies": [
      "<code><a href=\"/main/core/summaries/settings.html#passdb_driver\">passdb_driver</a></code>"
    ],
    "seealso": [
      "<a href=\"/main/core/config/auth/passdb.html\">passdb</a>",
      "<code><a href=\"/main/core/summaries/settings.html#passdb_name\">passdb_name</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#passdb_driver\">passdb_driver</a></code>"
    ],
    "text": "<p>Creates a new <a href=\"/main/core/config/auth/passdb.html\">passdb</a>. The filter name refers to the\n<code><a href=\"/main/core/summaries/settings.html#passdb_name\">passdb_name</a></code> setting.</p>\n"
  },
  "passdb_name": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#passdb\">passdb</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#passdb_driver\">passdb_driver</a></code>"
    ],
    "text": "<p>Name of the passdb. The <code><a href=\"/main/core/summaries/settings.html#passdb\">passdb</a></code> filter name refers to this setting.\nIf the <code><a href=\"/main/core/summaries/settings.html#passdb_driver\">passdb_driver</a></code> setting is empty, the <code>passdb_name</code> is used\nas the driver. This allows doing e.g.:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>passdb passwd-file {</span></span>\n<span class=\"line\"><span>  passwd_file_path = /etc/dovecot/passwd</span></span></code></pre>\n</div>"
  },
  "passdb_driver": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#passdb_name\">passdb_name</a></code>",
      "<a href=\"/main/core/config/auth/passdb.html\">passdb</a>",
      "<a href=\"/main/core/config/auth/databases/overview.html\">Authentication Databases</a>"
    ],
    "text": "<p>The driver used for this password database. If empty, defaults to\n<code><a href=\"/main/core/summaries/settings.html#passdb_name\">passdb_name</a></code>.</p>\n"
  },
  "passdb_fields": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/auth/passdb.html#extra-fields\">passdb: Extra Fields</a>"
    ],
    "text": "<p>Passdb fields (and <a href=\"/main/core/config/auth/passdb.html#extra-fields\">passdb: Extra Fields</a>). The values can contain\n<a href=\"/main/core/settings/variables.html\">%variables</a>. All <code>%variables</code> used here reflect\nthe state <strong>after</strong> the current passdb lookup, and can refer to fields returned\nby previous passdb lookups. Depending on the passdb driver, it can also refer\nto variable fields returned by it (e.g. <code>%{ldap:fieldName}</code>).</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>The LDAP driver provides additional specific variables,\nsee <a href=\"/main/core/config/auth/databases/ldap.html\">LDAP authentication</a> for more details.</p>\n</div>\n<p>For example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>passdb ldap {</span></span>\n<span class=\"line\"><span>  fields {</span></span>\n<span class=\"line\"><span>    user = %{ldap:userId}</span></span>\n<span class=\"line\"><span>    proxy = yes</span></span>\n<span class=\"line\"><span>    host = %{ldap:proxyHost}</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "passdb_fields_import_all": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>yes</code><br />For <code>passdb ldap</code> the default is <code>no</code>.",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#passdb_fields\">passdb_fields</a></code>"
    ],
    "text": "<p>If yes, import all fields returned by the passdb lookup. If no, require\n<code><a href=\"/main/core/summaries/settings.html#passdb_fields\">passdb_fields</a></code> to explicitly add wanted fields.</p>\n"
  },
  "passdb_default_password_scheme": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>CRYPT</code><br />specific <a href=\"/main/core/config/auth/passdb.html\">passdb</a> have different defaults<br />\n<code>passdb_static</code>: <code>PLAIN</code>",
    "changed": [
      {
        "text": "<p>Changed from <code>PLAIN</code> to <code>CRYPT</code>.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.2.0</span>"
      }
    ],
    "text": "<p>The scheme that passwords are in the passdb, unless overridden by the passdb\nentry (typically by prefixing with <code>{SCHEME}</code>).</p>\n"
  },
  "passdb_mechanisms_filter": {
    "tags": [
      "passdb"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>Skip the passdb if non-empty and the current auth mechanism is not listed here.\nIf the value contains <code>lookup</code>, it matches for non-authenticating passdb\nlookups (e.g. lmtp/doveadm lookups).</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>passdb passwd-file {</span></span>\n<span class=\"line\"><span>  driver = passwd-file</span></span>\n<span class=\"line\"><span>  mechanisms_filter = PLAIN LOGIN</span></span>\n<span class=\"line\"><span>  # ...</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "passdb_username_filter": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Skip the passdb if non-empty and the username doesn't match the filter. This is\nmainly used to assign specific passdbs to specific domains. Space or\ncomma-separated list of username filters that can have <code>*</code> or <code>?</code>\nwildcards. If any of the filters matches, the filter succeeds. Define negative\nmatches by preceding <code>!</code>. If any of the negative filter matches, the filter\nwon't succeed.</p>\n<p><strong>Example</strong>:</p>\n<ul>\n<li>Filter: <code>*@example.com *@example2.com !user@example.com</code></li>\n<li>Matches:\n<ul>\n<li><code>any@example.com</code></li>\n<li><code>user@example2.com</code></li>\n</ul>\n</li>\n<li>Won't match:\n<ul>\n<li><code>user@example.com</code></li>\n</ul>\n</li>\n</ul>\n"
  },
  "passdb_skip": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "never",
      "authenticated",
      "unauthenticated"
    ],
    "default": "<code>never</code>",
    "text": "<p>Configures when passdbs should be skipped:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>never</code></td>\n<td>Never skip over this passdb.</td>\n</tr>\n<tr>\n<td><code>authenticated</code></td>\n<td>Skip if an earlier passdb already authenticated the user successfully.</td>\n</tr>\n<tr>\n<td><code>unauthenticated</code></td>\n<td>Skip if user hasn't yet been successfully authenticated by the previous passdbs.</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "passdb_static_password": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The static password to be used for all users authenticating using this passdb.</p>\n"
  },
  "passdb_use_worker": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code><br />specific <a href=\"/main/core/config/auth/passdb.html\">passdb</a> have different defaults",
    "text": "<p>If <code>yes</code>, run the passdb lookup in auth-worker process instead of the main\nauth process. This setting is only used by some of the passdb drivers.</p>\n"
  },
  "passdb_result_success": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "return-ok",
      "return",
      "return-fail",
      "continue",
      "continue-ok",
      "continue-fail"
    ],
    "default": "<code>return-ok</code>",
    "seealso": [
      "<a href=\"/main/core/config/auth/passdb.html#result-values\">passdb: Result Values</a>"
    ],
    "text": "<p>What to do after the passdb authentication succeeded. Possible values and their\nmeaning are described fully at <a href=\"/main/core/config/auth/passdb.html#result-values\">passdb: Result Values</a>.</p>\n<p>This is commonly used together with master passdb to specify that even after a\nsuccessful master user authentication, the authentication should continue to\nthe actual non-master passdb to lookup the user.</p>\n"
  },
  "passdb_result_failure": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "return-ok",
      "return",
      "return-fail",
      "continue",
      "continue-ok",
      "continue-fail"
    ],
    "default": "<code>continue</code>",
    "seealso": [
      "<a href=\"/main/core/config/auth/passdb.html#result-values\">passdb: Result Values</a>"
    ],
    "text": "<p>What to do after the passdb authentication failed. Possible values and their\nmeaning are described fully at <a href=\"/main/core/config/auth/passdb.html#result-values\">passdb: Result Values</a>.</p>\n"
  },
  "passdb_result_internalfail": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "return-ok",
      "return",
      "return-fail",
      "continue",
      "continue-ok",
      "continue-fail"
    ],
    "default": "<code>continue</code>",
    "seealso": [
      "<a href=\"/main/core/config/auth/passdb.html#result-values\">passdb: Result Values</a>"
    ],
    "text": "<p>What to do after the passdb authentication failed due to an internal error.\nPossible values and their meaning are described fully at\n<a href=\"/main/core/config/auth/passdb.html#result-values\">passdb: Result Values</a>. If any of the passdbs had an internal failure\nand the final passdb also returns <code>continue</code> the authentication will fail\nwith <code>internal error</code>.</p>\n"
  },
  "passdb_deny": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>If <code>yes</code> and the user is found from the <code>denied user database</code> the\nauthentication will fail.</p>\n"
  },
  "passdb_master": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>If <code>yes</code> and the user is found from the <a href=\"/main/core/config/auth/master_users.html\">Master Users</a> the user\nis allowed to login as other users.</p>\n"
  },
  "passdb_sql_query": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>SQL query to lookup the passdb fields (<code>password</code> and other extra fields).</p>\n"
  },
  "passdb_sql_update_query": {
    "tags": [
      "passdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>SQL query to update the password. Currently used only by the <code>OTP</code> auth\nmechanism.</p>\n"
  },
  "passdb_pam_max_requests": {
    "tags": [
      "passdb",
      "passdb-pam"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>100</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#service_restart_request_count\">service_restart_request_count</a></code>"
    ],
    "text": "<p>Number of requests a auth-worker process handles for passdb pam before it dies.\nThis configures similar behaviour as the\n<code><a href=\"/main/core/summaries/settings.html#service_restart_request_count\">service_restart_request_count</a></code> setting but it limits only the number\nof pam passdb requests, not all requests to be handled by an auth-worker.</p>\n"
  },
  "passdb_pam_failure_show_msg": {
    "tags": [
      "passdb",
      "passdb-pam"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Replace the default <code>Authentication failed</code> reply with PAM's failure.</p>\n"
  },
  "passdb_pam_service_name": {
    "tags": [
      "passdb",
      "passdb-pam"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>dovecot</code>",
    "text": "<p>The PAM service name to be used with the pam passdb.</p>\n"
  },
  "passdb_pam_setcred": {
    "tags": [
      "passdb",
      "passdb-pam"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Make Dovecot create PAM credentials. The credentials are never deleted, which\nmay cause problems with some PAM plugins.</p>\n"
  },
  "passdb_pam_session": {
    "tags": [
      "passdb",
      "passdb-pam"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Make Dovecot open a PAM session and close it immediately.</p>\n"
  },
  "passwd_file_path": {
    "tags": [
      "passwd-file"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Path to the passwd-file.</p>\n"
  },
  "pop3_client_workarounds": {
    "tags": [
      "pop3"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>Workarounds for various POP3 client bugs can be enabled here.</p>\n<p>The following values are currently supported:</p>\n<dl>\n<dt><code>oe-ns-eoh</code></dt>\n<dd>Because Outlook Express and Netscape Mail expect an end-of-headers\nline, this option sends one explicitly if none has been sent.</dd>\n<dt><code>outlook-no-nuls</code></dt>\n<dd>Because Outlook and Outlook Express hang if messages contain NUL\ncharacters, this setting replaces each of them with a <code>0x80</code> character.</dd>\n</dl>\n"
  },
  "pop3_delete_type": {
    "default": "<code>default</code>",
    "tags": [
      "pop3"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "default",
      "flag",
      "expunge"
    ],
    "text": "<p>Action to perform in POP3 when mails are deleted and\n<code><a href=\"/main/core/summaries/settings.html#pop3_deleted_flag\">pop3_deleted_flag</a></code> is enabled.</p>\n"
  },
  "pop3_deleted_flag": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#pop3_delete_type\">pop3_delete_type</a></code>"
    ],
    "tags": [
      "pop3"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Change POP3 behavior so a user cannot permanently delete messages via POP3.</p>\n<p>Instead, the messages are hidden from POP3 sessions by setting an IMAP\nflag, which Dovecot will filter out in future listings.</p>\n<p>To enable this behavior, enter the name of the IMAP keyword to use.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>This keyword will visible on IMAP clients for the message.</p>\n</div>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>pop3_deleted_flag = $POP3Deleted</span></span></code></pre>\n</div>"
  },
  "pop3_enable_last": {
    "default": "<code>no</code>",
    "tags": [
      "pop3"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Enable support for the POP3 LAST command.</p>\n<p>While this command has been removed from newer POP3 specs, some clients\nstill attempt to use it. Enabling this causes the RSET command to clear all\n\\Seen flags that messages may have.</p>\n"
  },
  "pop3_fast_size_lookups": {
    "default": "<code>no</code>",
    "tags": [
      "pop3"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, use the virtual message size of the message for POP3 replies if\navailable.</p>\n<p>POP3 requires message sizes to be listed as if they contain CR+LF\nline breaks; however, many POP3 servers instead return the sizes with\npure line feeds (LFs), for the sake of speed.</p>\n<p>If enabled, use the virtual message size if available, before\nfalling back to the incorrect, physical size (used by many POP3\nservers) if judging the correct size would have required opening the\nmessage to determine.</p>\n"
  },
  "pop3_lock_session": {
    "default": "<code>no</code>",
    "tags": [
      "pop3"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, only one POP3 session may exist for any single user.</p>\n"
  },
  "pop3_logout_format": {
    "default": "<code>top=%{top_count}/%{top_bytes}, retr=%{retr_count}/%{retr_bytes}, del=%{deleted_count}/%{deleted_bytes}, size=%{message_bytes}</code>",
    "tags": [
      "pop3"
    ],
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "text": "<p>The string to display to the client on POP3 logout (informational only).</p>\n<p>Variables available (in addition to <code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code>):</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Variable Name</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>%{input}</code></td>\n<td>Bytes read from the client</td>\n</tr>\n<tr>\n<td><code>%{output}</code></td>\n<td>Bytes sent to the client</td>\n</tr>\n<tr>\n<td><code>%{top_count}</code></td>\n<td>Number of TOP commands run</td>\n</tr>\n<tr>\n<td><code>%{top_bytes}</code></td>\n<td>Bytes sent to the client because of TOP commands</td>\n</tr>\n<tr>\n<td><code>%{retr_count}</code></td>\n<td>Number of RETR commands run</td>\n</tr>\n<tr>\n<td><code>%{retr_bytes}</code></td>\n<td>Bytes sent to the client because of RETR commands</td>\n</tr>\n<tr>\n<td><code>%{deleted_count}</code></td>\n<td>Number of deleted messages</td>\n</tr>\n<tr>\n<td><code>%{deleted_bytes}</code></td>\n<td>Number of bytes in deleted messages</td>\n</tr>\n<tr>\n<td><code>%{message_count}</code></td>\n<td>Number of messages before deletion</td>\n</tr>\n<tr>\n<td><code>%{message_bytes}</code></td>\n<td>Mailbox size, in bytes, before deletion</td>\n</tr>\n<tr>\n<td><code>%{uidl_change}</code></td>\n<td>The old and the new UIDL hash (which can be useful for identifying unexpected changes in UIDLs)</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "pop3_no_flag_updates": {
    "default": "<code>no</code>",
    "tags": [
      "pop3"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, do not attempt to mark mail messages as seen or non-recent when\na POP3 session is involved.</p>\n"
  },
  "pop3_reuse_xuidl": {
    "default": "<code>no</code>",
    "tags": [
      "pop3"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, and the mail message has an X-UIDL header, use this as the\nmail's UIDL.</p>\n"
  },
  "pop3_save_uidl": {
    "default": "<code>no</code>",
    "tags": [
      "maildir",
      "pop3"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p><a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a> only: If enabled, allow permanent saving of UIDLs sent to\nPOP3 clients so that changes to <code><a href=\"/main/core/summaries/settings.html#pop3_uidl_format\">pop3_uidl_format</a></code> don't cause\nfuture changes to the corresponding UIDLs.</p>\n"
  },
  "pop3_uidl_duplicates": {
    "default": "<code>allow</code>",
    "tags": [
      "pop3"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "allow",
      "rename"
    ],
    "text": "<p>How to handle any duplicate POP3 UIDLs that may exist.</p>\n<p>Options:</p>\n<dl>\n<dt><code>allow</code></dt>\n<dd>Show duplicates to clients.</dd>\n<dt><code>rename</code></dt>\n<dd>Append a temporary counter (such as -2 or -3) after the UIDL</dd>\n</dl>\n"
  },
  "pop3_uidl_format": {
    "default": "<code>%{uid | hex(8)}%{uidvalidity | hex(8)}</code>",
    "tags": [
      "pop3"
    ],
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "text": "<p>The POP3 unique mail identifier (UIDL) format to use.</p>\n<p>The following variables can be used in combination with the\nstandard variable filters (e.g., <code>%{filename | upper}</code> supplies the filename\nin uppercase) and with <code><a href=\"/main/core/settings/variables.html#global-variables\">Global variables</a></code>:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Variable Name</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>%{uidvalidity}</code></td>\n<td>Mailbox's IMAP UIDVALIDITY value</td>\n</tr>\n<tr>\n<td><code>%{uid}</code></td>\n<td>IMAP UID associated with the message</td>\n</tr>\n<tr>\n<td><code>%{md5}</code></td>\n<td>MD5 sum of the mailbox headers in hex (<a href=\"/main/core/config/mailbox_formats/mbox.html\">mbox</a> only)</td>\n</tr>\n<tr>\n<td><code>%{filename}</code></td>\n<td>Filename (<a href=\"/main/core/config/mailbox_formats/maildir.html\">Maildir</a> only)</td>\n</tr>\n<tr>\n<td><code>%{guid}</code></td>\n<td>Dovecot GUID for the message</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "pop3c_features": {
    "tags": [
      "pop3c"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>List of features, optimizations, and workarounds that can be enabled.</p>\n<p>Workarounds:</p>\n<dl>\n<dt><code>no-pipelining</code></dt>\n<dd>Prevents use of the PIPELINING extension even when it is advertised.</dd>\n</dl>\n"
  },
  "pop3c_host": {
    "tags": [
      "pop3c"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The remote POP3 host to connect to.</p>\n"
  },
  "pop3c_master_user": {
    "tags": [
      "pop3c"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#pop3c_password\">pop3c_password</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#pop3c_user\">pop3c_user</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The master username to authenticate as on the remote POP3 host.</p>\n<p>To authenticate as a master user but use a separate login user, the\nfollowing configuration should be employed, where the credentials are\nrepresented by masteruser and masteruser-secret:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>pop3c_user = %{user}</span></span>\n<span class=\"line\"><span>pop3c_master_user = masteruser</span></span>\n<span class=\"line\"><span>pop3c_password = masteruser-secret</span></span></code></pre>\n</div><p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> can be used.</p>\n"
  },
  "pop3c_password": {
    "tags": [
      "pop3c"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#pop3c_master_user\">pop3c_master_user</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#pop3c_user\">pop3c_user</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The authentication password for the remote POP3 server.</p>\n<p>If using master users, this setting will be the password of the master user.</p>\n"
  },
  "pop3c_port": {
    "default": "<code>110</code>",
    "tags": [
      "pop3c"
    ],
    "values": [
      {
        "label": "Port Number",
        "url": "<a href=\"/main/core/settings/types.html#port-number\">Port Number</a>",
        "default_required": true
      }
    ],
    "text": "<p>The port on the remote POP3 host to connect to.</p>\n"
  },
  "pop3c_quick_received_date": {
    "default": "<code>no</code>",
    "tags": [
      "pop3c"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, pop3c doesn't require calling TOP for each message in order to\nget the metadata.</p>\n"
  },
  "pop3c_rawlog_dir": {
    "seealso": [
      "<a href=\"/main/core/admin/rawlog.html\">rawlog</a>"
    ],
    "tags": [
      "pop3c"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Log all POP3 traffic input/output to this directory.</p>\n"
  },
  "pop3c_ssl": {
    "default": "<code>no</code>",
    "tags": [
      "pop3c"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "no",
      "pop3s",
      "starttls"
    ],
    "text": "<p>Use TLS to connect to the remote POP3 server.</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>no</code></td>\n<td>No TLS</td>\n</tr>\n<tr>\n<td><code>pop3s</code></td>\n<td>Explicitly connect to remote POP3 port using TLS</td>\n</tr>\n<tr>\n<td><code>starttls</code></td>\n<td>Use POP3 STARTTLS command to switch to TLS connection</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "pop3c_ssl_verify": {
    "default": "<code>yes</code>",
    "tags": [
      "pop3c"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#pop3c_ssl\">pop3c_ssl</a></code>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Verify remote POP3 TLS certificate?</p>\n<p>Verification may be disabled during testing, but should be enabled during\nproduction use.</p>\n<p>Only used if <code><a href=\"/main/core/summaries/settings.html#pop3c_ssl\">pop3c_ssl</a></code> is enabled.</p>\n"
  },
  "pop3c_user": {
    "default": "<code>%{user}</code>",
    "tags": [
      "pop3c"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#pop3c_master_user\">pop3c_master_user</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#pop3c_password\">pop3c_password</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The user identity to be used for performing authentication to the source\nPOP3 server.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> can be used.</p>\n"
  },
  "postmaster_address": {
    "default": "<code>postmaster@%{user|domain|default(hostname)}</code>",
    "tags": [
      "lda",
      "lmtp"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The From address from which email rejection messages (bounces) are sent.</p>\n<p>As used here, <code>%{user | domain}</code> expands to the domain of the local user.\nOther <code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> can be used as well.</p>\n"
  },
  "process_shutdown_filter": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Filter to specify which events shutdown the process after finishing the\ncurrent connections. This is mainly intended to save memory by preventing\nlong-running imap processes that use a lot of memory (due to libc not freeing\nall of it to the OS). The syntax of the filter is described in\n<a href=\"/main/core/config/events/filter.html#global-filter-syntax\">Global Metric Filters</a>.</p>\n<p>For example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>process_shutdown_filter = \"event=mail_user_session_finished AND rss > 20MB\"</span></span></code></pre>\n</div>",
    "default": "<code>For imap, pop3 and submission: event=mail_user_session_finished AND rss &gt; 20MB</code>"
  },
  "protocols": {
    "default": "",
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>The list of protocols to enable. By default all protocols are disabled.</p>\n<p>For example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span># Only IMAP protocol enabled:</span></span>\n<span class=\"line\"><span>protocols = imap</span></span>\n<span class=\"line\"><span></span></span>\n<span class=\"line\"><span># Enable also LMTP protocol (on top of IMAP):</span></span>\n<span class=\"line\"><span>protocols {</span></span>\n<span class=\"line\"><span>  lmtp = yes</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "quota_full_tempfail": {
    "default": "<code>no</code>",
    "seealso": [
      "<a href=\"/main/core/plugins/quota.html\">quota plugin</a>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, return a temporary failure to the sending server if quota is\nexceeded. This allows the message to potentially be delivered later if the\naccount moves under the quota limit at the time of redelivery.</p>\n<p>If disabled, the message is bounced with a permanent error returned to the\nsending server.</p>\n"
  },
  "rawlog_dir": {
    "seealso": [
      "<a href=\"/main/core/admin/rawlog.html\">rawlog</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Directory where to create <code>*.in</code> and <code>*.out</code> rawlog files, one per TCP\nconnection. The directory must already exist and be writable by the process.\nNo error is logged if the directory doesn't exist.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> can be used.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>protocol imap {</span></span>\n<span class=\"line\"><span>  rawlog_dir = /tmp/rawlog/%{user}</span></span>\n<span class=\"line\"><span>  # if you want to put files into user's homedir, use this, do not use ~</span></span>\n<span class=\"line\"><span>  #rawlog_dir = %{home}/rawlog</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "recipient_delimiter": {
    "default": "<code>+</code>",
    "tags": [
      "sieve"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The separator between the :user and :detail address parts.</p>\n"
  },
  "rejection_reason": {
    "default": "<code>Your message to &lt;%{to}&gt; was automatically rejected:%{literal('\\r\\n')}%{reason}</code>",
    "tags": [
      "lda",
      "lmtp"
    ],
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "text": "<p>A human-readable message for the recipients of bounce messages.</p>\n<p>The following variables are allowed, including <code><a href=\"/main/core/settings/variables.html#global-variables\">Global variables</a></code>:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Variable Name</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>%{reason}</code></td>\n<td>Reason for rejection</td>\n</tr>\n<tr>\n<td><code>%{subject}</code></td>\n<td>Original subject line</td>\n</tr>\n<tr>\n<td><code>%{to}</code></td>\n<td>Recipient address</td>\n</tr>\n</tbody>\n</table>\n<p>The variable values are obtained from the mail being delivered or the\ndelivery protocol.</p>\n"
  },
  "rejection_subject": {
    "default": "<code>Rejected: %{subject}</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#rejection_reason\">rejection_reason</a></code>"
    ],
    "tags": [
      "lda",
      "lmtp"
    ],
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "text": "<p>The Subject: header to use for bounce messages.</p>\n<p>See <code><a href=\"/main/core/summaries/settings.html#rejection_reason\">rejection_reason</a></code> for the list of variables that can be used.</p>\n"
  },
  "sendmail_path": {
    "default": "<code>/usr/sbin/sendmail</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The binary to use for sending email.</p>\n<p>Used only if <code><a href=\"/main/core/summaries/settings.html#submission_host\">submission_host</a></code> is not set.</p>\n"
  },
  "service": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#service_name\">service_name</a></code>"
    ],
    "text": "<p>Creates a new service to the list of services. The filter name refers to the\n<code><a href=\"/main/core/summaries/settings.html#service_name\">service_name</a></code> setting.</p>\n"
  },
  "service_name": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#service\">service</a></code>"
    ],
    "text": "<p>Name of the service. The <code><a href=\"/main/core/summaries/settings.html#service\">service</a></code> filter name refers to this\nsetting.</p>\n"
  },
  "service_protocol": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#protocols\">protocols</a></code>"
    ],
    "text": "<p>If non-empty, this service is enabled only when the protocol name is listed in\n<code><a href=\"/main/core/summaries/settings.html#protocols\">protocols</a></code> setting.</p>\n"
  },
  "service_type": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#service_process_limit\">service_process_limit</a></code>"
    ],
    "text": "<p>Type of this service:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>&lt;empty&gt;</code></td>\n<td>The default.</td>\n</tr>\n<tr>\n<td><code>login</code></td>\n<td>Used by login services. The login processes have &quot;all processes full&quot; notification fd. It's used by the processes to figure out when no more client connections can be accepted because client and process limits have been reached. The login processes can then kill some of their oldest connections that haven't logged in yet.</td>\n</tr>\n<tr>\n<td><code>worker</code></td>\n<td>Used by various worker services. It's normal for worker processes to fill up to <code><a href=\"/main/core/summaries/settings.html#service_process_limit\">service_process_limit</a></code>, and there shouldn't be a warning logged about it.</td>\n</tr>\n<tr>\n<td><code>startup</code></td>\n<td>Creates one process at startup.</td>\n</tr>\n<tr>\n<td><code>log</code><br/><code>config</code><br/><code>anvil</code></td>\n<td>Treated specially by these specific services.</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "service_executable": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#base_dir\">base_dir</a></code>"
    ],
    "text": "<p>The binary path to execute and its parameters. If the path doesn't begin with\n<code>/</code>, it's relative to <code><a href=\"/main/core/summaries/settings.html#base_dir\">base_dir</a></code>.</p>\n"
  },
  "service_user": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#default_login_user\">default_login_user</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#default_internal_user\">default_internal_user</a></code>"
    ],
    "text": "<p>UNIX user (UID) which runs this process. <code><a href=\"/main/core/summaries/settings.html#default_login_user\">default_login_user</a></code> should\nbe used for <code>type=login</code> processes and <code><a href=\"/main/core/summaries/settings.html#default_internal_user\">default_internal_user</a></code>\nshould be used for other processes that don't require root privileges.</p>\n"
  },
  "service_group": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The primary UNIX group (GID) which runs this process.</p>\n"
  },
  "service_privileged_group": {
    "tags": [
      "service"
    ],
    "advanced": true,
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_privileged_group\">mail_privileged_group</a></code>"
    ],
    "text": "<p>Secondary UNIX group - which is disabled by default - but can be enabled by the\nprocess. <code><a href=\"/main/core/summaries/settings.html#mail_privileged_group\">mail_privileged_group</a></code> setting is a more user friendly way\nto use this setting for mail processes.</p>\n"
  },
  "service_extra_groups": {
    "tags": [
      "service"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mail_access_groups\">mail_access_groups</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Secondary UNIX groups that this process belongs to.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>This may be dangerous to use for the same reason as\n<code><a href=\"/main/core/summaries/settings.html#mail_access_groups\">mail_access_groups</a></code>.</p>\n</div>\n"
  },
  "service_chroot": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#base_dir\">base_dir</a></code>"
    ],
    "text": "<p>The processes are chrooted to this directory at startup. Relative to\n<code><a href=\"/main/core/summaries/settings.html#base_dir\">base_dir</a></code>.</p>\n"
  },
  "service_drop_priv_before_exec": {
    "tags": [
      "service"
    ],
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Drop all privileges after forking, but before executing the binary. This is\nmainly useful for dumping core files on non-Linux OSes, since the processes are\nno longer in &quot;setuid&quot; mode. This setting can't be used with non-empty chroot.</p>\n"
  },
  "service_process_min_avail": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#service_client_limit\">service_client_limit</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#service_restart_request_count\">service_restart_request_count</a></code>"
    ],
    "text": "<p>Minimum number of processes that always should be available to accept more\nclient connections.</p>\n<p>Note that if <code><a href=\"/main/core/summaries/settings.html#service_client_limit\">service_client_limit = 1</a></code>, this means there are always\nthat many processes that are not doing anything. When a new process launches,\none of the idling processes will accept the connection and a new idling process\nis launched.</p>\n<ul>\n<li>For <code><a href=\"/main/core/summaries/settings.html#service_restart_request_count\">service_restart_request_count = 1</a></code> processes this decreases the\nlatency for handling new connections, because there's no need to wait for\nprocesses to fork. This is usually not necessary to to be set. Large\n<code><a href=\"/main/core/summaries/settings.html#service_process_min_avail\">service_process_min_avail</a></code> values might be useful in some special\ncases, like if there are a lot of POP3 users logging in exactly at the same\ntime to check mails.</li>\n<li>For <code><a href=\"/main/core/summaries/settings.html#service_restart_request_count\">service_restart_request_count</a></code> to a value <code>!=1</code> and\n<code><a href=\"/main/core/summaries/settings.html#service_client_limit\">service_client_limit</a></code> to a value <code>&gt;1</code> processes it could be set\nto the number of CPU cores (you can use <code>%{system:cpu_count}</code>) on the\nsystem to balance the load among them. This is commonly used with <code>*-login</code>\nprocesses.</li>\n<li>For <code><a href=\"/main/core/summaries/settings.html#service_restart_request_count\">service_restart_request_count</a></code> with a value of <code>!=1</code> and\n<code><a href=\"/main/core/summaries/settings.html#service_client_limit\">service_client_limit = 1</a></code> processes it is likely not useful to use\nthis, because generally there are already some idling processes waiting to\naccept new connections. However, it's not harmful either, since\n<code><a href=\"/main/core/summaries/settings.html#service_process_min_avail\">service_process_min_avail</a></code> includes the existing idling processes\nwhen counting how many new idling processes are needed.</li>\n</ul>\n"
  },
  "service_process_limit": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code><a href=\"/main/core/summaries/settings.html#default_process_limit\">default_process_limit</a></code>",
    "text": "<p>The maximum number of processes that may exist for this service.</p>\n"
  },
  "service_client_limit": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code><a href=\"/main/core/summaries/settings.html#default_client_limit\">default_client_limit</a></code>",
    "text": "<p>Maximum number of simultaneous client connections per process. Once this number\nof connections is received, the next incoming connection will prompt Dovecot to\nspawn another process.</p>\n"
  },
  "service_restart_request_count": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>unlimited</code>",
    "text": "<p>Number of client connections to handle until the process kills itself. Use\n<code>unlimited</code> to keep the process alive. <code>1</code> means only a single connection\nis handled until the process is stopped - this is the most secure choice since\nthere's no way for one connection's state to leak to the next one. For better\nperformance this can be set higher, but ideally not <code>unlimited</code> since more\ncomplex services can have small memory leaks and/or memory fragmentation and\nthe process should get restarted eventually. For example <code>100</code> or <code>1000</code>\ncan be good values.</p>\n"
  },
  "service_idle_kill_interval": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": "<code><a href=\"/main/core/summaries/settings.html#default_idle_kill_interval\">default_idle_kill_interval</a></code>",
    "text": "<p>Time interval between killing extra idling processes. During the interval the\nmaster process tracks the lowest number of idling processes for the service.\nAfterwards it sends <code>SIGINT</code> notification to that many idling processes. If\nthe processes are still idling when receiving the signal, they shut down\nthemselves.</p>\n<p>Using <code>infinite</code> disables the idle-killing.</p>\n"
  },
  "service_vsz_limit": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": "<code><a href=\"/main/core/summaries/settings.html#default_vsz_limit\">default_vsz_limit</a></code>",
    "text": "<p>Limit the process's address space (both <code>RLIMIT_DATA</code> and <code>RLIMIT_AS</code> if\navailable). When the space is reached, some memory allocations may start\nfailing with &quot;Out of memory&quot;, or the kernel may kill the process with signal 9.\nThis setting is mainly intended to prevent memory leaks from eating up all of\nthe memory, but there can be also legitimate reasons why the process reaches\nthis limit. For example a huge mailbox may not be accessed if this limit is too\nlow. Use <code>unlimited</code> to disable this entirely.</p>\n"
  },
  "shutdown_clients": {
    "default": "<code>yes</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, all processes are killed when the master process is shutdown.</p>\n<p>Otherwise, existing processes will continue to run. This may be useful to not\ninterrupt earlier sessions, but may not be desirable if restarting Dovecot\nto apply a security update, for example.</p>\n"
  },
  "sql_driver": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>SQL driver to use for any SQL database accesses.</p>\n"
  },
  "ssl": {
    "default": "<code>yes</code>",
    "seealso": [
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>",
      "<code><a href=\"/main/core/summaries/settings.html#inet_listener_ssl\">inet_listener_ssl</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "yes",
      "no",
      "required"
    ],
    "text": "<p>The level of SSL support. This setting affects both the implicit SSL ports\nand the STARTTLS commands.</p>\n<p>Options:</p>\n<dl>\n<dt><code>no</code></dt>\n<dd>SSL/TLS is completely disabled.</dd>\n<dt><code>yes</code></dt>\n<dd>SSL/TLS is enabled, but not necessarily required for clients.</dd>\n<dt><code>required</code></dt>\n<dd>SSL/TLS (or otherwise secure connection) is required for all imap, pop3, managesieve and\nsubmission protocol client connections. This differs from\n<code><a href=\"/main/core/summaries/settings.html#auth_allow_cleartext\">auth_allow_cleartext</a></code> in that even non-cleartext\nauthentication mechanisms aren't allowed without SSL/TLS. See\n<a href=\"/main/core/config/ssl.html#secured-connections\">secured connections</a> for details which connections are considered\n<code>secured</code>.</dd>\n</dl>\n<p>The value of this setting affects the <code>secured</code> state of connections. See\n<a href=\"/main/core/config/ssl.html#secured-connections\">secured connections</a>.</p>\n<p>Note: Do not confuse this with the <code><a href=\"/main/core/summaries/settings.html#inet_listener_ssl\">inet_listener_ssl</a></code> setting,\nwhich gets used inside <code>inet_listener { ssl }</code>.</p>\n"
  },
  "ssl_server_alt_cert_file": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "File",
        "url": "<a href=\"/main/core/settings/types.html#file\">File</a>"
      }
    ],
    "text": "<p>Alternative SSL certificate that will be used if the algorithm differs from\nthe primary certificate.</p>\n<p>This is useful when migrating to e.g. an ECDSA certificate.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>ssl_server_alt_cert_file = /path/to/alternative/cert.pem</span></span></code></pre>\n</div>"
  },
  "ssl_server_alt_key_file": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_server_alt_cert_file\">ssl_server_alt_cert_file</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "File",
        "url": "<a href=\"/main/core/settings/types.html#file\">File</a>"
      }
    ],
    "text": "<p>Private key for <code><a href=\"/main/core/summaries/settings.html#ssl_server_alt_cert_file\">ssl_server_alt_cert_file</a></code>.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>ssl_server_alt_key_file = /path/to/alternative/key.pem</span></span>\n<span class=\"line\"><span>ssl_server_alt_cert_file = /path/to/alternative/cert.pem</span></span></code></pre>\n</div>"
  },
  "ssl_server_ca_file": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_client_require_valid_cert\">ssl_client_require_valid_cert</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_server_request_client_cert\">ssl_server_request_client_cert</a></code>"
    ],
    "values": [
      {
        "label": "File",
        "url": "<a href=\"/main/core/settings/types.html#file\">File</a>"
      }
    ],
    "text": "<p>List of SSL CA certificates that are used to validate whether SSL\ncertificates presented by incoming imap/pop3/etc. client connections are\nvalid.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>ssl_server_ca_file = /etc/dovecot/ca.crt</span></span>\n<span class=\"line\"><span>ssl_server_request_client_cert = yes</span></span>\n<span class=\"line\"><span>auth_ssl_require_client_cert = yes</span></span></code></pre>\n</div>"
  },
  "ssl_server_cert_file": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_server_key_file\">ssl_server_key_file</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "File",
        "url": "<a href=\"/main/core/settings/types.html#file\">File</a>"
      }
    ],
    "text": "<p>Path to the PEM-encoded X.509 SSL/TLS certificate presented for incoming\nimap/pop3/etc. client connections.</p>\n<p>The <code><a href=\"/main/core/summaries/settings.html#ssl_server_key_file\">ssl_server_key_file</a></code> is also needed for the private certificate.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>ssl_server_cert_file = /etc/ssl/private/dovecot.crt</span></span>\n<span class=\"line\"><span>ssl_server_key_file = /etc/ssl/private/dovecot.key</span></span></code></pre>\n</div>"
  },
  "ssl_server_cert_username_field": {
    "default": "<code>commonName</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Field name in the SSL client certificate that is used for\n<code><a href=\"/main/core/summaries/settings.html#auth_ssl_username_from_cert\">auth_ssl_username_from_cert</a></code>.</p>\n<p>The most common choices are <code>commonName</code> and <code>x500UniqueIdentifier</code>.</p>\n<p>Note: <code><a href=\"/main/core/summaries/settings.html#auth_ssl_username_from_cert\">auth_ssl_username_from_cert</a></code> MUST be enabled.</p>\n"
  },
  "ssl_peer_certificate_fingerprint_hash": {
    "default": "",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>",
      "<a href=\"/main/core/config/auth/passdb.html#check-client-fp\">passdb: check_client_fp Extra field</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>An OpenSSL digest algorithm name to use to hash peer certificate names.\nSetting this value is required for <code>ssl_client_cert_fp</code> and <code>ssl_client_cert_pubkey_fp</code>\navailability in <code><a href=\"/main/core/summaries/settings.html#login_log_format_elements\">login_log_format_elements</a></code> and also in authentication\nvariables. Weak algorithms are explicitly disallowed, such as MD5.</p>\n"
  },
  "ssl_cipher_list": {
    "default": "<code>ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH (for ssl_server, empty for ssl_client)</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_cipher_suites\">ssl_cipher_suites</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_min_protocol\">ssl_min_protocol</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "tags": [
      "ssl-ldap",
      "sql-mysql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The list of SSL ciphers to use for TLSv1.2 and below connections, in order\nof preference. Use <code><a href=\"/main/core/summaries/settings.html#ssl_cipher_suites\">ssl_cipher_suites</a></code> for TLSv1.3 connections.</p>\n<p>You do not need to edit this setting in order to disable specific SSL\nprotocols; that is best done with <code><a href=\"/main/core/summaries/settings.html#ssl_min_protocol\">ssl_min_protocol</a></code> instead.</p>\n<p>This setting is used for both incoming and outgoing SSL connections.</p>\n"
  },
  "ssl_cipher_suites": {
    "default": "<code>&lt;OpenSSL version specific&gt;</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_cipher_list\">ssl_cipher_list</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The list of SSL cipher suites to use for TLSv1.3 connections, in order of\npreference. Use <code><a href=\"/main/core/summaries/settings.html#ssl_cipher_list\">ssl_cipher_list</a></code> for TLSv1.2 and below connections.</p>\n<p>This setting is used for both incoming and outgoing SSL connections.</p>\n<p>See: <a href=\"https://wiki.openssl.org/index.php/TLS1.3#Ciphersuites\" target=\"_blank\" rel=\"noreferrer\">https://wiki.openssl.org/index.php/TLS1.3#Ciphersuites</a></p>\n"
  },
  "ssl_client": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_server\">ssl_server</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Named filter, which can be used for specifying SSL client settings.</p>\n",
    "no_default": true
  },
  "ssl_client_ca_dir": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "tags": [
      "ssl-ldap",
      "sql-mysql"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The directory where trusted SSL CA certificates can be found. For example\n<code>/etc/ssl/certs</code>. These certificates are used only for outgoing SSL\nconnections (e.g. with the imapc driver).</p>\n<p>For extra security you might want to point to a directory containing\ncertificates only for the CAs that are actually needed for the server\noperation instead of all the root CAs.</p>\n"
  },
  "ssl_client_ca_file": {
    "tags": [
      "ssl-ldap",
      "ssl-cassandra",
      "sql-mysql"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "File",
        "url": "<a href=\"/main/core/settings/types.html#file\">File</a>"
      }
    ],
    "text": "<p>File containing the trusted SSL CA certificates. For example\n<code>/etc/ssl/certs/ca-bundle.crt</code>.</p>\n<p>These certificates are used only for outgoing SSL connections (e.g. with\nthe <a href=\"/main/core/config/mailbox_formats/imapc.html\">imapc</a> driver).</p>\n<p>Note that this setting isn't recommended to be used with large CA bundles,\nbecause all the certificates are read into memory. This leads to excessive\nmemory usage, because it gets multiplied by the number of imap processes.\nIt's better to either use <code><a href=\"/main/core/summaries/settings.html#ssl_client_ca_dir\">ssl_client_ca_dir</a></code> setting or\nuse a CA bundle that only contains the CAs that are actually necessary for\nthe server operation.</p>\n"
  },
  "ssl_client_cert_file": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_client_key_file\">ssl_client_key_file</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "tags": [
      "ssl-ldap",
      "ssl-cassandra",
      "sql-mysql"
    ],
    "values": [
      {
        "label": "File",
        "url": "<a href=\"/main/core/settings/types.html#file\">File</a>"
      }
    ],
    "text": "<p>Public SSL certificate used for outgoing SSL connections. This is generally\nneeded only when the server authenticates the client using the certificate.</p>\n<p><code><a href=\"/main/core/summaries/settings.html#ssl_client_key_file\">ssl_client_key_file</a></code> is also needed for the private certificate.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>ssl_client_cert_file = /etc/dovecot/dovecot-client.crt</span></span>\n<span class=\"line\"><span>ssl_client_key_file = /etc/dovecot/dovecot-client.key</span></span></code></pre>\n</div>"
  },
  "ssl_client_key_file": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_client_cert_file\">ssl_client_cert_file</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "tags": [
      "ssl-ldap",
      "ssl-cassandra",
      "sql-mysql"
    ],
    "values": [
      {
        "label": "File",
        "url": "<a href=\"/main/core/settings/types.html#file\">File</a>"
      }
    ],
    "text": "<p>Private key for <code><a href=\"/main/core/summaries/settings.html#ssl_client_cert_file\">ssl_client_cert_file</a></code>. If it is password protected,\nset the password with <code><a href=\"/main/core/summaries/settings.html#ssl_client_key_password\">ssl_client_key_password</a></code>.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>ssl_client_cert_file = /etc/dovecot/dovecot-client.crt</span></span>\n<span class=\"line\"><span>ssl_client_key_file = /etc/dovecot/dovecot-client.key</span></span></code></pre>\n</div>"
  },
  "ssl_client_key_password": {
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_client_key_file\">ssl_client_key_file</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "tags": [
      "ssl-cassandra"
    ],
    "text": "<p>Password for the <code><a href=\"/main/core/summaries/settings.html#ssl_client_key_file\">ssl_client_key_file</a></code>.</p>\n"
  },
  "ssl_crypto_device": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Available Values: &lt;Obtain by running <code>openssl engine</code> command&gt;</p>\n<p>Which SSL crypto device to use.</p>\n"
  },
  "ssl_curve_list": {
    "default": "<code>&lt;defaults from the SSL library&gt;</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "tags": [
      "ssl-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Colon separated list of elliptic curves to use, in order of preference.\nAn empty value uses the defaults from the SSL library.</p>\n<p>This setting is used for both incoming and outgoing SSL connections.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>ssl_curve_list = P-521:P-384:P-256</span></span></code></pre>\n</div>"
  },
  "ssl_server_dh_file": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "File",
        "url": "<a href=\"/main/core/settings/types.html#file\">File</a>"
      }
    ],
    "text": "<p>Path to the Diffie-Hellman parameters file. This setting isn't needed if using\nonly ECDSA certificates.</p>\n<p>You can generate a new parameters file by, for example, running\n<code>openssl dhparam -out dh.pem 4096</code> on a machine with sufficient entropy\n(this may take some time).</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>ssl_server_dh_file = /path/to/dh.pem</span></span></code></pre>\n</div>"
  },
  "ssl_client_require_valid_cert": {
    "default": "<code>yes</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "tags": [
      "ssl-ldap",
      "ssl-cassandra",
      "sql-mysql"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Require a valid certificate when connecting to external SSL services?</p>\n"
  },
  "ssl_server_key_file": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_server_cert_file\">ssl_server_cert_file</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_server_key_password\">ssl_server_key_password</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "File",
        "url": "<a href=\"/main/core/settings/types.html#file\">File</a>"
      }
    ],
    "text": "<p>Path to the PEM-encoded X.509 SSL/TLS private key for\n<code><a href=\"/main/core/summaries/settings.html#ssl_server_cert_file\">ssl_server_cert_file</a></code>.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>ssl_server_cert_file = /etc/ssl/private/dovecot.crt</span></span>\n<span class=\"line\"><span>ssl_server_key_file = /etc/ssl/private/dovecot.key</span></span></code></pre>\n</div>"
  },
  "ssl_server_key_password": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_server_key_file\">ssl_server_key_file</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The password to use if <code><a href=\"/main/core/summaries/settings.html#ssl_server_key_file\">ssl_server_key_file</a></code> is password-protected.</p>\n<p>Since this file is often world-readable, you may wish to specify the path\nto a file containing the password, rather than the password itself, by\nusing the format <code>ssl_server_key_password = &lt;path</code> here. The path should\nbe to a root-owned file with mode 0600.</p>\n<p>Alternatively, you can supply the password via the -p parameter at startup.</p>\n"
  },
  "ssl_min_protocol": {
    "default": "<code>TLSv1.2</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_cipher_list\">ssl_cipher_list</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "tags": [
      "ssl-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The minimum SSL protocol version Dovecot accepts. It cannot be empty.</p>\n<p>This setting is used for both incoming and outgoing SSL connections.</p>\n<p>Supported values are:</p>\n<dl>\n<dt><code>ANY</code></dt>\n<dd>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>This value is meant for tests only. It should not be used in any\ndeployment of any value/relevance.</p>\n</div>\n</dd>\n<dt><code>TLSv1</code></dt>\n<dd>Support TLSv1+. (TLSv1 deprecated: <a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc8996\">RFC 8996</a>)</dd>\n<dt><code>TLSv1.1</code></dt>\n<dd>Support TLSv1.1+. (TLSv1.1 deprecated: <a target=\"_blank\" rel=\"noreferrer\" href=\"https://datatracker.ietf.org/doc/html/rfc8996\">RFC 8996</a>)</dd>\n<dt><code>TLSv1.2</code></dt>\n<dd>Support TLSv1.2+.</dd>\n<dt><code>TLSv1.3</code></dt>\n<dd>Support TLSv1.3+.</dd>\n<dt><code>LATEST</code></dt>\n<dd>Support only the latest version available.</dd>\n</dl>\n"
  },
  "ssl_options": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "compression",
      "no_ticket"
    ],
    "text": "<p>Additional options for SSL.</p>\n<p>This setting is used for both incoming and outgoing SSL connections.</p>\n<p>Currently supported options are:</p>\n<dl>\n<dt><code>compression</code></dt>\n<dd>Enable compression.</dd>\n<dt><code>no_ticket</code></dt>\n<dd>Disable SSL session tickets.</dd>\n</dl>\n"
  },
  "ssl_server_prefer_ciphers": {
    "default": "<code>client</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "client",
      "server"
    ],
    "text": "<p>Whether to give preference to the server's cipher list over a client's\nlist.</p>\n"
  },
  "ssl_server_require_crl": {
    "default": "<code>yes</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_server_ca_file\">ssl_server_ca_file</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, the CRL check must succeed for presented SSL client\ncertificate and any intermediate certificates. The CRL list is generally\nappended to the <code><a href=\"/main/core/summaries/settings.html#ssl_server_ca_file\">ssl_server_ca_file</a></code> file.</p>\n"
  },
  "ssl_server_request_client_cert": {
    "changed": [
      {
        "text": "<p>Renamed from <code>ssl_verify_client_cert</code> setting.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.1.0</span>"
      }
    ],
    "default": "<code>no</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#auth_ssl_require_client_cert\">auth_ssl_require_client_cert</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "no",
      "yes",
      "any-cert"
    ],
    "text": "<p>If enabled, the imap/pop3/etc. client is requested to send an SSL certificate.</p>\n<p>You can accept any certificate with 'any-cert' value, but you must configure\nauthentication to check the client certificate with <a href=\"/main/core/config/auth/passdb.html#check-client-fp\">check_client_fp</a> (or\nvariant) extra field. See <a href=\"/main/core/config/auth/passdb.html#check-client-fp\">passdb: check_client_fp Extra field</a>.</p>\n<p>Note: This setting doesn't yet require the certificate to be valid or\nto even exist. See <code><a href=\"/main/core/summaries/settings.html#auth_ssl_require_client_cert\">auth_ssl_require_client_cert</a></code>.</p>\n"
  },
  "ssl_server": {
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#ssl\">ssl</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#ssl_client\">ssl_client</a></code>",
      "<a href=\"/main/core/config/ssl.html#configuration-overview\">SSL configuration</a>"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Named filter, which can be used for specifying SSL server settings.</p>\n",
    "no_default": true
  },
  "state_dir": {
    "default": "<code>/var/lib/dovecot</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>The compile-time directory PKG_STATEDIR (typically /var/lib/dovecot)\nis hard-coded as the location of state files. The PKG_STATEDIR value\nis taken as the default state_dir setting but can be overridden - for\ninstance, if you wish to use the same binaries for a system daemon and\na user daemon.</p>\n<p>The settings <code><a href=\"/main/core/summaries/settings.html#state_dir\">state_dir = /home/foo/dovecot/state</a></code> and\n<code><a href=\"/main/core/summaries/settings.html#base_dir\">base_dir = /home/foo/dovecot/run</a></code> give an example of usage.</p>\n"
  },
  "stats_server": {
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Filter for stats server specific settings.</p>\n",
    "no_default": true
  },
  "stats_writer_socket_path": {
    "default": "<code>stats-writer</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The path to the stats-writer socket.</p>\n"
  },
  "submission_add_received_header": {
    "default": "<code>yes</code>",
    "tags": [
      "submission"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Controls if &quot;Received:&quot; header should be added to mails by the submission\nbackend.</p>\n"
  },
  "submission_client_workarounds": {
    "tags": [
      "submission"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>Configures the list of active workarounds for Submission client bugs.</p>\n<p>Supported workaround identifiers are:</p>\n<dl>\n<dt><code>implicit-auth-external</code></dt>\n<dd>Implicitly login using the EXTERNAL SASL mechanism upon the first MAIL\ncommand, provided that the client provides a valid TLS client\ncertificate. This is helpful for clients that omit explicit SASL\nauthentication when configured for authentication using a TLS certificate\n(Thunderbird for example).</dd>\n<dt><code>mailbox-for-path</code></dt>\n<dd>Allow using bare Mailbox syntax (i.e., without &lt;...&gt;) instead of full\npath syntax.</dd>\n<dt><code>whitespace-before-path</code></dt>\n<dd>Allow one or more spaces or tabs between 'MAIL FROM:' and path and\nbetween 'RCPT TO:' and path.</dd>\n</dl>\n"
  },
  "submission_host": {
    "tags": [
      "submission"
    ],
    "values": [
      {
        "label": "URL",
        "url": "<a href=\"/main/core/settings/types.html#url\">URL</a>"
      }
    ],
    "text": "<p>Use this SMTP submission host to send messages.</p>\n<p>Overrides <code><a href=\"/main/core/summaries/settings.html#sendmail_path\">sendmail_path</a></code> value, if set.</p>\n"
  },
  "submission_logout_format": {
    "default": "<code>in=%{input} out=%{output}</code>",
    "tags": [
      "submission"
    ],
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "text": "<p>The SMTP Submission logout format string.</p>\n<p>Variables supported, including <code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code>:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Variable Name</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>%{input}</code></td>\n<td>Bytes read from client</td>\n</tr>\n<tr>\n<td><code>%{output}</code></td>\n<td>Bytes sent to client</td>\n</tr>\n<tr>\n<td><code>%{command_count}</code></td>\n<td>Number of commands received from client</td>\n</tr>\n<tr>\n<td><code>%{reply_count}</code></td>\n<td>Number of replies sent to client</td>\n</tr>\n<tr>\n<td><code>%{transaction_id}</code></td>\n<td>ID of the current transaction, if any</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "submission_max_mail_size": {
    "default": "<code>40M</code>",
    "tags": [
      "submission"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "text": "<p>The maximum message size accepted for relay.</p>\n<p>This value is announced in the SMTP SIZE capability.</p>\n<p>If empty, this value is either determined from the relay server or left\nunlimited if no limit is known; the relay MTA will reply with error if some\nunknown limit exists there, which will be passed back to the client.</p>\n"
  },
  "submission_max_recipients": {
    "tags": [
      "submission"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>unlimited</code>",
    "text": "<p>Maximum number of recipients accepted per connection.</p>\n"
  },
  "submission_relay_command_timeout": {
    "default": "<code>5mins</code>",
    "tags": [
      "submission_relay"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "text": "<p>Timeout for SMTP commands issued to the submission service's relay server.</p>\n<p>The timeout is reset every time more data is being sent or received.</p>\n"
  },
  "submission_relay_connect_timeout": {
    "default": "<code>30secs</code>",
    "tags": [
      "submission_relay"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "text": "<p>Timeout for connecting to and logging into the submission service's relay\nserver.</p>\n"
  },
  "submission_relay_host": {
    "tags": [
      "submission_relay"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Host of the relay server (REQUIRED to provide the submission service).</p>\n"
  },
  "submission_relay_master_user": {
    "tags": [
      "submission_relay"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Master user name for authentication to the relay MTA if authentication is\nrequired.</p>\n"
  },
  "submission_relay_max_idle_time": {
    "default": "<code>29mins</code>",
    "tags": [
      "submission_relay"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>Submission relay max idle time for connection to relay MTA.</p>\n"
  },
  "submission_relay_password": {
    "tags": [
      "submission_relay"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Password for authentication to the relay MTA if authentication is required.</p>\n"
  },
  "submission_relay_port": {
    "default": "<code>25</code>",
    "tags": [
      "submission_relay"
    ],
    "values": [
      {
        "label": "Port Number",
        "url": "<a href=\"/main/core/settings/types.html#port-number\">Port Number</a>",
        "default_required": true
      }
    ],
    "text": "<p>Port for the submission relay server.</p>\n"
  },
  "submission_relay_rawlog_dir": {
    "tags": [
      "submission_relay"
    ],
    "seealso": [
      "<a href=\"/main/core/admin/rawlog.html\">rawlog</a>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Write protocol logs for relay connection to this directory for debugging.</p>\n<p><code><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail user variables</a></code> can be used.</p>\n"
  },
  "submission_relay_ssl": {
    "default": "<code>no</code>",
    "tags": [
      "submission_relay"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "no",
      "smtps",
      "starttls"
    ],
    "text": "<p>If enabled, SSL/TLS is used for the connection to the relay server.</p>\n<p>Available values:</p>\n<dl>\n<dt><code>no</code></dt>\n<dd>No SSL connection is used.</dd>\n<dt><code>smtps</code></dt>\n<dd>An SMTPS connection (immediate SSL) is used.</dd>\n<dt><code>starttls</code></dt>\n<dd>The STARTTLS command is used to establish the TLS layer.</dd>\n</dl>\n"
  },
  "submission_relay_ssl_verify": {
    "default": "<code>yes</code>",
    "tags": [
      "submission_relay"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, TLS certificate of the relay server must be verified.</p>\n"
  },
  "submission_relay_trusted": {
    "default": "<code>no</code>",
    "tags": [
      "submission_relay"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, the relay server is trusted.</p>\n<p>Determines whether we try to send (Postfix-specific) XCLIENT data to the\nrelay server (only if enabled).</p>\n"
  },
  "submission_relay_user": {
    "tags": [
      "submission_relay"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>User name for authentication to the relay MTA if authentication is required.</p>\n"
  },
  "submission_ssl": {
    "default": "<code>no</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#submission_host\">submission_host</a></code>"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "values_enum": [
      "no",
      "smtps",
      "starttls"
    ],
    "text": "<p>If enabled, use SSL/TLS to connect to <code><a href=\"/main/core/summaries/settings.html#submission_host\">submission_host</a></code>.</p>\n<p>Available values:</p>\n<dl>\n<dt><code>no</code></dt>\n<dd>No SSL connection is used.</dd>\n<dt><code>smtps</code></dt>\n<dd>An SMTPS connection (immediate SSL) is used.</dd>\n<dt><code>starttls</code></dt>\n<dd>The STARTTLS command is used to establish the TLS layer.</dd>\n</dl>\n"
  },
  "submission_timeout": {
    "default": "<code>30secs</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#submission_host\">submission_host</a></code>"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>Timeout for submitting outgoing messages.</p>\n"
  },
  "syslog_facility": {
    "default": "<code>mail</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The syslog facility used if you're logging to syslog.</p>\n"
  },
  "unix_listener": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#service\">service</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#unix_listener_path\">unix_listener_path</a></code>"
    ],
    "text": "<p>Creates a new UNIX listener for a <code><a href=\"/main/core/summaries/settings.html#service\">service</a></code>. The filter name refers\nto the <code><a href=\"/main/core/summaries/settings.html#unix_listener_path\">unix_listener_path</a></code> setting.</p>\n"
  },
  "unix_listener_path": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String Without Variables",
        "url": "<a href=\"/main/core/settings/types.html#string-without-variables\">String without variables</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#base_dir\">base_dir</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#unix_listener\">unix_listener</a></code>"
    ],
    "text": "<p>Path to the UNIX socket file, relative to <code><a href=\"/main/core/summaries/settings.html#base_dir\">base_dir</a></code> setting. The\n<code><a href=\"/main/core/summaries/settings.html#unix_listener\">unix_listener</a></code> filter name refers to this setting.</p>\n"
  },
  "unix_listener_type": {
    "tags": [
      "service"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Listener type. This string value has service-specific meaning and is used to\ndistinguish different listener types that one service may employ.</p>\n"
  },
  "unix_listener_mode": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "Octal Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#octal-unsigned-integer\">octal unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>0600</code>",
    "text": "<p>Mode of the file. Note that <code>0600</code> is an octal value, while <code>600</code> is a\ndifferent decimal value. Setting mode to <code>0</code> disables the listener.</p>\n"
  },
  "unix_listener_user": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Owner of the listener file. Empty (default) means UID 0 (root).</p>\n"
  },
  "unix_listener_group": {
    "tags": [
      "service"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Group of the listener file. Empty (default) means GID 0 (root/wheel).</p>\n"
  },
  "userdb": {
    "tags": [
      "userdb"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "dependencies": [
      "<code><a href=\"/main/core/summaries/settings.html#userdb_driver\">userdb_driver</a></code>"
    ],
    "seealso": [
      "<a href=\"/main/core/config/auth/userdb.html\">userdb</a>",
      "<code><a href=\"/main/core/summaries/settings.html#userdb_name\">userdb_name</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#userdb_driver\">userdb_driver</a></code>"
    ],
    "text": "<p>Creates a new <a href=\"/main/core/config/auth/userdb.html\">userdb</a>. The filter name refers to the\n<code><a href=\"/main/core/summaries/settings.html#userdb_name\">userdb_name</a></code> setting.</p>\n"
  },
  "userdb_name": {
    "tags": [
      "userdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#userdb\">userdb</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#userdb_driver\">userdb_driver</a></code>"
    ],
    "text": "<p>Name of the userdb. The <code><a href=\"/main/core/summaries/settings.html#userdb\">userdb</a></code> filter name refers to this setting.\nIf the <code><a href=\"/main/core/summaries/settings.html#userdb_driver\">userdb_driver</a></code> setting is empty, the <code>userdb_name</code> is used\nas the driver. This allows doing e.g.:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>userdb passwd-file {</span></span>\n<span class=\"line\"><span>  passwd_file_path = /etc/dovecot/passwd</span></span></code></pre>\n</div>"
  },
  "userdb_driver": {
    "tags": [
      "userdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#userdb_name\">userdb_name</a></code>",
      "<a href=\"/main/core/config/auth/userdb.html\">userdb</a>",
      "<a href=\"/main/core/config/auth/databases/overview.html\">Authentication Databases</a>"
    ],
    "text": "<p>The driver used for this user database. If empty, defaults to\n<code><a href=\"/main/core/summaries/settings.html#userdb_name\">userdb_name</a></code>.</p>\n"
  },
  "userdb_fields": {
    "tags": [
      "userdb"
    ],
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/core/config/auth/userdb.html#extra-fields\">userdb: Extra Fields</a>"
    ],
    "text": "<p>Userdb fields (and <a href=\"/main/core/config/auth/userdb.html#extra-fields\">userdb: Extra Fields</a>). The values can contain\n<a href=\"/main/core/settings/variables.html\">%variables</a>. All <code>%variables</code> used here reflect\nthe state <strong>after</strong> the current userdb lookup, and can refer to fields returned\nby previous userdb lookups. Depending on the userdb driver, it can also refer\nto variable fields returned by it (e.g. <code>%{ldap:fieldName}</code>).</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>The LDAP driver provides additional specific variables,\nsee <a href=\"/main/core/config/auth/databases/ldap.html\">LDAP authentication</a> for more details.</p>\n</div>\n<p>For example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>userdb ldap {</span></span>\n<span class=\"line\"><span>  fields {</span></span>\n<span class=\"line\"><span>    user = %{ldap:userId}</span></span>\n<span class=\"line\"><span>    home = /home/%{ldap:mailboxPath}</span></span>\n<span class=\"line\"><span>    uid = vmail</span></span>\n<span class=\"line\"><span>    gid = vmail</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "userdb_fields_import_all": {
    "tags": [
      "userdb"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>yes</code><br />For <code>userdb ldap</code> the default is <code>no</code>.",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#userdb_fields\">userdb_fields</a></code>"
    ],
    "text": "<p>If yes, import all fields returned by the userdb lookup. If no, require\n<code><a href=\"/main/core/summaries/settings.html#userdb_fields\">userdb_fields</a></code> to explicitly add wanted fields.</p>\n"
  },
  "userdb_skip": {
    "tags": [
      "userdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "never",
      "found",
      "notfound"
    ],
    "default": "<code>never</code>",
    "text": "<p>Configures when userdbs should be skipped:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>never</code></td>\n<td>Never skip over this userdb.</td>\n</tr>\n<tr>\n<td><code>found</code></td>\n<td>Skip if an earlier userdbs already found the user.</td>\n</tr>\n<tr>\n<td><code>notfound</code></td>\n<td>Skip if previous userdbs haven't yet found the user.</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "userdb_static_allow_all_users": {
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "tags": [
      "userdb"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Skip user existence verification via passdb lookup.</p>\n"
  },
  "userdb_use_worker": {
    "tags": [
      "userdb"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code><br />specific <a href=\"/main/core/config/auth/userdb.html\">userdb</a> have different defaults",
    "text": "<p>If <code>yes</code>, run the userdb lookup in auth-worker process instead of the main\nauth process. This setting is only used by some of the userdb drivers.</p>\n"
  },
  "userdb_result_success": {
    "tags": [
      "userdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "return-ok",
      "return",
      "return-fail",
      "continue",
      "continue-ok",
      "continue-fail"
    ],
    "default": "<code>return-ok</code>",
    "seealso": [
      "<a href=\"/main/core/config/auth/userdb.html#result-values\">userdb: Result Values</a>"
    ],
    "text": "<p>What to do if the user was successfully found from the userdb. Possible values\nand their meaning are described fully at <a href=\"/main/core/config/auth/userdb.html#result-values\">userdb: Result Values</a>.</p>\n"
  },
  "userdb_result_failure": {
    "tags": [
      "userdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "return-ok",
      "return",
      "return-fail",
      "continue",
      "continue-ok",
      "continue-fail"
    ],
    "default": "<code>continue</code>",
    "seealso": [
      "<a href=\"/main/core/config/auth/userdb.html#result-values\">userdb: Result Values</a>"
    ],
    "text": "<p>What to do if the user was not found from the userdb. Possible values and their\nmeaning are described fully at <a href=\"/main/core/config/auth/userdb.html#result-values\">userdb: Result Values</a>.</p>\n"
  },
  "userdb_result_internalfail": {
    "tags": [
      "userdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "return-ok",
      "return",
      "return-fail",
      "continue",
      "continue-ok",
      "continue-fail"
    ],
    "default": "<code>continue</code>",
    "seealso": [
      "<a href=\"/main/core/config/auth/userdb.html#result-values\">userdb: Result Values</a>"
    ],
    "text": "<p>What to do after the userdb failed due to an internal error.\nPossible values and their meaning are described fully at\n<a href=\"/main/core/config/auth/userdb.html#result-values\">userdb: Result Values</a>. If any of the userdbs had an internal failure\nand the final userdb also returns <code>continue</code> the authentication will fail\nwith <code>internal error</code>.</p>\n"
  },
  "userdb_sql_query": {
    "tags": [
      "userdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>SQL query to lookup the userdb fields.</p>\n"
  },
  "userdb_sql_iterate_query": {
    "tags": [
      "userdb"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>SQL query to list all available usernames.</p>\n"
  },
  "valid_chroot_dirs": {
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>List of directories under which chrooting is allowed for mail processes.</p>\n<p>Addresses the risk of root exploits enabled by incorrect use of chrooting.</p>\n<p>Interpretation is recursive, so including <code>/var/mail</code> allows chrooting\nto subdirectories such as <code>/var/mail/foo/bar</code>.</p>\n"
  },
  "verbose_proctitle": {
    "default": "<code>yes</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, the <code>ps</code> command shows more verbose process details,\nincluding the username and IP address of the connected client.</p>\n<p>This aids in seeing who is actually using the server, as well as helps\ndebugging in case there are any problems. See <a href=\"/main/core/admin/process_titles.html\">process titles</a>.</p>\n"
  },
  "verbose_ssl": {
    "removed": [
      {
        "version": "<span class=\"VPBadge danger\">Removed: 3.1.0</span>"
      }
    ],
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, protocol-level SSL errors are logged. Same as\n<code><a href=\"/main/core/summaries/settings.html#log_debug\">log_debug = category=ssl</a></code>.</p>\n"
  },
  "version_ignore": {
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, ignore version mismatches between different Dovecot versions.</p>\n"
  },
  "ldap_auth_dn": {
    "tags": [
      "auth-ldap",
      "dict-ldap",
      "sieve-storage-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Specify the Distinguished Name (the username used to login to the LDAP server).</p>\n<p>Leave it commented out to bind anonymously (useful with <code><a href=\"/main/core/summaries/settings.html#passdb_ldap_bind\">passdb_ldap_bind = yes</a></code>).</p>\n<p>Example: <code>ldap_auth_dn = uid=dov-read,dc=example,dc=com,dc=.</code></p>\n"
  },
  "ldap_auth_dn_password": {
    "tags": [
      "auth-ldap",
      "dict-ldap",
      "sieve-storage-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Password for LDAP server. Used if <code><a href=\"/main/core/summaries/settings.html#ldap_auth_dn\">ldap_auth_dn</a></code> is specified.</p>\n"
  },
  "ldap_auth_sasl_authz_id": {
    "tags": [
      "auth-ldap",
      "sieve-storage-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>SASL authorization ID, ie. the <code><a href=\"/main/core/summaries/settings.html#ldap_auth_dn_password\">ldap_auth_dn_password</a></code> is for this &quot;master user&quot;, but the\n<code><a href=\"/main/core/summaries/settings.html#ldap_auth_dn\">ldap_auth_dn</a></code> is still the logged in user. Normally you want to keep this empty.</p>\n"
  },
  "ldap_auth_sasl_mechanisms": {
    "tags": [
      "auth-ldap",
      "sieve-storage-ldap"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>List of SASL mechanism names to use.</p>\n"
  },
  "ldap_auth_sasl_realm": {
    "tags": [
      "auth-ldap",
      "sieve-storage-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>SASL realm to use.</p>\n"
  },
  "ldap_base": {
    "tags": [
      "auth-ldap",
      "dict-ldap",
      "sieve-storage-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>LDAP base.</p>\n<p><code><a href=\"/main/core/settings/variables.html\">Settings variables</a></code> can be used.</p>\n<p>Example: <code>ldap_base = dc=mail, dc=example, dc=org</code></p>\n"
  },
  "ldap_connection_group": {
    "tags": [
      "auth-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Only databases with the same connection group share the ldap connections.\nBy default all the databases have the same <code>&quot;&quot;</code>(empty string) default connection group,\nand as such share the connections.</p>\n"
  },
  "ldap_debug_level": {
    "tags": [
      "auth-ldap",
      "dict-ldap",
      "sieve-storage-ldap"
    ],
    "default": 0,
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>LDAP library debug level as specified by <code>LDAP_DEBUG_*</code> in <code>ldap_log.h</code>.</p>\n<p>Value <code>-1</code> means everything.</p>\n<p>You may need to recompile OpenLDAP with debugging enabled to get enough output.</p>\n"
  },
  "ldap_deref": {
    "tags": [
      "auth-ldap",
      "sieve-storage-ldap"
    ],
    "default": "<code>never</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "never",
      "searching",
      "finding",
      "always"
    ],
    "text": "<p>Specify dereference which is set as an LDAP option.</p>\n"
  },
  "dict_map_ldap_filter": {
    "tags": [
      "dict-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The ldap filter to use to find the ldap entry.</p>\n<p>This setting is required for ldap <code><a href=\"/main/core/summaries/settings.html#dict_map\">dict_map</a></code></p>\n"
  },
  "ldap_max_idle_time": {
    "tags": [
      "dict-ldap"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>Disconnect from LDAP server after connection has been idle for this many seconds.</p>\n"
  },
  "ldap_scope": {
    "tags": [
      "auth-ldap",
      "dict-ldap",
      "sieve-storage-ldap"
    ],
    "default": "<code>subtree</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "base",
      "onelevel",
      "subtree"
    ],
    "text": "<p>This specifies the search scope.</p>\n"
  },
  "ldap_starttls": {
    "tags": [
      "auth-ldap",
      "dict-ldap",
      "sieve-storage-ldap"
    ],
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Set to <code>yes</code> to use TLS to connect to the LDAP server.</p>\n"
  },
  "ldap_uris": {
    "tags": [
      "auth-ldap",
      "dict-ldap",
      "sieve-storage-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>LDAP URIs to use.</p>\n<p>Configure this setting to specify what LDAP\nserver(s) to connect to.</p>\n<p>The URIs are in syntax <code>protocol://host:port</code>.</p>\n<p>Example: <code>ldap_uris = ldaps://secure.domain.org</code></p>\n"
  },
  "ldap_version": {
    "tags": [
      "auth-ldap",
      "sieve-storage-ldap"
    ],
    "default": "<code>3</code>",
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>LDAP protocol version to use. Likely <code>2</code> or <code>3</code>.</p>\n"
  },
  "passdb_ldap_bind": {
    "tags": [
      "auth-ldap"
    ],
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Set <code>yes</code> to use authentication binding for verifying password's validity.</p>\n<p>This works by logging into LDAP server using the username and password given by client.</p>\n<p>The <code><a href=\"/main/core/summaries/settings.html#passdb_ldap_filter\">passdb_ldap_filter</a></code> is used to find the DN for the user.\nNote that the <code><a href=\"/main/core/summaries/settings.html#passdb_fields\">passdb_fields</a></code> are still used, only the password field\nis ignored in it.</p>\n<p>Before doing any search, the binding is switched back to the default DN.</p>\n<p>If you use this setting, it's a good idea to use a different\n<code><a href=\"/main/core/summaries/settings.html#ldap_connection_group\">ldap_connection_group</a></code> for userdb. That way one connection is used\nonly for LDAP binds and another connection is used for user lookups.\nOtherwise the binding is changed to the default DN before each user lookup.</p>\n"
  },
  "passdb_ldap_bind_userdn": {
    "tags": [
      "auth-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>If authentication binding is used, you can save one LDAP request per login\nif users' DN can be specified with a common template. The template can use\nthe standard <code><a href=\"/main/core/settings/variables.html\">Settings variables</a></code>.</p>\n<p>Note that you can't use any <code><a href=\"/main/core/summaries/settings.html#passdb_fields\">passdb_fields</a></code> declaration if you use this setting.</p>\n<p>Example: <code>passdb_ldap_bind_userdn = cn=%{user},ou=people,o=org</code></p>\n"
  },
  "passdb_ldap_filter": {
    "tags": [
      "auth-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Filter for passdb lookup.</p>\n<p>Variables that can be used (see <code><a href=\"/main/core/settings/variables.html\">Settings variables</a></code> for full list).</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>passdb ldap {</span></span>\n<span class=\"line\"><span>  filter = (&#x26;(objectClass=posixAccount)(uid=%{user}))</span></span>\n<span class=\"line\"><span>  #...</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "userdb_ldap_filter": {
    "tags": [
      "auth-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Filter for userdb lookup.</p>\n<p>Variables that can be used (see <code><a href=\"/main/core/settings/variables.html\">Settings variables</a></code> for full list).</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>userdb ldap {</span></span>\n<span class=\"line\"><span>  filter = (&#x26;(objectClass=posixAccount)(uid=%{user}))</span></span>\n<span class=\"line\"><span>  #...</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "userdb_ldap_iterate_fields": {
    "tags": [
      "auth-ldap"
    ],
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "text": "<p>Attributes to get a list of all users. Currently only the attribute\n<code>user</code> is supported.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>userdb ldap {</span></span>\n<span class=\"line\"><span>  iterate_filter = (objectClass=smiMessageRecipient)</span></span>\n<span class=\"line\"><span>  iterate_fields {</span></span>\n<span class=\"line\"><span>    user = %{ldap:mailRoutingAddress}</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "userdb_ldap_iterate_filter": {
    "tags": [
      "auth-ldap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Filter to get a list of all users.</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>userdb ldap {</span></span>\n<span class=\"line\"><span>  iterate_filter = (objectClass=smiMessageRecipient)</span></span>\n<span class=\"line\"><span>  iterate_fields {</span></span>\n<span class=\"line\"><span>    user = %{ldap:mailRoutingAddress}</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div>"
  },
  "@metric_defaults": {
    "values": [
      {
        "label": "Settings Group",
        "url": "<a href=\"/main/core/settings/syntax.html#groups-includes\">Groups Includes</a>"
      }
    ],
    "values_enum": [
      "proxy",
      "backend"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#metric\">metric</a></code>"
    ],
    "text": "<p>Group that expands to recommended <code><a href=\"/main/core/summaries/settings.html#metric\">metric</a></code> settings in proxies or\nbackends.</p>\n"
  },
  "@mailbox_defaults": {
    "changed": [
      {
        "text": "<p>Changed default <code><a href=\"/main/core/summaries/settings.html#mailbox_auto\">mailbox_auto</a></code> value for the mailboxes from <code>no</code>\nto <code>subscribe</code>.</p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.2.0</span>"
      }
    ],
    "values": [
      {
        "label": "Settings Group",
        "url": "<a href=\"/main/core/settings/syntax.html#groups-includes\">Groups Includes</a>"
      }
    ],
    "values_enum": [
      "english"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#mailbox_special_use\">mailbox_special_use</a></code>"
    ],
    "text": "<p>Group that expands to recommended English language mailbox names with\n<code><a href=\"/main/core/summaries/settings.html#mailbox_special_use\">mailbox_special_use</a></code> flags added.</p>\n"
  },
  "@cluster_defaults": {
    "tags": [
      "cluster",
      "cluster-proxy",
      "cluster-backend"
    ],
    "values": [
      {
        "label": "Settings Group",
        "url": "<a href=\"/main/core/settings/syntax.html#groups-includes\">Groups Includes</a>"
      }
    ],
    "values_enum": [
      "proxy",
      "backend"
    ],
    "text": "<p>Group that expands to various settings that are required for cluster to run\nin a proxy or backend.</p>\n"
  },
  "cluster_geodb": {
    "tags": [
      "cluster",
      "cluster-proxy",
      "cluster-backend"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Configuration for the globally shared GeoDB dict. This typically points to\nCassandra.</p>\n<p>Cluster: Applies to both Proxy and Backend.</p>\n"
  },
  "cluster_local_site": {
    "tags": [
      "cluster",
      "cluster-proxy",
      "cluster-backend"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Name of the local site. This must be the same name as used by\n<code><a href=\"/main/core/summaries/doveadm.html#cluster-site\">doveadm cluster-site</a></code> commands.</p>\n<p>Cluster: Applies to both Proxy and Backend.</p>\n"
  },
  "cluster_localdb": {
    "tags": [
      "cluster",
      "cluster-proxy",
      "cluster-backend"
    ],
    "advanced": true,
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Configuration for the backend-specific local database. This is expected to\npoint to <code>metacache-users</code> socket.</p>\n<p>Cluster: Applies only to Backend.</p>\n"
  },
  "cluster_proxy_check_sites": {
    "default": "<code>yes</code>",
    "tags": [
      "cluster",
      "cluster-proxy"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>If enabled, this proxy runs checks on other sites' load balancers to see whether\nthey are reachable via a simple TCP connection. This only updates statistics to\nallow controller to determine the reachability of other sites' load balancers.\nSee <a href=\"/main/palomar/configuration.html#site-reachability-checks\">Site reachability checks</a>.</p>\n<p>Cluster: Applies only to Proxy.</p>\n"
  },
  "cluster_proxy_check_backends": {
    "default": "<code>yes</code>",
    "tags": [
      "cluster",
      "cluster-proxy"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#cluster_backend_test_username\">cluster_backend_test_username</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#cluster_backend_test_password\">cluster_backend_test_password</a></code>"
    ],
    "text": "<p>If enabled, this proxy runs checks on backends that are offline to see whether\nthey have come back online. This only updates statistics to allow controller to\nset the backends online. Backends that are online are not checked, except once\nat startup.</p>\n<p>Cluster: Applies only to Proxy.</p>\n"
  },
  "cluster_backend_test_username": {
    "tags": [
      "cluster",
      "cluster-proxy",
      "cluster-backend"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#cluster_backend_test_password\">cluster_backend_test_password</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#cluster_proxy_check_backends\">cluster_proxy_check_backends</a></code>"
    ],
    "text": "<p>This setting is used for two purposes:</p>\n<ol>\n<li>Username used by proxy for logging into backends to see if it's up or\ndown. <code>%{backend_host}</code> variable expands to the hostname of the backend.</li>\n<li>Backends skip this username when doing batch user moves.</li>\n</ol>\n<p>Cluster: Applies to both Proxy and Backend.</p>\n"
  },
  "cluster_backend_test_password": {
    "tags": [
      "cluster",
      "cluster-proxy"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#cluster_backend_test_username\">cluster_backend_test_username</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#cluster_proxy_check_backends\">cluster_proxy_check_backends</a></code>"
    ],
    "text": "<p>Password used for logging into backends to see if it's up or down.</p>\n<p>Cluster: Applies only to Proxy.</p>\n"
  },
  "cluster_director_transition_config": {
    "tags": [
      "cluster",
      "cluster-proxy"
    ],
    "values": [
      {
        "label": "File",
        "url": "<a href=\"/main/core/settings/types.html#file\">File</a>"
      }
    ],
    "text": "<p>Path to configuration file for director to cluster transition.</p>\n<p>The configuration file has to be created by the <code>migrate_start.py</code> script, which\nis to be used as described in <a href=\"/main/installation/upgrading/palomar/director_transition.html\">Transition from OX Dovecot Pro 2.3.x Architecture</a>.</p>\n<p>If this file is set, the cluster will perform an additional lookup for the\nuser's backend in the current site, using information from the transition\nconfiguration.\nThis lookup is only performed if the user does not already have a backend\nassigned.</p>\n<p>This way, users are assigned the same backend at login as they had in the\ndirector setup they are being transitioned from.\nFor more information please refer to <a href=\"/main/installation/upgrading/palomar/director_transition.html\">Transition from OX Dovecot Pro 2.3.x Architecture</a>.</p>\n"
  },
  "cluster_user_move_timeout": {
    "tags": [
      "cluster",
      "cluster-proxy"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": "<code>31secs</code>",
    "text": "<p>If user moving hasn't finished by this timeout, just assume it finished and\ncontinue to the next user.</p>\n<p>Cluster: Applies only to Proxy.</p>\n"
  },
  "cluster_backend_name": {
    "tags": [
      "cluster",
      "cluster-backend"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Host name of the backend. This must be the same name as used by\n<code><a href=\"/main/core/summaries/doveadm.html#cluster-backend\">doveadm cluster-backend</a></code> commands.</p>\n<p>Cluster: Applies only to Backend.</p>\n"
  },
  "CLUSTER_SITE": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python String",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#str\" target=\"_blank\" rel=\"noreferrer\">Python String</a>"
      }
    ],
    "default": "<code>&quot;dc1a&quot;</code>",
    "text": "<p>Palomar site this controller is responsible for. Must be the same\nsite name configured in dovecot proxies with <code><a href=\"/main/core/summaries/settings.html#cluster_local_site\">cluster_local_site</a></code>.</p>\n"
  },
  "CONTROLLER_API_URL": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python String",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#str\" target=\"_blank\" rel=\"noreferrer\">Python String</a>"
      }
    ],
    "default": "<code>&quot;<a href=\"http://localhost:8000\" target=\"_blank\" rel=\"noreferrer\">http://localhost:8000</a>&quot;</code>",
    "text": "<p>URL controller API runs on. The server will bind to this address and the admin\nUI uses this address to send the HTTP requests.</p>\n"
  },
  "CELERY_RESULT_EXPIRES_SECS": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>60</code>",
    "text": "<p>Time to live of task results in Redis (in seconds).</p>\n"
  },
  "CASSANDRA_SERVERS": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python String",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#str\" target=\"_blank\" rel=\"noreferrer\">Python String</a>"
      }
    ],
    "default": "<code>&quot;localhost&quot;</code>",
    "text": "<p>Comma separated list of Cassandra server endpoints.</p>\n"
  },
  "CASSANDRA_PORT": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>9042</code>",
    "text": "<p>The port Cassandra servers listen on.</p>\n"
  },
  "CASSANDRA_TLS_ENABLED": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Boolean",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#boolean-type-bool\" target=\"_blank\" rel=\"noreferrer\">Python Boolean</a>"
      }
    ],
    "default": "<code>False</code>",
    "text": "<p>Whether to use TLS in Cassandra connections.</p>\n"
  },
  "CASSANDRA_KEYSPACE": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python String",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#str\" target=\"_blank\" rel=\"noreferrer\">Python String</a>"
      }
    ],
    "default": "<code>&quot;d8s_cluster&quot;</code>",
    "deprecated": [
      {
        "text": "<p>Use <code><a href=\"/main/core/summaries/settings.html#CASSANDRA_GEODB_KEYSPACE\">CASSANDRA_GEODB_KEYSPACE</a></code> instead.</p>\n",
        "version": "<span class=\"VPBadge warning\">Deprecated: 3.0.1</span>"
      }
    ],
    "text": "<p>Cassandra keyspace to use.</p>\n"
  },
  "CASSANDRA_GEODB_KEYSPACE": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python String",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#str\" target=\"_blank\" rel=\"noreferrer\">Python String</a>"
      }
    ],
    "default": "<code>&quot;d8s_cluster&quot;</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.1</span>"
      }
    ],
    "text": "<p>Cassandra keyspace used for dovecot cluster.</p>\n"
  },
  "CASSANDRA_PROTOCOL_VERSION": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>4</code>",
    "text": "<p>Version of the cassandra protocol to be used.</p>\n"
  },
  "CASSANDRA_LOAD_BALANCING_POLICY": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python String",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#str\" target=\"_blank\" rel=\"noreferrer\">Python String</a>"
      }
    ],
    "values_enum": [
      "\"RoundRobin\"",
      "\"DCAwareRoundRobin\""
    ],
    "default": "<code>&quot;DCAwareRoundRobin&quot;</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.1</span>"
      }
    ],
    "text": "<p>Policy to use for cassandra load balancing. Determines how requests are\ndistributed among nodes in the cluster.</p>\n<ul>\n<li>&quot;RoundRobin&quot;: evenly distributes queries across all nodes in the cluster,\nregardless of what datacenter the nodes may be in.</li>\n<li>&quot;DCAwareRoundRobin&quot;: Similar to &quot;RoundRobinPolicy&quot;, but prefers hosts in the\nlocal datacenter and only uses nodes in remote datacenters as a last resort.\nIf this policy is selected, number of remote hosts to use can be configured\nwith <code><a href=\"/main/core/summaries/settings.html#CASSANDRA_USED_HOSTS_PER_REMOTE_DC\">CASSANDRA_USED_HOSTS_PER_REMOTE_DC</a></code>.</li>\n</ul>\n"
  },
  "CASSANDRA_USED_HOSTS_PER_REMOTE_DC": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>0</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.1</span>"
      }
    ],
    "text": "<p>If <code><a href=\"/main/core/summaries/settings.html#CASSANDRA_LOAD_BALANCING_POLICY\">CASSANDRA_LOAD_BALANCING_POLICY</a></code> is set to &quot;DCAwareRoundRobin&quot;,\ncontrols how many nodes in each remote datacenter will have connections opened\nagainst them.</p>\n"
  },
  "CASSANDRA_SITE": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python String",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#str\" target=\"_blank\" rel=\"noreferrer\">Python String</a>"
      }
    ],
    "default": "<code>&quot;d8s_cluster&quot;</code>",
    "deprecated": [
      {
        "text": "<p>Use <code><a href=\"/main/core/summaries/settings.html#CASSANDRA_LOCAL_DC\">CASSANDRA_LOCAL_DC</a></code> instead.</p>\n",
        "version": "<span class=\"VPBadge warning\">Deprecated: 3.0.1</span>"
      }
    ],
    "text": "<p>Name of the local datacenter in Cassandra cluster.</p>\n"
  },
  "CASSANDRA_LOCAL_DC": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python String",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#str\" target=\"_blank\" rel=\"noreferrer\">Python String</a>"
      }
    ],
    "default": "<code>&quot;d8s_cluster&quot;</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.1</span>"
      }
    ],
    "text": "<p>Name of the local datacenter in Cassandra cluster.</p>\n"
  },
  "HOST_LOAD_BALANCE_MIN_COOL_TIME_SECS": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>3600</code>",
    "text": "<p>Used to determine if a user or a backend has been subject to user moves\nrecently and should be skipped for load balancing.</p>\n<p>For users, it determines the minimum time in seconds a user will not be\nmoved to a new backend because of load balancing decisions. The users' move\ntimestamps are tracked by backends, so users that have been moved for any\nreason by either Controller or doveadm commands will not be moved again until\nthis many seconds have passed.</p>\n<p>For backends, it determines the minimum time in seconds no move will be\ndone from or to the backend. The timestamp of last user move from or to\nthe backend is tracked by Controller and at each load balancing iteration,\nbackends that have had a user move within this period will be skipped.</p>\n"
  },
  "HOST_LOAD_BALANCE_GROUP_MIN_COOL_TIME_SECS": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>3600</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.1</span>"
      }
    ],
    "deprecated": [
      {
        "text": "<p>Use <code><a href=\"/main/core/summaries/settings.html#HOST_LOAD_BALANCE_MIN_COOL_TIME_SECS\">HOST_LOAD_BALANCE_MIN_COOL_TIME_SECS</a></code> instead.</p>\n",
        "version": "<span class=\"VPBadge warning\">Deprecated: 3.1.0</span>"
      }
    ],
    "text": "<p>Minimum time in seconds a group will not be moved to a new backend. If a\ngroup needs to be moved for load balancing, this period is honored and\ngroups that have been moved recently will not be moved again.\nMust be larger than 0.</p>\n"
  },
  "HOST_LOAD_BALANCE_SCORE_DELTA_THRESHOLD_RATIO": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Float",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Float</a>"
      }
    ],
    "default": "<code>0.5</code>",
    "text": "<p>Minimum load score difference between backends to initiate user move. See <a href=\"/main/palomar/controller/controller.html#load-balancing\">Cluster Controller Load Balancing</a>.</p>\n"
  },
  "HOST_LOAD_BALANCE_MIN_SAMPLES": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>3000</code>",
    "text": "<p>Number of samples over the last 24 hours needed for all the Z-scores for a host to do load balancing.</p>\n"
  },
  "HOST_FAILURE_BACKEND_NUM_THRESHOLD": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Float",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Float</a>"
      }
    ],
    "default": "<code>0.3</code>",
    "text": "<p>Percentage of backends in a site that are allowed to become offline before stopping backend evacuations within the site.</p>\n"
  },
  "HOST_FAILURE_RATIO": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Float",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Float</a>"
      }
    ],
    "default": "<code>0.1</code>",
    "text": "<p>Ratio of failed logins or mail deliveries to trigger user moves. Must be in (0, 1) range exclusive.</p>\n"
  },
  "HOST_FAILURE_COOL_TIME_SECS": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>3600</code>",
    "text": "<p>Minimum time in seconds a user will not be moved to a new backend because\nof backend health decisions. The users' move timestamps are tracked by\nbackends, so users that have been moved for any reason by either\nController or doveadm commands will not be moved again until this many\nseconds have passed.</p>\n"
  },
  "HOST_FAILURE_MIN_LOGINS": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>10</code>",
    "text": "<p>Minimum number of logins needed in past 5 minutes to start processing\nhost's health (i.e. change backend status if necessary or move users from it\nif there is high failure rate).</p>\n"
  },
  "HOST_FAILURE_FORCE_MOVE_PERCENTAGE_INCREASE_INTERVAL_SECONDS": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>60</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "text": "<p>Time interval between increases in percentage of users when backend is being\nevacuated in a force-move operation. If a backend is slow in moving users\nto another backend (due to admin's decision to set load factor to 0 or for\nhealth handling by controller) a force-move is started in which proxies are\ninstructed to move a portion of users away to other healthy backends. The\namount of users being moved to other backends starts at 10% then after\na duration of time, configurable by this setting, it is increased to\n40% then 70% and finally 100%. In all these percentage increases the time\ninterval applies as well.</p>\n"
  },
  "DRY_RUN": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>200</code>",
    "deprecated": [
      {
        "text": "<p>Use feature state 'dryrun'.</p>\n",
        "version": "<span class=\"VPBadge warning\">Deprecated: 3.0.2</span>"
      }
    ],
    "text": "<p>Whether to enable DRY_RUN mode to log but not perform controller worker actions, such as: set_host_offline, set_host_online and move users.</p>\n"
  },
  "GROUP_MOVE_START_TIMEOUT_SECS": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>180</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.1</span>"
      }
    ],
    "deprecated": [
      {
        "version": "<span class=\"VPBadge warning\">Deprecated: 3.1.0</span>"
      }
    ],
    "text": "<p>Maximum allowed time of a group move to start in seconds. If backends don't\nstart moving group after this time, a force move will be done. A forced move\nis done by directly setting group's backend ID in GeoDB.</p>\n"
  },
  "USER_MOVE_START_TIMEOUT_SECS": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>180</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#USER_MOVE_FINISH_TIMEOUT_SECS\">USER_MOVE_FINISH_TIMEOUT_SECS</a></code>"
    ],
    "text": "<p>Maximum allowed time of a non load-balancing user move operation to start in\nseconds. If backends don't start moving user after this time, the operation\nwill be retried once. If the move is still not successful on the second try,\na force move will be triggered. A forced move is done by populating\n<code>force_move_percentage</code> on backend's table in GeoDB.</p>\n"
  },
  "GROUP_MOVE_FINISH_TIMEOUT_SECS": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>600</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.1</span>"
      }
    ],
    "deprecated": [
      {
        "version": "<span class=\"VPBadge warning\">Deprecated: 3.1.0</span>"
      }
    ],
    "text": "<p>Maximum time for a group move to finish in seconds. Controller tries to\ncalculate the finish time based on the trend of moved users so far. If it\nseems that backends won't be able to finish the move in time, it will be\nforced. A forced move is done by directly setting group's backend ID in GeoDB.</p>\n"
  },
  "USER_MOVE_FINISH_TIMEOUT_SECS": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Integer",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex\" target=\"_blank\" rel=\"noreferrer\">Python Integer</a>"
      }
    ],
    "default": "<code>600</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.0</span>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#USER_MOVE_START_TIMEOUT_SECS\">USER_MOVE_START_TIMEOUT_SECS</a></code>"
    ],
    "text": "<p>Maximum time for non load-balancing user move operations to finish in seconds.\nController tries to calculate the finish time based on the trend of moved\nusers so far. If it seems that backends won't be able to finish the move in\ntime, the operation will be retried once and if still not successful,\nit will be forced. A forced move is done by writing to\n<code>force_move_percentage</code> column in backends table.</p>\n"
  },
  "LOG_LEVEL": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python String",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#str\" target=\"_blank\" rel=\"noreferrer\">Python String</a>"
      }
    ],
    "default": "<code>info</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.2.0</span>"
      }
    ],
    "values_enum": [
      "critical",
      "error",
      "warning",
      "info",
      "debug"
    ],
    "text": "<p>Log level for controller.</p>\n"
  },
  "LOG_STRUCTURED": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Boolean",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#boolean-type-bool\" target=\"_blank\" rel=\"noreferrer\">Python Boolean</a>"
      }
    ],
    "default": "<code>False</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.2.0</span>"
      }
    ],
    "text": "<p>Whether structured logging is enabled for controller. If set to True,\nlogs are emitted as a json payload.</p>\n"
  },
  "LOG_COLOR_ENABLED": {
    "tags": [
      "controller"
    ],
    "values": [
      {
        "label": "Python Boolean",
        "url": "<a href=\"https://docs.python.org/3/library/stdtypes.html#boolean-type-bool\" target=\"_blank\" rel=\"noreferrer\">Python Boolean</a>"
      }
    ],
    "default": "<code>False</code>",
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.2.0</span>"
      }
    ],
    "text": "<p>Whether coloured logging is enabled for controller when non-structured logging is selected\n(coloured logging is always disabled for structured logging).</p>\n"
  },
  "@fts_fs_defaults": {
    "plugin": [
      "fts-dovecot"
    ],
    "values": [
      {
        "label": "Settings Group",
        "url": "<a href=\"/main/core/settings/syntax.html#groups-includes\">Groups Includes</a>"
      }
    ],
    "values_enum": [
      "aws-s3",
      "s3",
      "azure",
      "sproxyd",
      "nfs"
    ],
    "seealso": [
      "<a href=\"/main/core/config/fs.html\">Dovecot Filesystems</a>",
      "<code><a href=\"/main/core/summaries/settings.html#fs\">fs</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#@fs_defaults\">@fs_defaults</a></code>"
    ],
    "text": "<p>Group that expands to recommended <a href=\"/main/core/plugins/fts_dovecot.html\">fts-dovecot plugin</a> <code><a href=\"/main/core/summaries/settings.html#fs\">fs</a></code>\nsettings, <a href=\"/main/core/plugins/fs_compress.html\">compression</a> and\n<a href=\"/main/core/plugins/mail_crypt.html\">encryption</a>. Note that they use\n<code>/var/cache/fts</code> directory, which must be created and be writable to the\n<code><a href=\"/main/core/summaries/settings.html#mail_uid\">mail_uid = vmail</a></code> user. Also note that you must configure the\n<a href=\"/main/core/plugins/mail_crypt.html#global-keys\">encryption keys</a>. See below for what the groups\nexpand to.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<details class=\"details custom-block\"><summary>@fts_fs_defaults = aws-s3</summary>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>  fts dovecot {</span></span>\n<span class=\"line\"><span>    fs fts-cache {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs fscache {</span></span>\n<span class=\"line\"><span>      path = /var/cache/fts/%{user | sha1 % 4}</span></span>\n<span class=\"line\"><span>      log_path = /var/cache/fts-%{user | sha1 % 4}.log</span></span>\n<span class=\"line\"><span>      size = 512 M</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs dictmap {</span></span>\n<span class=\"line\"><span>      storage_passthrough_paths = full</span></span>\n<span class=\"line\"><span>      dict proxy {</span></span>\n<span class=\"line\"><span>        name = mails</span></span>\n<span class=\"line\"><span>        socket_path = dict-async</span></span>\n<span class=\"line\"><span>      }</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs aws-s3 {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span></code></pre>\n</div></details>\n<details class=\"details custom-block\"><summary>@fts_fs_defaults = s3</summary>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>  fts dovecot {</span></span>\n<span class=\"line\"><span>    fs fts-cache {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs fscache {</span></span>\n<span class=\"line\"><span>      path = /var/cache/fts/%{user | sha1 % 4}</span></span>\n<span class=\"line\"><span>      log_path = /var/cache/fts-%{user | sha1 % 4}.log</span></span>\n<span class=\"line\"><span>      size = 512 M</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs dictmap {</span></span>\n<span class=\"line\"><span>      storage_passthrough_paths = full</span></span>\n<span class=\"line\"><span>      dict proxy {</span></span>\n<span class=\"line\"><span>        name = mails</span></span>\n<span class=\"line\"><span>        socket_path = dict-async</span></span>\n<span class=\"line\"><span>      }</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs s3 {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span></code></pre>\n</div></details>\n<details class=\"details custom-block\"><summary>@fts_fs_defaults = azure</summary>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>  fts dovecot {</span></span>\n<span class=\"line\"><span>    fs fts-cache {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs fscache {</span></span>\n<span class=\"line\"><span>      path = /var/cache/fts/%{user | sha1 % 4}</span></span>\n<span class=\"line\"><span>      log_path = /var/cache/fts-%{user | sha1 % 4}.log</span></span>\n<span class=\"line\"><span>      size = 512 M</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs dictmap {</span></span>\n<span class=\"line\"><span>      storage_passthrough_paths = full</span></span>\n<span class=\"line\"><span>      dict proxy {</span></span>\n<span class=\"line\"><span>        name = mails</span></span>\n<span class=\"line\"><span>        socket_path = dict-async</span></span>\n<span class=\"line\"><span>      }</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs azure {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span></code></pre>\n</div></details>\n<details class=\"details custom-block\"><summary>@fts_fs_defaults = sproxyd</summary>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>  fts dovecot {</span></span>\n<span class=\"line\"><span>    fs fts-cache {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs fscache {</span></span>\n<span class=\"line\"><span>      path = /var/cache/fts/%{user | sha1 % 4}</span></span>\n<span class=\"line\"><span>      log_path = /var/cache/fts-%{user | sha1 % 4}.log</span></span>\n<span class=\"line\"><span>      size = 512 M</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs dictmap {</span></span>\n<span class=\"line\"><span>      dict proxy {</span></span>\n<span class=\"line\"><span>        name = mails</span></span>\n<span class=\"line\"><span>        socket_path = dict-async</span></span>\n<span class=\"line\"><span>      }</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs sproxyd {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span></code></pre>\n</div></details>\n<details class=\"details custom-block\"><summary>@fts_fs_defaults = nfs</summary>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>  fts dovecot {</span></span>\n<span class=\"line\"><span>    fs fts-cache {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs fscache {</span></span>\n<span class=\"line\"><span>      path = /var/cache/fts/%{user | sha1 % 4}</span></span>\n<span class=\"line\"><span>      log_path = /var/cache/fts-%{user | sha1 % 4}.log</span></span>\n<span class=\"line\"><span>      size = 512 M</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs metawrap { # v3.1.2+</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs posix {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span></code></pre>\n</div></details>\n</div>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts_dovecot.html\">fts-dovecot plugin</a>"
  },
  "fts_dovecot_mail_flush_interval": {
    "changed": [
      {
        "text": "<p>Default changed from <code>0</code> to <code>10</code></p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.0.0</span>"
      }
    ],
    "default": "<code>10</code>",
    "plugin": [
      "fts-dovecot"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Upload locally cached FTS indexes to object storage every N new emails.\nThis reduces the number of emails that have to be read after backend\nfailure to update the FTS indexes, but at the cost of doing more writes to\nobject storage.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts_dovecot.html\">fts-dovecot plugin</a>"
  },
  "fts_dovecot_max_triplets": {
    "changed": [
      {
        "text": "<p>Default changed from <code>0</code> to <code>200</code></p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.0.0</span>"
      }
    ],
    "default": "<code>200</code>",
    "plugin": [
      "fts-dovecot"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>FTS lookups will fail and error message will be logged, when the number of\ntriplets exceeds the threshold specified in the setting. <code>0</code> means there\nis no maximum number of triplets to be exceeded.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts_dovecot.html\">fts-dovecot plugin</a>"
  },
  "fts_dovecot_min_merge_l_file_size": {
    "default": "<code>128 kB</code>",
    "plugin": [
      "fts-dovecot"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>The smallest FTS triplet is getting recreated whenever indexing new mails\nuntil it reaches this size. Then the triplet becomes merged with the next\nlargest triplet.</p>\n<p>When fts-cache is used, this effectively controls how large the fts.L file\ncan become in metacache until the FTS triplet is uploaded to object\nstorage.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts_dovecot.html\">fts-dovecot plugin</a>"
  },
  "fts_dovecot": {
    "advanced": true,
    "plugin": [
      "fts-dovecot"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs\">fs</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#obox\">obox</a></code>",
      "<a href=\"/main/core/config/mail_location.html#mail-location-setting\">Mail Location Setting</a>"
    ],
    "text": "<p>Named filter for initializing <a href=\"/main/core/config/fs.html\">FS Driver</a> for FTS indexes. It must be\nsomewhat synchronized with <code><a href=\"/main/core/summaries/settings.html#obox\">obox</a></code> and <a href=\"/main/core/config/mail_location.html#mail-location-setting\">Mail Location Setting</a>.</p>\n<p>This setting isn't actually necessary to use. It's simpler to add the settings\ninside <code>fts dovecot</code> filter (see: <code><a href=\"/main/core/summaries/settings.html#fts\">fts</a></code>), which is used to enable\nDovecot Pro FTS driver.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts_dovecot.html\">fts-dovecot plugin</a>",
    "no_default": true
  },
  "fts_dovecot_prefix": {
    "default": "<code>3-</code>",
    "changed": [
      {
        "text": "<p>Changed default from <code>no</code> to <code>3-</code></p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.2.0</span>"
      }
    ],
    "plugin": [
      "fts-dovecot"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Specifies how prefix search should be invoked. May not work with some\nfilters.</p>\n<p>If snowball filter is active, an existing system will require all existing\nuser FTS data to be re-indexed (see <code><a href=\"/main/core/summaries/doveadm.html#fts rescan\">doveadm fts rescan</a></code> and\n<code><a href=\"/main/core/summaries/doveadm.html#index\">doveadm index</a></code>).</p>\n<p>Options:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>yes</code></td>\n<td>Equivalent to <code>0-255</code></td>\n</tr>\n<tr>\n<td><code>&lt;num&gt;-[&lt;num&gt;]</code></td>\n<td>Search strings with that length will be treated as prefixes (e.g. <code>4-</code>, <code>3-10</code>)</td>\n</tr>\n<tr>\n<td><code>no</code></td>\n<td>No prefix searching is performed</td>\n</tr>\n</tbody>\n</table>\n",
    "plugin_link": "<a href=\"/main/core/plugins/fts_dovecot.html\">fts-dovecot plugin</a>"
  },
  "pop3_uidl_migrate_format": {
    "plugin": [
      "pop3-uidl-migrate"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>A template of the UIDL format to use when migrating messages.</p>\n<p>The template supports variable substitution of the form <code>%{variable_name}</code>.</p>\n<p>Variable substitutions available:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Field</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>owm</code></td>\n<td>OpenWave: If Message-ID header is valid POP3 UIDL, use it. Otherwise, use MD5 of the Message-ID header.</td>\n</tr>\n<tr>\n<td><code>uid</code></td>\n<td>IMAP message UID</td>\n</tr>\n<tr>\n<td><code>uidvalidity</code></td>\n<td>Current UID validity</td>\n</tr>\n</tbody>\n</table>\n",
    "plugin_link": "<a href=\"/main/core/plugins/pop3_uidl_migrate.html\">pop3-uidl-migrate plugin</a>"
  },
  "vault_mailbox": {
    "plugin": [
      "vault"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>This setting enables the vault plugin and identifies where to store a copy\nof the message.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/vault.html\">vault plugin</a>"
  },
  "nfs_hostchange_migration": {
    "default": "<code>no</code>",
    "plugin": [
      "nfs-hostchange"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>When enabled, assume user is being migrated.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/nfs_hostchange.html\">nfs-hostchange plugin</a>"
  },
  "@fs_dictmap_defaults": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "Settings Group",
        "url": "<a href=\"/main/core/settings/syntax.html#groups-includes\">Groups Includes</a>"
      }
    ],
    "values_enum": [
      "cassandra"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#dict_map\">dict_map</a></code>"
    ],
    "text": "<p>Group that expands to required <code><a href=\"/main/core/summaries/settings.html#dict_map\">dict_map</a></code> settings for use with\n<a href=\"/main/storage/dictmap.html\">Dictmap</a>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "@fs_defaults": {
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Settings Group",
        "url": "<a href=\"/main/core/settings/syntax.html#groups-includes\">Groups Includes</a>"
      }
    ],
    "values_enum": [
      "aws-s3",
      "s3",
      "azure",
      "sproxyd",
      "nfs"
    ],
    "seealso": [
      "<a href=\"/main/core/config/fs.html\">Dovecot Filesystems</a>",
      "<code><a href=\"/main/core/summaries/settings.html#fs\">fs</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#@fts_fs_defaults\">@fts_fs_defaults</a></code>"
    ],
    "text": "<p>Group that expands to recommended <a href=\"/main/core/plugins/obox.html\">obox plugin</a> <code><a href=\"/main/core/summaries/settings.html#fs\">fs</a></code> settings,\nincluding <a href=\"/main/core/plugins/fs_compress.html\">compression</a> and\n<a href=\"/main/core/plugins/mail_crypt.html\">encryption</a>. Note that they use\n<code>/var/cache/mails</code> directory, which must be created and be writable to the\n<code><a href=\"/main/core/summaries/settings.html#mail_uid\">mail_uid = vmail</a></code> user. Also note that you must configure the\n<a href=\"/main/core/plugins/mail_crypt.html#global-keys\">encryption keys</a>. See below for what the groups\nexpand to.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<details class=\"details custom-block\"><summary>@fs_defaults = aws-s3</summary>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>  fs_compress_write_method = zstd</span></span>\n<span class=\"line\"><span>  obox {</span></span>\n<span class=\"line\"><span>    fs fscache {</span></span>\n<span class=\"line\"><span>      path = /var/cache/mails/%{user | sha1 % 4}</span></span>\n<span class=\"line\"><span>      log_path = /var/cache/mails-%{user | sha1 % 4}.log</span></span>\n<span class=\"line\"><span>      size = 512 M</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs dictmap {</span></span>\n<span class=\"line\"><span>      storage_objectid_prefix = %{user}/mails/</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs aws-s3 {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>  metacache {</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs dictmap {</span></span>\n<span class=\"line\"><span>      storage_passthrough_paths = full</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs aws-s3 {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span></code></pre>\n</div></details>\n<details class=\"details custom-block\"><summary>@fs_defaults = s3</summary>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>  fs_compress_write_method = zstd</span></span>\n<span class=\"line\"><span>  obox {</span></span>\n<span class=\"line\"><span>    fs fscache {</span></span>\n<span class=\"line\"><span>      path = /var/cache/mails/%{user | sha1 % 4}</span></span>\n<span class=\"line\"><span>      log_path = /var/cache/mails-%{user | sha1 % 4}.log</span></span>\n<span class=\"line\"><span>      size = 512 M</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs dictmap {</span></span>\n<span class=\"line\"><span>      storage_objectid_prefix = %{user}/mails/</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs s3 {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>  metacache {</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs dictmap {</span></span>\n<span class=\"line\"><span>      storage_passthrough_paths = full</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs s3 {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span></code></pre>\n</div></details>\n<details class=\"details custom-block\"><summary>@fs_defaults = azure</summary>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>  fs_compress_write_method = zstd</span></span>\n<span class=\"line\"><span>  obox {</span></span>\n<span class=\"line\"><span>    fs fscache {</span></span>\n<span class=\"line\"><span>      path = /var/cache/mails/%{user | sha1 % 4}</span></span>\n<span class=\"line\"><span>      log_path = /var/cache/mails-%{user | sha1 % 4}.log</span></span>\n<span class=\"line\"><span>      size = 512 M</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs dictmap {</span></span>\n<span class=\"line\"><span>      storage_objectid_prefix = %{user}/mails/</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs azure {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>  metacache {</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs dictmap {</span></span>\n<span class=\"line\"><span>      storage_passthrough_paths = full</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs azure {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span></code></pre>\n</div></details>\n<details class=\"details custom-block\"><summary>@fs_defaults = sproxyd</summary>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>  fs_compress_write_method = zstd</span></span>\n<span class=\"line\"><span>  obox {</span></span>\n<span class=\"line\"><span>    fs fscache {</span></span>\n<span class=\"line\"><span>      path = /var/cache/mails/%{user | sha1 % 4}</span></span>\n<span class=\"line\"><span>      log_path = /var/cache/mails-%{user | sha1 % 4}.log</span></span>\n<span class=\"line\"><span>      size = 512 M</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs dictmap {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs sproxyd {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>  metacache {</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs dictmap {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs sproxyd {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span></code></pre>\n</div></details>\n<details class=\"details custom-block\"><summary>@fs_defaults = nfs</summary>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>  fs_compress_write_method = zstd</span></span>\n<span class=\"line\"><span>  obox {</span></span>\n<span class=\"line\"><span>    fs fscache {</span></span>\n<span class=\"line\"><span>      path = /var/cache/mails/%{user | sha1 % 4}</span></span>\n<span class=\"line\"><span>      log_path = /var/cache/mails-%{user | sha1 % 4}.log</span></span>\n<span class=\"line\"><span>      size = 512 M</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs metawrap { # v3.1.2+</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs posix {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span>\n<span class=\"line\"><span>  metacache {</span></span>\n<span class=\"line\"><span>    fs compress {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs crypt {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs metawrap { # v3.1.2+</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>    fs posix {</span></span>\n<span class=\"line\"><span>    }</span></span>\n<span class=\"line\"><span>  }</span></span></code></pre>\n</div></details>\n</div>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_auth_cache": {
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Named filter for fs-auth service. Used for configuring dictionary for\nauthentication cache. This allows sharing the cache between multiple servers.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>",
    "no_default": true
  },
  "fs_auth_request_max_retries": {
    "default": "<code>1</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>If fs-auth fails to perform authentication lookup, retry the HTTP request\nthis many times.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_auth_request_timeout": {
    "default": "<code>10s</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "text": "<p>Absolute HTTP request timeout for authentication lookups.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_aws_s3": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-aws"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_s3\">fs_s3</a></code>"
    ],
    "text": "<p>Filter for AWS S3-specific settings. <code><a href=\"/main/core/summaries/settings.html#fs_s3\">fs_s3</a></code> filter is also used.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>",
    "no_default": true
  },
  "fs_azure": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-azure"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Filter for Azure-specific settings.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>",
    "no_default": true
  },
  "fs_azure_account_name": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-azure"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_azure_auth_type\">fs_azure_auth_type</a></code>"
    ],
    "text": "<p>Azure account name for all authentication types.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_azure_auth_type": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-azure"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "user-sas",
      "service-sas"
    ],
    "default": "<code>user-sas</code>",
    "text": "<p>Azure authentication type to use.</p>\n<p>Options:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>user-sas</code></td>\n<td>See <a href=\"/main/storage/providers/azure.html\">Azure User SAS</a></td>\n</tr>\n<tr>\n<td><code>service-sas</code></td>\n<td>See <a href=\"/main/storage/providers/azure.html\">Azure Service SAS</a></td>\n</tr>\n</tbody>\n</table>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_azure_bulk_delete_limit": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-azure"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>256</code>",
    "text": "<p>Number of deletes supported within the same bulk delete request. <code>0</code> disables\nbulk deletes.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_azure_container_name": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-azure"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Azure container name.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_azure_url": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-azure"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code><a href=\"https://blob.core.windows.net\" target=\"_blank\" rel=\"noreferrer\">https://blob.core.windows.net</a></code>",
    "advanced": true,
    "text": "<p>URL for accessing the Azure storage. It is not intended to be changed, unless\ntesting some other Azure-compatible storage.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_azure_user_sas_client_id": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-azure"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_azure_auth_type\">fs_azure_auth_type</a></code>",
      "<a href=\"/main/storage/providers/azure.html\">Azure User SAS</a>"
    ],
    "text": "<p>ClientId to be used for authentication against Entra IDM. This is needed only\nwith <code><a href=\"/main/core/summaries/settings.html#fs_azure_auth_type\">fs_azure_auth_type = user-sas</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_azure_service_sas_secret": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-azure"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_azure_auth_type\">fs_azure_auth_type</a></code>",
      "<a href=\"/main/storage/providers/azure.html\">Azure Service SAS</a>"
    ],
    "text": "<p>Base64-encoded authentication shared key secret when using\n<code><a href=\"/main/core/summaries/settings.html#fs_azure_auth_type\">fs_azure_auth_type = service-sas</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_azure_user_sas_client_secret": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-azure"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_azure_auth_type\">fs_azure_auth_type</a></code>",
      "<a href=\"/main/storage/providers/azure.html\">Azure User SAS</a>"
    ],
    "text": "<p>Client secret to be used for authentication against Entra IDM (base64 encoded).\nThis is needed only with <code><a href=\"/main/core/summaries/settings.html#fs_azure_auth_type\">fs_azure_auth_type = user-sas</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_azure_user_sas_tenant_id": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-azure"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_azure_auth_type\">fs_azure_auth_type</a></code>",
      "<a href=\"/main/storage/providers/azure.html\">Azure User SAS</a>"
    ],
    "text": "<p>TenantId to be used for authentication against Entra IDM. This is needed only\nwith <code><a href=\"/main/core/summaries/settings.html#fs_azure_auth_type\">fs_azure_auth_type = user-sas</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_azure_trailing_slash_workaround": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-azure"
    ],
    "advanced": true,
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_azure_auth_type\">fs_azure_auth_type</a></code>",
      "<a href=\"/main/storage/providers/azure.html\">Azure User SAS</a>"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.1.2</span>"
      }
    ],
    "text": "<p>If enabled this emulates the unwanted behaviour of previous releases where all objects\nare stored with a '/' appended to the path.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_fscache_size": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-fscache"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>Size of the fscache.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_fscache_log_path": {
    "plugin": [
      "obox"
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.2.0</span>"
      }
    ],
    "default": "<code><a href=\"/main/core/summaries/settings.html#fs_fscache_path\">fs_fscache_path</a></code>/fscache.log",
    "tags": [
      "fs-fscache"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Path to the fscache log file. It is recommended to place this file outside\nof <code><a href=\"/main/core/summaries/settings.html#fs_fscache_path\">fs_fscache_path</a></code> so that if the filesystem partition used by\nfscache becomes full, the log file can still be written. Otherwise, this\ncould lead to fscache file leaks.</p>\n<p>Note that when this setting is used, <code><a href=\"/main/core/summaries/doveadm.html#fscache rescan\">doveadm fscache rescan</a></code> must use the\n<code>--log-path</code> parameter pointing to the correct log path.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_fscache_path": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-fscache"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Path to fscache root directory, which contains the cached files inside\nsubdirectories.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_bucket_cache_path": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<em>[None]</em><br/><code>obox { &quot;%{home}/buckets.cache&quot; }</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_dictmap_bucket_size\">fs_dictmap_bucket_size</a></code>"
    ],
    "text": "<p>Required when <code><a href=\"/main/core/summaries/settings.html#fs_dictmap_bucket_size\">fs_dictmap_bucket_size</a></code> is set. Bucket counters are\ncached in this file. This path should be located under the obox indexes\ndirectory (on the SSD backed cache mount point; e.g.\n<code>%{home}/buckets.cache</code>).</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_bucket_deleted_days": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "0<code>obox { 11 }</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_dictmap_bucket_size\">fs_dictmap_bucket_size</a></code>"
    ],
    "text": "<p>Track Cassandra's tombstones in <code>buckets.cache</code> file to avoid creating\nexcessively large buckets when a lot of mails are saved and deleted in a\nfolder. The value should be one day longer than <code>gc_grace_seconds</code> for the\n<code>user_mailbox_objects</code> table. By default this is 10 days, so in that case\n<code>fs_dictmap_bucket_deleted_days = 11</code> should be used. When determining\nwhether <code><a href=\"/main/core/summaries/settings.html#fs_dictmap_bucket_size\">fs_dictmap_bucket_size</a></code> is reached and a new one needs to be\ncreated, with this setting the tombstones are also taken into account. This\ntracking is preserved only as long as the <code>buckets.cache</code> exists.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_bucket_size": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "0<code>obox { 10000 }</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_dictmap_bucket_cache_path\">fs_dictmap_bucket_cache_path</a></code>"
    ],
    "dependencies": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_dictmap_bucket_cache_path\">fs_dictmap_bucket_cache_path</a></code>"
    ],
    "text": "<p>Separate email objects into buckets, where each bucket can have a maximum of\nthis many emails. This should be set to <code>10000</code> with Cassandra to avoid\npartitions becoming too large when there are a lot of emails.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_cleanup_uncertain": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>yes</code>",
    "seealso": [
      "<a href=\"/main/storage/dictmap.html#uncertain-writes\">Uncertain Writes</a>"
    ],
    "text": "<p>If a write to Cassandra fails with uncertainty and this setting is enabled\nDovecot attempts to clean it up.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_delete_dangling_links": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "seealso": [
      "<a href=\"/main/storage/troubleshooting/object_exists_in_dict_but_not_in_storage.html#dovecot-obox-object-exists-in-dict-but-not-in-storage\">Obox Troubleshooting: Object exists in dict, but not in storage</a>"
    ],
    "text": "<p>If an object exists in dict, but not in storage, delete it automatically from\ndict when it's noticed.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>This setting isn't safe to use by default, because storage may return &quot;object\ndoesn't exist&quot; errors only temporarily during split brain.</p>\n</div>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_delete_timestamp": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>10s</code>",
    "text": "<p>Increase Cassandra's <code>DELETE</code> timestamp by this value. This is useful to make\nsure the <code>DELETE</code> isn't ignored because Dovecot backends' times are slightly\ndifferent.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>If the same key is intentionally attempted to be written again soon afterwards,\nthe write becomes ignored. Dovecot doesn't normally do this, but this can\nhappen if the user is deleted with <code><a href=\"/main/core/summaries/doveadm.html#obox user delete\">doveadm obox user delete</a></code> and the same\nuser is recreated. This can also happen with <code><a href=\"/main/core/summaries/doveadm.html#backup\">doveadm backup</a></code> that reverts\nchanges by deleting a mailbox; running the <code><a href=\"/main/core/summaries/doveadm.html#backup\">doveadm backup</a></code> again will\nrecreate the mailbox with the same GUID.</p>\n</div>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_dict_prefix": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Prefix that is added to all dict keys.</p>\n<p>For example <a href=\"/main/core/plugins/fts_dovecot.html\">fts-dovecot plugin</a> writes everything to root. This setting is\nused in the defaults to make it write to the expected dict path prefix\n(<code>%{user}/fts/</code>), which is expected by the default dict maps.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_diff_table": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code><br /><code>metacache { yes }</code>",
    "seealso": [
      "<a href=\"/main/storage/dictmap.html#optimize_index_diff_self_bundle_updates\">Optimize Index Diff &amp; Self-bundle Updates</a>",
      "<code><a href=\"/main/core/summaries/settings.html#metacache\">metacache</a></code>"
    ],
    "text": "<p>Store diff and self index bundle objects to a separate table. This is a\nCassandra-backend optimization.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_lock_path": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_dictmap_refcounting_table\">fs_dictmap_refcounting_table</a></code>",
      "<a href=\"/main/core/plugins/lazy_expunge.html\">lazy-expunge plugin</a>"
    ],
    "text": "<p>If <code><a href=\"/main/core/summaries/settings.html#fs_dictmap_refcounting_table\">fs_dictmap_refcounting_table</a></code> is enabled, use this dictionary for\ncreating lock files to objects while they're being copied or deleted. This\nattempts to prevent race conditions where an object copy and delete runs\nsimultaneously and both succeed, but the copied object no longer exists. This\ncan't be fully prevented if different servers do this concurrently. If\n<a href=\"/main/core/plugins/lazy_expunge.html\">lazy-expunge plugin</a> is used this setting isn't really needed, because such\nrace conditions are practically  nonexistent. Not using the setting will\nimprove performance by avoiding a Cassandra <code>SELECT</code> when copying mails.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_nlinks_limit": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "0<code>obox { 3 }</code>",
    "text": "<p>Defines the maximum number of results returned from a dictionary iteration\nlookup (i.e. Cassandra CQL query) when checking the number of links to an\nobject. Limiting this may improve performance. Currently Dovecot only cares\nwhether the link count is <code>0</code>, <code>1</code> or &quot;more than <code>1</code>&quot; so for a bit of\nextra safety we recommend setting it to <code>3</code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_max_parallel_iter": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "changed": [
      {
        "text": "<p>Increased default from <code>1</code> to <code>10</code></p>\n",
        "version": "<span class=\"VPBadge info\">Changed: 3.1.0</span>"
      }
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>10</code>",
    "text": "<p>Describes how many parallel dict iterations can be created internally. The\ndefault value is <code>10</code>. Parallel iterations can especially help speed up\nreading huge folders.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_refcounting_index": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_dictmap_refcounting_table\">fs_dictmap_refcounting_table</a></code>"
    ],
    "text": "<p>Similar to the <code><a href=\"/main/core/summaries/settings.html#fs_dictmap_refcounting_table\">fs_dictmap_refcounting_table</a></code> setting, but instead of\nusing a reverse table to track the references, assume that the database has a\nreverse index set up.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_refcounting_table": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code><br /><code>obox { yes }</code>",
    "seealso": [
      "<a href=\"/main/storage/dictmap.html#reference-counting-table\">Reference Counting table</a>"
    ],
    "text": "<p>Enable reference counted objects. Reference counting allows a single mail\nobject to be stored in multiple mailboxes, without the need to create a new\ncopy of the message data in object storage.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_storage_objectid_migrate": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>This is expected to be used with <code><a href=\"/main/core/summaries/settings.html#fs_dictmap_storage_objectid_prefix\">fs_dictmap_storage_objectid_prefix</a></code>\nwhen adding fs-dictmap for an existing installation. The newly created object\nIDs have <code>&lt;storage-objectid-prefix&gt;/&lt;object-id&gt;</code> path while the migrated\nobject IDs have <code>&lt;user&gt;/mailboxes/&lt;mailbox-guid&gt;/&lt;oid&gt;</code> path. The newly\ncreated object IDs can be detected from the <code>0x80</code> bit in the object ID's\n<code>extra-data</code>. Migrated object IDs can't be copied directly within dict -\nthey'll be first copied to a new object ID using the parent fs.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_storage_objectid_prefix": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_dictmap_storage_passthrough_paths\">fs_dictmap_storage_passthrough_paths</a></code>",
      "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
    ],
    "text": "<p>Use fake object IDs with object storage that internally uses paths. This makes\ntheir performance much better, since it allows caching object IDs in Dovecot\nindex files and copying them via dict. This works by storing object in\n<code>&lt;prefix&gt;/&lt;objectid&gt;</code>. This setting should be used inside <a href=\"/main/core/plugins/obox.html\">obox plugin</a>\nnamed filter for storing mails under <code>&lt;prefix&gt;</code> (but not for\n<code><a href=\"/main/core/summaries/settings.html#metacache\">metacache</a></code> or <code>fts</code>).</p>\n<p>For example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>fs_dictmap_storage_objectid_prefix = %{user}/mails/</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_dictmap_storage_passthrough_paths": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-dictmap"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "none",
      "full",
      "read-only"
    ],
    "default": "<code>none</code>",
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_dictmap_storage_objectid_prefix\">fs_dictmap_storage_objectid_prefix</a></code>"
    ],
    "text": "<p>Use fake object IDs with object storage that internally uses path. Assume that\nobject ID is the same as the path. Objects can't be copied within the dict.\nThis setting should be used inside <code><a href=\"/main/core/summaries/settings.html#metacache\">metacache</a></code> and\n<code><a href=\"/main/core/summaries/settings.html#fts_dovecot\">fts_dovecot</a></code> named filters, because they don't need to support\ncopying objects. For mails, use <code><a href=\"/main/core/summaries/settings.html#fs_dictmap_storage_objectid_prefix\">fs_dictmap_storage_objectid_prefix</a></code>\ninstead.</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>none</code></td>\n<td>Don't use fake object IDs.</td>\n</tr>\n<tr>\n<td><code>full</code></td>\n<td>The object ID is written to dict as an empty value, because it's not used.</td>\n</tr>\n<tr>\n<td><code>read-only</code></td>\n<td>Useful for backwards compatibility. The path is written to the dict as the object ID even though it is not used (except potentially by an older Dovecot version).</td>\n</tr>\n</tbody>\n</table>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_http_add_headers": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-http"
    ],
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "text": "<p>Headers to add to HTTP requests.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_http_log_headers": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-http"
    ],
    "values": [
      {
        "label": "Boolean List",
        "url": "<a href=\"/main/core/settings/types.html#boolean-list\">Boolean List</a>"
      }
    ],
    "text": "<p>Headers with the given name in HTTP responses are logged as part of any error,\ndebug or warning messages related to the HTTP request. These headers are also\nincluded in the <code><a href=\"/main/core/summaries/events.html#http_request_finished\">http_request_finished</a></code> event as fields prefixed with\n<code>http_hdr_</code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_http_reason_header_max_length": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-http"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>If non-zero add <code>X-Dovecot-Reason:</code> header to the HTTP request. The value\ncontains a human-readable string why the request is being sent.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_http_slow_warning": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-http"
    ],
    "values": [
      {
        "label": "Time (milliseconds)",
        "url": "<a href=\"/main/core/settings/types.html#millisecond-time\">time (milliseconds)</a>",
        "default_required": true
      }
    ],
    "default": "<code>5s</code>",
    "text": "<p>Log a warning about any HTTP request that takes longer than this time.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_http_log_trace_headers": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-http"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>yes</code>",
    "text": "<p>If yes add <code>X-Dovecot-User:</code> and <code>X-Dovecot-Session:</code> headers to HTTP\nrequest. The session header is useful to correlate object storage requests to\nAppSuite/Dovecot sessions.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_http_url_suffix": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-http"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_s3_url\">fs_s3_url</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#fs_azure_url\">fs_azure_url</a></code>"
    ],
    "text": "<p>Setting to append a suffix to fs-http based fs drivers url.</p>\n<p>For example <a href=\"/main/core/plugins/fts_dovecot.html\">fts-dovecot plugin</a> writes everything to root. This setting is\nused in the defaults to make it write to the expected path suffix in storage\n(<code>%{user}/fts/</code>).</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_s3": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-s3"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Filter for S3-specific settings.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>",
    "no_default": true
  },
  "fs_s3_access_key": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-s3"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>S3 access key. Not needed when AWS IAM is used.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_s3_secret": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-s3"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>S3 secret. Not needed when AWS IAM is used.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_s3_signing": {
    "plugin": [
      "obox"
    ],
    "default": "<code>v4</code>",
    "tags": [
      "fs-s3"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "v4",
      "v2"
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_s3_region\">fs_s3_region</a></code>"
    ],
    "text": "<p>AWS s3 signing version to use. It is recommended to keep the default\n<a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html\" target=\"_blank\" rel=\"noreferrer\">v4 signing</a> which also requires\n<code><a href=\"/main/core/summaries/settings.html#fs_s3_region\">fs_s3_region</a></code> to be set. The <a href=\"https://docs.aws.amazon.com/AmazonS3/latest/API/RESTAuthentication.html\" target=\"_blank\" rel=\"noreferrer\">AWS v2 signing</a>\nis deprecated.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_s3_auth_host": {
    "plugin": [
      "obox"
    ],
    "advanced": true,
    "tags": [
      "fs-s3"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>169.254.169.254</code>",
    "text": "<p>AWS IAM hostname. Normally there is no reason to change this. This is mainly\nintended for testing.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_s3_auth_port": {
    "plugin": [
      "obox"
    ],
    "advanced": true,
    "tags": [
      "fs-s3"
    ],
    "values": [
      {
        "label": "Port Number",
        "url": "<a href=\"/main/core/settings/types.html#port-number\">Port Number</a>",
        "default_required": true
      }
    ],
    "default": "<code>80</code>",
    "text": "<p>AWS IAM port. Normally there is no reason to change this. This is mainly\nintended for testing.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_s3_auth_role": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-s3"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<a href=\"/main/storage/providers/aws.html#iam-authentication\">IAM Authentication</a>"
    ],
    "text": "<p>If not empty, perform AWS IAM lookup using this role.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_s3_bucket": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-s3"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>S3 bucket name added to the request path.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_s3_bulk_delete_limit": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-s3"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>1000</code>",
    "text": "<p>Number of deletes supported within the same bulk delete request. <code>0</code> disables\nbulk deletes.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_s3_region": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-s3"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs_s3_signing\">fs_s3_signing</a></code>"
    ],
    "text": "<p>Specify region name for AWS S3 bucket. Only needed when using v4 signing.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_s3_url": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-s3"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>URL for accessing the S3 storage. For example:\n<code>https://BUCKETNAME.s3.example.com</code></p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_sproxyd": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-sproxyd"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<a href=\"/main/storage/providers/sproxyd.html\">Scality (sproxyd)</a>"
    ],
    "text": "<p>Filter for <a href=\"/main/storage/providers/sproxyd.html\">sproxyd</a>-specific settings.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>",
    "no_default": true
  },
  "fs_sproxyd_access_by_path": {
    "plugin": [
      "obox"
    ],
    "advanced": true,
    "tags": [
      "fs-sproxyd"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Objects are accessed by the path instead of by the object ID. Scality sproxyd\ninternally converts the paths into object IDs.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_sproxyd_avoid_423_timeout": {
    "plugin": [
      "obox"
    ],
    "advanced": true,
    "tags": [
      "fs-sproxyd"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>Delay <code>DELETE</code> requests if the same object ID has been\n<code>GET</code>/<code>HEAD</code>/<code>PUT</code> by the same process within\n<a href=\"/main/core/settings/types.html#millisecond-time\">Millisecond Time</a>. This is intended to reduce\n<code>423 Locked</code> sent by Scality.</p>\n<p>When <code>0</code>, no delay is added. Only use this setting, if it can be seen to\nbring a benefit. Careful investigation of current error-rates and consideration\nof the overall throughput of the platform are recommended before using it.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_sproxyd_class": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-sproxyd"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "default": "<code>2</code>",
    "text": "<p>Scality Class of Service. <code>2</code> means that the objects are written to the\nScality RING 3 times in total. This is generally the minimum allowable\nredundancy for mail and index objects.</p>\n<p>FTS data is more easily reproducible, so losing those indexes is not as\ncritical; Class of Service <code>1</code> may be appropriate based on customer\nrequirements.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "fs_sproxyd_url": {
    "plugin": [
      "obox"
    ],
    "tags": [
      "fs-sproxyd"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>URL for accessing the <a href=\"/main/storage/providers/sproxyd.html\">sproxyd</a> storage.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache": {
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs\">fs</a></code>",
      "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
    ],
    "text": "<p>Named filter for initializing <a href=\"/main/core/config/fs.html\">FS Driver</a> for obox index bundles.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>",
    "no_default": true
  },
  "metacache_close_delay": {
    "default": "<code>2secs</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>If user was accessed this recently, assume the user's indexes are\nup-to-date.  If not, list index bundles in object storage (or Cassandra) to\nsee if they have changed. This typically matters only when user is being\nmoved to another backend and soon back again, or if the user is\nsimultaneously being accessed by multiple backends.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_forced_refresh_interval": {
    "default": "<code>8 hours</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "added": [
      {
        "version": "<span class=\"VPBadge tip\">Added: 3.0.0</span>"
      }
    ],
    "text": "<p>If the user indexes haven't been refreshed for this long time, force the\nrefresh. This is done by ignoring the\n<code><a href=\"/main/core/summaries/settings.html#metacache_close_delay\">metacache_close_delay</a></code> setting (i.e. same as if it is <code>0</code>).</p>\n<p>This setting allows highly active users' indexes still to be refreshed once\nin a while. (Although if the user has an active session 100% of the time,\nthe refresh cannot be done.)</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_max_grace": {
    "default": "<code>1G</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "text": "<p>How much disk space on top of <code><a href=\"/main/core/summaries/settings.html#metacache_max_space\">metacache_max_space</a></code> can be used\nbefore Dovecot stops allowing more users to login.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_max_space": {
    "default": "<code>unlimited</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "text": "<p>How much disk space metacache can use before old data is cleaned up.</p>\n<p>Generally, this should be set at ~90% of the available disk space.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_rescan_interval": {
    "default": "<code>1 day</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#metacache_roots\">metacache_roots</a></code>"
    ],
    "advanced": true,
    "text": "<p>How often to run a background metacache rescan, which makes sure that the\ndisk space usage tracked by metacache process matches what really exists on\nfilesystem.</p>\n<p>The desync may happen, for example, because the metacache process (or the\nwhole backend) crashes.</p>\n<p>The rescanning helps with two issues:</p>\n<ul>\n<li>If metacache filesystem uses more disk space than metacache process\nthinks, it may run out of disk space.</li>\n<li>If metacache filesystem uses less disk space than metacache process\nthinks, metacache runs non-optimally since it's not filling it out as\nmuch as it could.</li>\n</ul>\n<p>Setting this to <code>0</code> disables the rescan.</p>\n<p>It's also possible to do this manually by running the\n<code><a href=\"/main/core/summaries/doveadm.html#metacache rescan\">doveadm metacache rescan</a></code> command.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_roots": {
    "default": "<code><a href=\"/main/core/summaries/settings.html#mail_home\">mail_home</a></code> and <code><a href=\"/main/core/summaries/settings.html#mail_chroot\">mail_chroot</a></code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#metacache_rescan_interval\">metacache_rescan_interval</a></code>"
    ],
    "advanced": true,
    "text": "<p>List of metacache root directories, separated with <code>:</code>.</p>\n<p>Usually this is automatically parsed directly from <code><a href=\"/main/core/summaries/settings.html#mail_home\">mail_home</a></code> and\n<code><a href=\"/main/core/summaries/settings.html#mail_chroot\">mail_chroot</a></code> settings.</p>\n<p>Accessing a metacache directory outside these roots will result in a\nwarning: &quot;Index directory is outside metacache_roots&quot;.</p>\n<p>It's possible to disable this check entirely by setting the value to <code>:</code>.</p>\n<div class=\"tip custom-block\"><p class=\"custom-block-title\">TIP</p>\n<p>This setting is required for <code><a href=\"/main/core/summaries/settings.html#metacache_rescan_interval\">metacache_rescan_interval</a></code>.</p>\n</div>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_clean_max_inactive_time": {
    "default": "<code>3 days</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Specifies the duration of inactivity after which a user is considered inactive.</p>\n<p>If a user has not been accessed within the specified time period,\nthey are marked as inactive. Any inactive users whose metacache is in a different\nbackend are periodically cleaned up.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_upload_interval": {
    "default": "<code>5min</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "text": "<p>How often to upload important index changes to object storage?</p>\n<p>This mainly means that if a backend crashes during this time, message flag\nchanges within this time may be lost. A longer time can however reduce the\nnumber of index bundle uploads.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_pull": {
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#metacache_pull_enabled\">metacache_pull_enabled</a></code>"
    ],
    "text": "<p>Named filter for configuring <a href=\"/main/core/config/dict.html\">dictionary</a> to update <code>metacache_last_host</code>\nfield in <code><a href=\"/main/core/summaries/settings.html#cluster_geodb\">cluster_geodb</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>",
    "no_default": true
  },
  "metacache_pull_enabled": {
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#metacache_pull\">metacache_pull</a></code>"
    ],
    "default": "<code>yes</code>",
    "text": "<p>By default metacache pulling is enabled.</p>\n<p>The Palomar Proxy's cluster process looks up the <code>metacache_last_host</code>\nautomatically from <code><a href=\"/main/core/summaries/settings.html#cluster_geodb\">cluster_geodb</a></code> and forwards it to the backend.\nIf the looked up host differs from the current host\n(<code><a href=\"/main/core/summaries/settings.html#cluster_backend_name\">cluster_backend_name</a></code>), metacache is pulled from the\n<code>metacache_last_host</code> backend.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox": {
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#fs\">fs</a></code>",
      "<code><a href=\"/main/core/summaries/settings.html#metacache\">metacache</a></code>"
    ],
    "text": "<p>Named filter for initializing <a href=\"/main/core/config/fs.html\">FS Driver</a> for obox mails.</p>\n<div class=\"info custom-block\"><p class=\"custom-block-title\">INFO</p>\n<p>See the storage provider pages for specific parameters that can be used.</p>\n</div>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>",
    "no_default": true
  },
  "obox_max_parallel_copies": {
    "default": "<code><a href=\"/main/core/summaries/settings.html#mail_prefetch_count\">mail_prefetch_count</a></code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>Maximum number of email HTTP copy/link operations to do in parallel.</p>\n<p>If the storage driver supports bulk-copy/link operation, this controls how\nmany individual copy operations can be packed into a single bulk-copy/link\nHTTP request.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox_max_parallel_deletes": {
    "default": "<code><a href=\"/main/core/summaries/settings.html#mail_prefetch_count\">mail_prefetch_count</a></code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>Maximum number of email HTTP delete operations to do in parallel.</p>\n<p>If the storage driver supports bulk-delete operation, this controls how\nmany individual delete operations can be packed into a single bulk-delete\nHTTP request.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox_max_parallel_writes": {
    "default": "<code><a href=\"/main/core/summaries/settings.html#mail_prefetch_count\">mail_prefetch_count</a></code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>Maximum number of email write HTTP operations to do in parallel.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_refresh_index_once_after": {
    "default": 0,
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>This forces the next mailbox open after the specified UNIX timestamp to\nrefresh locally cached indexes to see if other backends have modified the\nuser's indexes simultaneously.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_rescan_mails_once_after": {
    "default": 0,
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "text": "<p>This forces the next mailbox open after the specified UNIX timestamp to\nrescan the mails to make sure there aren't any unindexed mails.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox_track_copy_flags": {
    "default": "<code>no</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>This is an optimization for <a href=\"/main/storage/dictmap.html\">Dictmap</a>/Cassandra and\n<a href=\"/main/core/plugins/lazy_expunge.html\">lazy-expunge plugin</a> with <code><a href=\"/main/core/summaries/settings.html#lazy_expunge_only_last_instance\">lazy_expunge_only_last_instance = yes</a></code>,\nwhich attempts to avoid Cassandra SELECTs when expunging mails.</p>\n<p><span class=\"VPBadge info\">Changed: 3.2.0</span> This is\nenabled by using <code><a href=\"/main/core/summaries/settings.html#@fs_dictmap_defaults\">@fs_dictmap_defaults = cassandra</a></code></p>\n<p>It works by adding an internal invisible &quot;copied&quot; flag for mails when they\nare copied. If a copied-flag is not found for &quot;trusted UID range&quot;, the\nmail's reference count is returned as 1 for the lazy_expunge lookup.\nOtherwise the reference count lookup is done from Cassandra. The &quot;trusted\nUID range&quot; is only the messages that are saved since the metacache was last\ndownloaded, i.e. the optimization only works for new mails. If it was done\nalso for old mails, the result could be wrong after a backend crashes,\nsince it could lose some of the copied-flags. This optimizes only the\nlazy_expunge plugin's reference count lookup, not the final expunges in the\nlazy_expunge folder, so even if something goes wrong and refcount=1 is wrongly\nreturned, the worst that can happen is that a mail is moved to lazy_expunge\nfolder too early.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_bg_root_uploads": {
    "default": "<code>no</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>By default, doing changes to folders (e.g. creating or renaming) uploads\nchanges immediately to object storage. If this setting is enabled, the\nupload happens sometimes later (within <code><a href=\"/main/core/summaries/settings.html#metacache_upload_interval\">metacache_upload_interval</a></code>).</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_bundle_list_cache": {
    "default": "<code>yes</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Enable caching bundle list.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_secondary_indexes": {
    "default": "<code>yes</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Enable including secondary indexes into the user root bundle when using\nthe virtual or virtual-attachments plugin.</p>\n<p>This setting can be used to exclude the virtual and virtual-attachments\nfolders from the user root bundle in case any problems are encountered.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_index_merging": {
    "default": "<code>v2</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>Specifies the algorithm to use when merging folder indexes.</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Algorithm</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>none</code></td>\n<td>Disable the merging algorithm</td>\n</tr>\n<tr>\n<td><code>v2</code></td>\n<td>The new algorithm designed specifically for this purpose of merging two indexes. This is the recommended setting.</td>\n</tr>\n</tbody>\n</table>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_max_parallel_requests": {
    "default": "<code>10</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Maximum number of metacache read/write operations to do in parallel.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_merge_max_uid_renumbers": {
    "default": "<code>100</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>This is used only with <code><a href=\"/main/core/summaries/settings.html#metacache_index_merging\">metacache_index_merging = v2</a></code>.</p>\n<p>If the merging detects that there are more than this many UIDs that are\nconflicting and would have to be renumbered, don't renumber any of them.\nThis situation isn't expected to happen normally, and renumbering too many\nUIDs can cause unnecessary extra disk I/O.</p>\n<p>The downside is that a caching IMAP client might become confused if it had\npreviously seen different UIDs.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_priority_weights": {
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>See <code><a href=\"/main/core/summaries/settings.html#metacache_size_weights\">metacache_size_weights</a></code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_size_weights": {
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>Whenever metacache notices that <code><a href=\"/main/core/summaries/settings.html#metacache_max_space\">metacache_max_space</a></code> has been\nreached, it needs to delete some older index files to make space for new ones.\nThis is done by calculating cleanup weights.</p>\n<p>The simplest cleanup weight is to just use the user's last access UNIX\ntimestamp as the weight. The lowest weight gets deleted first.</p>\n<p>It's possible to enable using only simple weights by explicitly setting\n<code><a href=\"/main/core/summaries/settings.html#metacache_priority_weights\">metacache_priority_weights</a></code> and this setting\nto empty values. However, by default priorities are taken into account when\ncalculating the weight.</p>\n<p>The <code><a href=\"/main/core/summaries/settings.html#metacache_priority_weights\">metacache_priority_weights</a></code> setting can be used to fine tune how\nmetacache adjusts the cleanup weights for different index priorities. There\nare 4 major priorities (these are also visible in e.g.\n<code><a href=\"/main/core/summaries/doveadm.html#metacache list\">doveadm metacache list</a></code> output):</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Priority</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>0</code></td>\n<td>User root indexes (highest priority)</td>\n</tr>\n<tr>\n<td><code>1</code></td>\n<td>FTS indexes</td>\n</tr>\n<tr>\n<td><code>2</code></td>\n<td>INBOX and Junk folder indexes (&quot;special&quot; folders)</td>\n</tr>\n<tr>\n<td><code>3</code></td>\n<td>Non-special folder indexes (lowest priority)</td>\n</tr>\n</tbody>\n</table>\n<p>The <code><a href=\"/main/core/summaries/settings.html#metacache_priority_weights\">metacache_priority_weights</a></code> contains <code>&lt;percentage&gt; &lt;weight adjustment&gt;</code> pairs for each of these priorities. So, for example, the\nfirst <code>10% +1d</code> applies to the user root priority and the last <code>100% 0</code>\napplies to other folders' priority.</p>\n<p>The weight calculation is then done by:</p>\n<ul>\n<li>Initial weight is the user's last access UNIX timestamp</li>\n<li><code><a href=\"/main/core/summaries/settings.html#metacache_priority_weights\">metacache_priority_weights</a></code> is next looked up for the given\npriority indexes</li>\n<li>If the total disk space used by the indexes is equal or less than the\n<code>&lt;percentage&gt;</code>, add <code>&lt;weight adjustment&gt;</code> to weight. So, for\nexample, with <code>10% +1d</code> if the disk space used by index files of this\npriority type take &lt;= 10% of <code><a href=\"/main/core/summaries/settings.html#metacache_max_space\">metacache_max_space</a></code>, increase the\nweight by <code>1d = 60*60*24 = 86400</code>.</li>\n<li>Because the initial weight is based on UNIX timestamp, the weight\nadjustment is also given as time. This practically means that e.g.\n<code>+1d</code> typically gives 1 extra day for the index files to exist\ncompared to index files that don't have the weight boost.</li>\n<li><code>&lt;percentage&gt;</code> exists so that the weight boost doesn't cause some\nindex files to dominate too much. For example, if root indexes' weights\nweren't limited, it could be possible that the system would be full of\nonly root indexes and active users' other indexes would be cleaned\nalmost immediately.</li>\n</ul>\n<p>This setting is used to do final adjustments\ndepending on the disk space used by this user's indexes of the specific\npriority. The setting is in format\n<code>&lt;low size&gt; &lt;low weight adjustment&gt; &lt;max size&gt; &lt;high weight adjustment&gt;</code>.</p>\n<p>The weight adjustment calculation is:</p>\n<ul>\n<li>If disk space is equal or less than <code>&lt;low size&gt;</code>, increase weight by\n<code>(&lt;low size&gt; - &lt;disk space&gt;) * &lt;low weight adjustment&gt; / &lt;low size&gt;</code></li>\n<li>Otherwise, cap the <code>&lt;disk space&gt;</code> to <code>&lt;max size&gt;</code> and increase\nweight by <code>(&lt;disk space&gt; - &lt;low size&gt;) * &lt;high weight adjustment&gt; / (&lt;max size&gt; - &lt;low size&gt;)</code></li>\n<li>The idea here is to give extra weight boost for\n<ul>\n<li>Small indexes, because they're small enough that it won't matter if\nthey live longer than most, AND</li>\n<li>Very large indexes, because it's so expensive to keep\nuploading/downloading them in object storage</li>\n</ul>\n</li>\n<li>With the default <code>2M +30 1G +120</code> value the priority adjustments will\nlook like:\n<ul>\n<li>0 kB: <code>+30</code></li>\n<li>500 kB: <code>+23</code></li>\n<li>1 MB: <code>+15</code></li>\n<li>1,5 MB: <code>+8</code></li>\n<li>2 MB: <code>0</code></li>\n<li>10 MB: <code>+1</code></li>\n<li>50 MB: <code>+6</code></li>\n<li>100 MB: <code>+12</code></li>\n<li>258 MB: <code>+30</code></li>\n<li>500 MB: <code>+60</code></li>\n<li>&gt;=1 GB: <code>+120</code></li>\n</ul>\n</li>\n</ul>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>metacache_priority_weights = 10% +1d 10% +1d 50% +1h 100% 0</span></span>\n<span class=\"line\"><span>metacache_size_weights = 2M +30 1G +120</span></span></code></pre>\n</div>",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "metacache_userdb": {
    "default": "<code>metacache/metacache-users.db</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>Path to a database which metacache process periodically writes to.</p>\n<p>This database is read by metacache at startup to get the latest state.</p>\n<p>The path is relative to <code>state_dir</code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox_allow_nonreproducible_uids": {
    "default": "<code>no</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Normally Dovecot attempts to make sure that IMAP UIDs aren't lost even if\na backend crashes (or if user is moved to another backend without indexes\nfirst being uploaded). This requires uploading index bundles whenever\nexpunging recently saved mails. Setting this to &quot;yes&quot; avoids this extra\nindex bundle upload at the cost of potentially changing IMAP UIDs. This\ncould cause caching IMAP clients to become confused, possibly even causing\nit to delete wrong mails.  Also FTS indexes may become inconsistent since\nthey also rely on UIDs.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox_autofix_storage": {
    "default": "<code>no</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>If activated, when an unexpected 404 is found when retrieving a message\nfrom object storage, Dovecot will rescan the mailbox by listing its\nobjects. If the 404-object is still listed in this query, Dovecot issues a\nHEAD to determine if the message actually exists. If this HEAD request\nreturns a 404, the message is dropped from the index. The message object is\nnot removed from the object storage.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox_avoid_cached_vsize": {
    "default": "<code>no</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Avoid getting the email's size from the cache whenever the email body is\nopened anyway. This avoid unnecessary errors if a lot of the vsizes are\nwrong. The vsize in dovecot.index is also automatically updated to the\nfixed value with or without this setting.</p>\n<p>This setting was mainly useful due to earlier bugs that caused the vsize to\nbe wrong in many cases.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox_disable_fast_copy": {
    "default": "<code>no</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Workaround for object storages with a broken copy operation. Instead\nperform copying by reading and writing the full object.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox_use_object_ids": {
    "default": "<code>yes</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>If enabled, access objects directly via their IDs instead of by path, if\npossible.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox_fetch_lost_mails_as_empty": {
    "default": "<code>no</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "seealso": [
      "<a href=\"/main/storage/admin.html#storage-workarounds\">storage workarounds</a>"
    ],
    "text": "<p>Cassandra: &quot;Object exists in dict, but not in storage&quot; errors will be\nhandled by returning empty emails to the IMAP client. The tagged FETCH\nresponse will be <code>OK</code> instead of <code>NO</code>.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox_lost_mailbox_prefix": {
    "default": "<code>recovered-lost-folder-</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "advanced": true,
    "text": "<p>If folder name is lost entirely due to lost index files, generate a name\nfor the folder using this prefix.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox_max_rescan_mail_count": {
    "default": "<code>10</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Unsigned Integer",
        "url": "<a href=\"/main/core/settings/types.html#unsigned-integer\">unsigned integer</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>Keep a maximum of this many newly saved mails in local metacache indexes\nbefore metacache is flushed to object storage. For example with a value of\n10, every 11th mail triggers a metacache flush. Note that the flush isn't\nimmediate - it will happen in the background some time within the next\n<code><a href=\"/main/core/summaries/settings.html#metacache_upload_interval\">metacache_upload_interval</a></code>.</p>\n<p>A higher value reduces the number of index bundle uploads, but increases the\nnumber of mail downloads to fill the caches after a backend crash.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox_pop3_backend_uidls": {
    "default": "<code>yes</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "text": "<p>If set to <code>no</code>, don't try to lookup migrated POP3 UIDLs from email metadata\nin any situation. This used to bring performance improvements, but now the\nexistence of migrated UIDLs is tracked more efficiently and there should be no\nneed to change this setting.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "obox_size_missing_action": {
    "default": "<code>warn-read</code>",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>",
        "enum_required": true
      }
    ],
    "values_enum": [
      "warn-read",
      "read",
      "stat"
    ],
    "advanced": true,
    "text": "<p>This setting controls what should be done when the mail object is missing\nthe size metadata.</p>\n<p>Options:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>read</code></td>\n<td>Same as <code>warn-read</code>, but doesn't log a warning.</td>\n</tr>\n<tr>\n<td><code>stat</code></td>\n<td>Use fs_stat() to get the size, which is the fastest but doesn't work if mails are compressed or encrypted.</td>\n</tr>\n<tr>\n<td><code>warn-read</code></td>\n<td>Log a warning and fallback to reading the email to calculate its size.</td>\n</tr>\n</tbody>\n</table>\n",
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>"
  },
  "quota_unified_product_name": {
    "plugin": [
      "unified-quota"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Product name for unified quota.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/unified_quota.html\">unified-quota plugin</a>"
  },
  "quota_unified_dict_unset": {
    "plugin": [
      "unified-quota"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>When updating the unified quota dictionary, specifies whether the dict record\nis first &quot;unset&quot; before setting it again.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/unified_quota.html\">unified-quota plugin</a>"
  },
  "sieve_zimbra_addressbook_dict": {
    "plugin": [
      "sieve-zimbra-compat"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Configuration for the dict lookup. This should normally point to the dict proxy,\nso that asynchronous batch lookups are possible.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_zimbra_compat.html\">sieve-zimbra-compat plugin</a>"
  },
  "sieve_zimbra_bare_extensions": {
    "plugin": [
      "sieve-zimbra-compat"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>A space-separated list of all the Zimbra extensions that are made available\nwithout the prefix.</p>\n<p>Note that this hides any standard extension with the same name as one of\nZimbra extensions; e.g., the &quot;date&quot; extension will become the Zimbra version\nonce the &quot;date&quot; extension is listed in this setting.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_zimbra_compat.html\">sieve-zimbra-compat plugin</a>"
  },
  "sieve_zimbra_notify_as_redirect": {
    "default": "<code>no</code>",
    "plugin": [
      "sieve-zimbra-compat"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>If enabled, executes the &quot;vnd.zimbra.notify&quot; action as a &quot;redirect&quot; action.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_zimbra_compat.html\">sieve-zimbra-compat plugin</a>"
  },
  "sieve_zimbra_notify_envelope_from": {
    "default": "<code><a href=\"/main/core/summaries/settings.html#sieve_notify_mailto_envelope_from\">sieve_notify_mailto_envelope_from</a></code> or <code>postmaster</code>",
    "plugin": [
      "sieve-zimbra-compat"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Specifies what envelope sender address is used for notification emails.\nThe following values are supported for this setting:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Value</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>sender</code></td>\n<td>The sender address is used.</td>\n</tr>\n<tr>\n<td><code>recipient</code></td>\n<td>The final recipient address is used.</td>\n</tr>\n<tr>\n<td><code>orig_recipient</code></td>\n<td>The original recipient is used.</td>\n</tr>\n<tr>\n<td><code>user_email</code></td>\n<td>The user's primary address is used. This is configured with <code><a href=\"/main/core/summaries/settings.html#sieve_user_email\">sieve_user_email</a></code>. If that setting is not configured, <code>user_mail</code> is equal to <code>recipient</code>.</td>\n</tr>\n<tr>\n<td><code>postmaster</code></td>\n<td>The postmaster_address configured for the LDA.</td>\n</tr>\n<tr>\n<td><code>&lt;user@domain&gt;</code></td>\n<td>Notifications are always sent from user@domain. The angle brackets are mandatory. The null (&quot;&lt;&gt;&quot;) address is also supported.</td>\n</tr>\n</tbody>\n</table>\n<p>The &quot;From&quot; header is based on this setting as well. When the envelope sender\nof the processed message is the null address &quot;&lt;&gt;&quot;, the envelope sender of the\nnotification is also always &quot;&lt;&gt;&quot;, irrespective of what is configured for\nthis setting.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/sieve_zimbra_compat.html\">sieve-zimbra-compat plugin</a>"
  },
  "message_hashing_hash_method": {
    "plugin": [
      "message-hashing"
    ],
    "default": "<code>md5</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The hashing method to use. Must be a recognized Dovecot hashing method\n(see <code><a href=\"/main/core/summaries/settings.html#auth_policy_hash_mech\">auth_policy_hash_mech</a></code> for list of supported methods).</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/message_hashing.html\">message-hashing plugin</a>"
  },
  "message_hashing_min_attachment_size": {
    "plugin": [
      "message-hashing"
    ],
    "default": "<code>1 B</code>",
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "text": "<p>The minimum size of an attachment to be processed; attachments smaller than\nthis will be skipped.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/message_hashing.html\">message-hashing plugin</a>"
  },
  "fs_server": {
    "default": "",
    "plugin": [
      "obox"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Specifies how to store files with fs-server.</p>\n",
    "seealso": [
      "<a href=\"/main/guides/fs_server.html\">Object storage server emulator</a>"
    ],
    "plugin_link": "<a href=\"/main/core/plugins/obox.html\">obox plugin</a>",
    "no_default": true
  },
  "intercept": {
    "tags": [
      "intercept-common"
    ],
    "values": [
      {
        "label": "Named List Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-list-filter\">Named List Filter</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#intercept_driver\">intercept_driver</a></code>"
    ],
    "text": "<p>Enables the intercept driver. Only one intercept driver can be enabled. The\nfilter name refers to the <code><a href=\"/main/core/summaries/settings.html#intercept_driver\">intercept_driver</a></code> setting.</p>\n<p>Example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>intercept utimaco {</span></span>\n<span class=\"line\"><span>  # ...</span></span>\n<span class=\"line\"><span>}</span></span></code></pre>\n</div><p>Since an empty <code><a href=\"/main/core/summaries/settings.html#dict_driver\">dict_driver</a></code> defaults to <code><a href=\"/main/core/summaries/settings.html#dict_name\">dict_name</a></code>, there\nis no need to specify the <code><a href=\"/main/core/summaries/settings.html#dict_driver\">dict_driver</a></code> setting explicitly.</p>\n"
  },
  "intercept_driver": {
    "tags": [
      "intercept-common"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The intercept driver to use. Configure this via\nthe <code><a href=\"/main/core/summaries/settings.html#intercept_driver\">intercept_driver</a></code> setting instead.</p>\n"
  },
  "intercept_tz": {
    "tags": [
      "intercept-common"
    ],
    "default": "<code>&lt;system time zone&gt;</code>",
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Allows choosing a time zone for the proxy that is different than the default\nsystem time zone. This is useful for some backends (Utimaco) that use\ntimestamps without time zone field and expect a specific time zone.</p>\n<p>The syntax is identical to the TZ environment variable.</p>\n"
  },
  "intercept_fs": {
    "tags": [
      "intercept-fs"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Named filter for intercept FS driver settings.</p>\n",
    "no_default": true
  },
  "intercept_fs_header_line": {
    "tags": [
      "intercept-fs"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Add a header to the log.</p>\n<p>See <a href=\"/main/intercept/backends/fs.html\">variables</a> for supported variable substitutions.</p>\n"
  },
  "intercept_fs_rotate_interval": {
    "tags": [
      "intercept-fs"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": "<code>5min</code>",
    "text": "<p>Flush log and create a new one this often.</p>\n"
  },
  "intercept_fs_rotate_at_midnight": {
    "tags": [
      "intercept-fs"
    ],
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Rotate the log at midnight (server's local timezone).</p>\n"
  },
  "intercept_fs_rotate_size": {
    "tags": [
      "intercept-fs"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>Rotate the log when it reaches this size.</p>\n<p>If <code>0</code>, never rotate.</p>\n"
  },
  "intercept_buffer_dir": {
    "tags": [
      "intercept-common"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Path to temporary files creating intercepted data.</p>\n<p>Needed only when <code><a href=\"/main/core/summaries/settings.html#intercept_buffer_max_size\">intercept_buffer_max_size</a></code> &gt; 0.</p>\n"
  },
  "intercept_buffer_max_size": {
    "tags": [
      "intercept-common"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": "<code>0</code>",
    "text": "<p>Write intercept buffers larger than this into temporary files in\n<code><a href=\"/main/core/summaries/settings.html#intercept_buffer_dir\">intercept_buffer_dir</a></code>.</p>\n<p>If <code>0</code>, buffers are always kept in memory.</p>\n"
  },
  "intercept_pine": {
    "tags": [
      "intercept-pine"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Named filter for intercept Pine driver settings.</p>\n",
    "no_default": true
  },
  "intercept_pine_host": {
    "tags": [
      "intercept-pine"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>PineApp server's hostname.</p>\n"
  },
  "intercept_pine_port": {
    "tags": [
      "intercept-pine"
    ],
    "values": [
      {
        "label": "Port Number",
        "url": "<a href=\"/main/core/settings/types.html#port-number\">Port Number</a>",
        "default_required": true
      }
    ],
    "default": "",
    "text": "<p>PineApp server's port.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">WARNING</p>\n<p>This value must be set if using PineApp, or else Dovecot will not start.</p>\n</div>\n"
  },
  "intercept_crypted_user": {
    "tags": [
      "intercept-common"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Value for the <code>%{crypted_user}</code> variable. The most secure way to generate\nthis is to generate a unique identifier for each intercept request's\n<code><a href=\"/main/core/summaries/settings.html#intercept_id\">intercept_id</a></code> and use that as the salt:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>intercept_crypted_user = %{user | encrypt(key='secret',salt=userdb:intercept_id,raw=1)}</span></span></code></pre>\n</div><p>For backwards compatibility with old <code>intercept_crypt_*</code> settings, use:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>intercept_crypted_user = %{user | encrypt(hash='sha1',rounds=16,key='intercept_crypt_key',salt='intercept_crypt_key',algorithm='intercept_crypt_cipher',raw=1)}</span></span></code></pre>\n</div>"
  },
  "intercept_id": {
    "tags": [
      "intercept-common"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>If set, intercept is activated for this user.</p>\n<p>Additionally, this value is passed to the intercept-proxy as an intercept-ID\nin the interception session.</p>\n<div class=\"warning custom-block\"><p class=\"custom-block-title\">Note</p>\n<p>This is intended to be set in a user's session by <a href=\"/main/core/config/auth/userdb.html\">userdb</a> lookup.</p>\n<p>It is documented here for completion's sake.</p>\n</div>\n<div class=\"danger custom-block\"><p class=\"custom-block-title\">Note</p>\n<p>The <a href=\"/main/core/plugins/login_intercept.html\">login-intercept plugin</a> uses <a href=\"/main/core/config/auth/passdb.html#extra-fields\">passdb: Extra Fields</a> instead of\nthis value.</p>\n</div>\n"
  },
  "intercept_utimaco": {
    "tags": [
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Named filter for intercept Utimaco driver settings.</p>\n",
    "no_default": true
  },
  "intercept_api_utimaco_sql_query_surveillance": {
    "tags": [
      "intercept-api",
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>\nSELECT uuid, UNIX_TIMESTAMP(created) AS created FROM targets WHERE userid_hash = '%{user | md5 | hexlify}'</code>",
    "advanced": true,
    "text": "<p>The SQL query used to obtain surveillance information (from the Utimaco X1\nservice) about a particular e-mail address.</p>\n<p>See <code><a href=\"/main/core/summaries/settings.html#intercept_utimaco_x1_sql_query_check_surveillance\">intercept_utimaco_x1_sql_query_check_surveillance</a></code> for variable\nsubstitution information.</p>\n"
  },
  "intercept_utimaco_x1_sql_query_check_surveillance": {
    "tags": [
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>\nSELECT uuid FROM targets WHERE userid_hash = '%{userid | md5 | hexlify}</code>",
    "advanced": true,
    "text": "<p>The SQL query used to check (from Utimaco X1 service) whether an e-mail\naddress is already surveilled.</p>\n<p>Variable substitutions supported:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Variable</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>%{userid}</code></td>\n<td>User ID</td>\n</tr>\n<tr>\n<td><code>%{uuid}</code></td>\n<td>UUID</td>\n</tr>\n<tr>\n<td><code>%{address}</code></td>\n<td>Address</td>\n</tr>\n</tbody>\n</table>\n"
  },
  "intercept_utimaco_x1_sql_query_add_surveillance": {
    "tags": [
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>\nINSERT INTO targets (userid_hash, uuid, address) VALUES ('%{userid | md5 | hexlify}', '%{uuid}', '%{address}')</code>",
    "advanced": true,
    "text": "<p>The SQL query used to add a new target to the Utimaco X1 surveillance database.</p>\n<p>See <code><a href=\"/main/core/summaries/settings.html#intercept_utimaco_x1_sql_query_check_surveillance\">intercept_utimaco_x1_sql_query_check_surveillance</a></code> for variable\nsubstitution information.</p>\n"
  },
  "intercept_utimaco_x1_sql_query_cancel_surveillance": {
    "tags": [
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>DELETE FROM targets WHERE uuid = '%{uuid}'</code>",
    "advanced": true,
    "text": "<p>The SQL query used to remove a target from the Utimaco X1 surveillance\ndatabase.</p>\n<p>See <code><a href=\"/main/core/summaries/settings.html#intercept_utimaco_x1_sql_query_check_surveillance\">intercept_utimaco_x1_sql_query_check_surveillance</a></code> for variable\nsubstitution information.</p>\n"
  },
  "intercept_utimaco_x1_sql_query_get_user_data": {
    "tags": [
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>SELECT userid_hash, address FROM targets WHERE uuid = '%{uuid}'</code>",
    "advanced": true,
    "text": "<p>The SQL query used to get information (from the Utimaco X1 surveillance\ndatabase) about a surveilled user.</p>\n<p>See <code><a href=\"/main/core/summaries/settings.html#intercept_utimaco_x1_sql_query_check_surveillance\">intercept_utimaco_x1_sql_query_check_surveillance</a></code> for variable\nsubstitution information.</p>\n"
  },
  "intercept_utimaco_x1_sql_query_get_surveillance_status": {
    "tags": [
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>SELECT uuid FROM targets WHERE uuid = '%{uuid}'</code>",
    "advanced": true,
    "text": "<p>The SQL query used to check (from the Utimaco X1 surveillance database)\nwhether an UUID is currently surveilled.</p>\n<p>See <code><a href=\"/main/core/summaries/settings.html#intercept_utimaco_x1_sql_query_check_surveillance\">intercept_utimaco_x1_sql_query_check_surveillance</a></code> for variable\nsubstitution information.</p>\n"
  },
  "intercept_utimaco_x1_sql_query_list_surveillances": {
    "tags": [
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "default": "<code>SELECT uuid FROM targets</code>",
    "advanced": true,
    "text": "<p>The SQL query used to list all items from the Utimaco X1 surveillance database.</p>\n<p>See <code><a href=\"/main/core/summaries/settings.html#intercept_utimaco_x1_sql_query_check_surveillance\">intercept_utimaco_x1_sql_query_check_surveillance</a></code> for variable\nsubstitution information.</p>\n"
  },
  "intercept_utimaco_x1_testing": {
    "tags": [
      "intercept-utimaco"
    ],
    "advanced": true,
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Enable the Utimaco testing mode for the utimaco-x1 service, in which the use\nof TLS is not required.</p>\n"
  },
  "intercept_utimaco_x3_url": {
    "tags": [
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "URL",
        "url": "<a href=\"/main/core/settings/types.html#url\">URL</a>"
      }
    ],
    "text": "<p>The HTTP URL of the Utimaco X3 receiver.</p>\n"
  },
  "intercept_utimaco_x3_rawlog_dir": {
    "tags": [
      "intercept-utimaco"
    ],
    "advanced": true,
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>If this directory exists, and it is writable by the utimaco-x3 service,\nthe messages exchanged between client and server are logged here. This is\nuseful for debugging.</p>\n"
  },
  "intercept_utimaco_x3_debug": {
    "tags": [
      "intercept-utimaco"
    ],
    "advanced": true,
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Enable debug logging for utimaco-x3 service.</p>\n"
  },
  "intercept_utimaco_x3_kafka_brokers": {
    "tags": [
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>A list of brokers that are used to establish an initial connection to the\nKafka cluster. At least one is required when Kafka is used. It is not required\nto list all brokers in the cluster; the full list is established during\nprotocol initialization.</p>\n<p>Separate brokers with spaces, <code>,</code> or <code>;</code> in the setting.</p>\n"
  },
  "intercept_utimaco_x3_kafka_topic": {
    "tags": [
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The name of the Kafka topic the event messages are submitted to. This setting\ndetermines whether kafka is used; if this is not configured, the system will\nattempt direct submission to the X3 endpoint through HTTP.</p>\n"
  },
  "intercept_utimaco_x3_kafka_consumer_group": {
    "tags": [
      "intercept-utimaco"
    ],
    "default": "<code>utimaco-x3-consumers</code>",
    "advanced": true,
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>The name of the Kafka consumer group used by the utimaco-x3-kafka consumer\nservice. This is currently only used to record the current consumption offset\non the Kafka cluster; it is currently not possible to have more than a single\nconsumer!</p>\n"
  },
  "intercept_utimaco_x3_kafka_consume_interval": {
    "tags": [
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "text": "<p>The maximum time a broker is requested to wait before responding to a\nconsumer. If there are no messages queued, the broker will respond with an\nempty list of messages. Use this to keep the connection with the broker\nactive.</p>\n"
  },
  "intercept_utimaco_x3_kafka_consume_max_size": {
    "tags": [
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "advanced": true,
    "default": "<code>10M</code>",
    "text": "<p>Limit a batch of consumed messages to approximately this size.</p>\n"
  },
  "intercept_utimaco_x3_kafka_consume_min_size": {
    "tags": [
      "intercept-utimaco"
    ],
    "values": [
      {
        "label": "Size",
        "url": "<a href=\"/main/core/settings/types.html#size\">size</a>",
        "default_required": true
      }
    ],
    "default": 0,
    "advanced": true,
    "text": "<p>The broker will respond to a consumer when a batch of messages with this\ncumulative size is available.</p>\n"
  },
  "intercept_utimaco_x3_testing": {
    "tags": [
      "intercept-utimaco"
    ],
    "advanced": true,
    "default": "<code>no</code>",
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "text": "<p>Enable the Utimaco testing mode for the utimaco-x3 service, in which the use\nof TLS is not required.</p>\n"
  },
  "intercept_box_path": {
    "plugin": [
      "intercept-box"
    ],
    "values": [
      {
        "label": "String",
        "url": "<a href=\"/main/core/settings/types.html#string\">string</a>"
      }
    ],
    "text": "<p>Path to save the mail intercepted via the <a href=\"/main/core/plugins/intercept_box.html\">intercept-box plugin</a>.</p>\n<p>For example:</p>\n<div class=\"language- vp-adaptive-theme\"><button title=\"Copy Code\" class=\"copy\"></button><span class=\"lang\"></span><pre class=\"shiki shiki-themes github-light github-dark vp-code\" tabindex=\"0\" v-pre=\"\"><code><span class=\"line\"><span>intercept_box_path = %{crypted_user}/%{timestamp}.%{generate:guid128}.SMTP.%{type}.eml</span></span></code></pre>\n</div><p>Variable substitutions supported:</p>\n<table tabindex=\"0\">\n<thead>\n<tr>\n<th>Variable</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>user</code></td>\n<td>user@domain (<a href=\"/main/core/plugins/intercept_box.html\">based on the folder name</a>)</td>\n</tr>\n<tr>\n<td><code>crypted_user</code></td>\n<td>user@domain encrypted via <code><a href=\"/main/core/summaries/settings.html#intercept_crypted_user\">intercept_crypted_user</a></code></td>\n</tr>\n<tr>\n<td><code>timestamp</code></td>\n<td>timestamp (<a href=\"/main/core/plugins/intercept_box.html\">based on the folder name</a>)</td>\n</tr>\n<tr>\n<td><code>type</code></td>\n<td>type (<a href=\"/main/core/plugins/intercept_box.html\">based on the folder name</a>)</td>\n</tr>\n</tbody>\n</table>\n<p><a href=\"/main/core/settings/variables.html#mail-user-variables\">Mail User Variables</a> can also be used.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/intercept_box.html\">intercept-box plugin</a>"
  },
  "intercept_box_add_headers": {
    "plugin": [
      "intercept-box"
    ],
    "values": [
      {
        "label": "String List",
        "url": "<a href=\"/main/core/settings/types.html#string-list\">String List</a>"
      }
    ],
    "seealso": [
      "<code><a href=\"/main/core/summaries/settings.html#intercept_box_path\">intercept_box_path</a></code>"
    ],
    "text": "<p>Headers to add to HTTP requests, when <code><a href=\"/main/core/summaries/settings.html#intercept_box\">intercept_box</a></code> is configured\nwith HTTP-based fs storage.</p>\n<p>See <code><a href=\"/main/core/summaries/settings.html#intercept_box_path\">intercept_box_path</a></code> for supported variable substitutions.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/intercept_box.html\">intercept-box plugin</a>"
  },
  "intercept_box": {
    "plugin": [
      "intercept-box"
    ],
    "values": [
      {
        "label": "Named Filter",
        "url": "<a href=\"/main/core/settings/types.html#named-filter\">Named Filter</a>",
        "no_default": true
      }
    ],
    "text": "<p>Named filter for intercept-box settings.</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/intercept_box.html\">intercept-box plugin</a>",
    "no_default": true
  },
  "imap_intercept_disconnect_after": {
    "plugin": [
      "imap-intercept"
    ],
    "values": [
      {
        "label": "Time",
        "url": "<a href=\"/main/core/settings/types.html#time\">time</a>",
        "default_required": true
      }
    ],
    "default": "<code>infinite</code>",
    "text": "<p>The IMAP client is disconnected after this amount of time, and interception\nis discontinued.</p>\n<p>This timeout prevents repeated interception of a very long session\n(disconnection is performed for all users, so that interception-specific\nbehavior isn't obvious to the user).</p>\n",
    "plugin_link": "<a href=\"/main/core/plugins/imap_intercept.html\">imap-intercept plugin</a>"
  },
  "intercept_debug": {
    "tags": [
      "intercept-common"
    ],
    "values": [
      {
        "label": "Boolean",
        "url": "<a href=\"/main/core/settings/types.html#boolean\">boolean</a>",
        "default_required": true
      }
    ],
    "default": "<code>no</code>",
    "text": "<p>Normally, the intercept plugins don't log much of anything, even in error\nsituations, because we want to avoid making visible which users are being\nintercepted.</p>\n<p>Set this value to true to output additional debugging information.</p>\n"
  }
}