IMAP4rev1 endpoint

Module 'imap' is a listener that implements IMAP4rev1 protocol and provides access to local messages storage specified by 'storage' directive.

In most cases, local storage modules will auto-create accounts when they are accessed via IMAP. This relies on authentication provider used by IMAP endpoint to provide what essentially is access control. There is a caveat, however: this auto-creation will not happen when delivering incoming messages via SMTP as there is no authentication to confirm that this account should indeed be created.

Configuration directives

imap tcp://0.0.0.0:143 tls://0.0.0.0:993 {
    tls /etc/ssl/private/cert.pem /etc/ssl/private/pkey.key
    io_debug no
    debug no
    insecure_auth no
    sasl_login no
    auth pam
    storage &local_mailboxes
    auth_map identity
    auth_map_normalize auto
    storage_map identity
    storage_map_normalize auto
}

tls certificate-path key-path { ... }

Default: global directive value

TLS certificate & key to use. Fine-tuning of other TLS properties is possible by specifying a configuration block and options inside it:

tls cert.crt key.key {
    protocols tls1.2 tls1.3
}

See TLS configuration / Server for details.


proxy_protocol trusted ips... { ... }

Default: not enabled

Enable use of HAProxy PROXY protocol. Supports both v1 and v2 protocols. If a list of trusted IP addresses or subnets is provided, only connections from those will be trusted.

TLS for the channel between the proxies and maddy can be configured using a 'tls' directive:

proxy_protocol {
    trust 127.0.0.1 ::1 192.168.0.1/24
    tls &proxy_tls
}

Note that the top-level 'tls' directive is not inherited here. If you need TLS on top of the PROXY protocol, securing the protocol header, you must declare TLS explicitly.


io_debug boolean

Default: no

Write all commands and responses to stderr.


io_errors boolean

Default: no

Log I/O errors.


debug boolean

Default: global directive value

Enable verbose logging.


insecure_auth boolean

Default: no (yes if TLS is disabled)

Allow plain-text authentication over unencrypted connections.


sasl_login boolean

Default: no

Enable support for SASL LOGIN authentication mechanism used by some outdated clients.


auth module-reference

Required.

Use the specified module for authentication.


storage module-reference

Required.

Use the specified module for message storage.


storage_map module-reference

Default: identity

Use the specified table to map SASL usernames to storage account names.

Before username is looked up, it is normalized using function defined by storage_map_normalize.

This directive is useful if you want users user@example.org and user@example.com to share the same storage account named "user". In this case, use

    storage_map email_localpart

Note that storage_map does not affect the username passed to the authentication provider.

It also does not affect how message delivery is handled, you should specify delivery_map in storage module to define how to map email addresses to storage accounts. E.g.

    storage.imapsql local_mailboxes {
        ...
        delivery_map email_localpart # deliver "user@*" to mailbox for "user"
    }

storage_map_normalize function

Default: auto

Same as auth_map_normalize but for storage_map.


auth_map_normalize function

Default: auto

Overrides global auth_map_normalize value for this endpoint.

See Global configuration for details.