Модуль ngx_mail_core_module
| Пример конфигурации Директивы listen max_errors protocol resolver resolver_timeout server server_name timeout  | 
По умолчанию этот модуль не собирается, его сборку необходимо
разрешить с помощью конфигурационного параметра
--with-mail.
Пример конфигурации
worker_processes auto;
error_log /var/log/nginx/error.log info;
events {
    worker_connections  1024;
}
mail {
    server_name       mail.example.com;
    auth_http         localhost:9000/cgi-bin/nginxauth.cgi;
    imap_capabilities IMAP4rev1 UIDPLUS IDLE LITERAL+ QUOTA;
    pop3_auth         plain apop cram-md5;
    pop3_capabilities LAST TOP USER PIPELINING UIDL;
    smtp_auth         login plain cram-md5;
    smtp_capabilities "SIZE 10485760" ENHANCEDSTATUSCODES 8BITMIME DSN;
    xclient           off;
    server {
        listen   25;
        protocol smtp;
    }
    server {
        listen   110;
        protocol pop3;
        proxy_pass_error_message on;
    }
    server {
        listen   143;
        protocol imap;
    }
    server {
        listen   587;
        protocol smtp;
    }
}
Директивы
| Синтаксис: | 
            listen 
     | 
                
|---|---|
| Умолчание: | — | 
| Контекст: | 
            server | 
                
Задаёт адрес и порт сокета, на котором сервер
будет принимать запросы.
Можно указать только порт.
Кроме того, адрес может быть именем сервера, например:
listen 127.0.0.1:110; listen *:110; listen 110; # то же, что и *:110 listen localhost:110;
IPv6-адреса (0.7.58) задаются в квадратных скобках:
listen [::1]:110; listen [::]:110;
 
UNIX-сокеты (1.3.5) задаются при помощи префикса “unix:”:
listen unix:/var/run/nginx.sock;
Разные серверы должны слушать на разных парах
адрес:порт.
Параметр ssl указывает на то, что все соединения,
принимаемые на данном порту, должны работать в режиме SSL.
Параметр proxy_protocol (1.19.8)
указывает на то, что все соединения, принимаемые на данном порту,
должны использовать
протокол
PROXY.
Полученная информация передаётся
серверу аутентификации
и может быть использована для
изменения адреса клиента.
В директиве listen можно также указать несколько
дополнительных параметров, специфичных для связанных с сокетами
системных вызовов.
- 
backlog=число - 
задаёт параметр 
backlogв вызовеlisten(), который ограничивает максимальный размер очереди ожидающих приёма соединений (1.9.2). По умолчаниюbacklogустанавливается равным -1 для FreeBSD, DragonFly BSD и macOS, и 511 для других платформ. - 
rcvbuf=размер - 
задаёт размер буфера приёма
(параметр 
SO_RCVBUF) для слушающего сокета (1.11.13). - 
sndbuf=размер - 
задаёт размер буфера передачи
(параметр 
SO_SNDBUF) для слушающего сокета (1.11.13). - 
bind - 
указывает, что для данной пары
адрес:портнужно делатьbind()отдельно. Это нужно потому, что если описаны несколько директивlistenс одинаковым портом, но разными адресами, и одна из директивlistenслушает на всех адресах для данного порта (*:порт), то nginx сделаетbind()только на*:порт. Необходимо заметить, что в этом случае для определения адреса, на который пришло соединение, делается системный вызовgetsockname(). Если же используются параметрыbacklog,rcvbuf,sndbuf,ipv6onlyилиso_keepalive, то для данной парыадрес:портвсегда делается отдельный вызовbind(). - 
ipv6only=on|off - 
этот параметр определяет
(через параметр сокета 
IPV6_V6ONLY), будет ли слушающий на wildcard-адресе[::]IPv6-сокет принимать только IPv6-соединения, или же одновременно IPv6- и IPv4-соединения. По умолчанию параметр включён. Установить его можно только один раз на старте. - 
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt] - 
этот параметр конфигурирует для слушающего сокета
поведение “TCP keepalive”.
Если этот параметр опущен, то для сокета будут действовать
настройки операционной системы.
Если он установлен в значение “
on”, то для сокета включается параметрSO_KEEPALIVE. Если он установлен в значение “off”, то для сокета параметрSO_KEEPALIVEвыключается. Некоторые операционные системы поддерживают настройку параметров “TCP keepalive” на уровне сокета посредством параметровTCP_KEEPIDLE,TCP_KEEPINTVLиTCP_KEEPCNT. На таких системах (в настоящий момент это Linux, NetBSD, Dragonfly, FreeBSD и macOS) их можно сконфигурировать с помощью параметровkeepidle,keepintvlиkeepcnt. Один или два параметра могут быть опущены, в таком случае для соответствующего параметра сокета будут действовать стандартные системные настройки. Например,
установит таймаут бездействия (so_keepalive=30m::10
TCP_KEEPIDLE) в 30 минут, для интервала проб (TCP_KEEPINTVL) будет действовать стандартная системная настройка, а счётчик проб (TCP_KEEPCNT) будет равен 10. 
| Синтаксис: | 
            mail { ... } | 
                
|---|---|
| Умолчание: | — | 
| Контекст: | 
            main | 
                
Предоставляет контекст конфигурационного файла, в котором указываются директивы почтового сервера.
| Синтаксис: | 
            max_errors  | 
                
|---|---|
| Умолчание: | 
            max_errors 5;  | 
                
| Контекст: | 
            mail, server | 
                
Эта директива появилась в версии 1.21.0.
Задаёт число ошибок протокола, по достижении которого соединение закрывается.
| Синтаксис: | 
            protocol 
   | 
                
|---|---|
| Умолчание: | — | 
| Контекст: | 
            server | 
                
Задаёт протокол проксируемого сервера. Поддерживаются протоколы IMAP, POP3 и SMTP.
Если директива не указана, то протокол может быть определён автоматически по общеизвестному порту, указанному в директиве listen:
- 
imap: 143, 993 - 
pop3: 110, 995 - 
smtp: 25, 587, 465 
Поддержку ненужных протоколов можно отключить с помощью
конфигурационных
параметров --without-mail_imap_module,
--without-mail_pop3_module и
--without-mail_smtp_module.
| Синтаксис: | 
            resolver 
    resolver  | 
                
|---|---|
| Умолчание: | 
            resolver off;  | 
                
| Контекст: | 
            mail, server | 
                
Задаёт серверы DNS, используемые для определения имени хоста клиента для передачи его на сервер аутентификации и в команде XCLIENT при проксировании SMTP. Например:
resolver 127.0.0.1 [::1]:5353;
Адрес может быть указан в виде доменного имени или IP-адреса, и необязательного порта (1.3.1, 1.2.2). Если порт не указан, используется порт 53. Серверы DNS опрашиваются циклически.
До версии 1.1.7 можно было задать лишь один DNS-сервер. Задание DNS-серверов с помощью IPv6-адресов поддерживается начиная с версий 1.3.1 и 1.2.2.
По умолчанию nginx будет искать как IPv4-, так и IPv6-адреса
при преобразовании имён в адреса.
Если поиск IPv4- или IPv6-адресов нежелателен,
можно указать параметр ipv4=off (1.23.1) или
ipv6=off.
Преобразование имён в IPv6-адреса поддерживается начиная с версии 1.5.8.
По умолчанию nginx кэширует ответы, используя значение TTL из ответа.
Необязательный параметр valid позволяет это
переопределить:
resolver 127.0.0.1 [::1]:5353 valid=30s;
До версии 1.1.9 настройка времени кэширования была невозможна и nginx всегда кэшировал ответы на срок в 5 минут.
Для предотвращения DNS-спуфинга рекомендуется использовать DNS-серверы в защищённой доверенной локальной сети.
Необязательный параметр status_zone (1.17.1)
включает
сбор информации
о запросах и ответах сервера DNS
в указанной зоне.
Параметр доступен как часть
коммерческой подписки.
Специальное значение off запрещает использование DNS.
| Синтаксис: | 
            resolver_timeout  | 
                
|---|---|
| Умолчание: | 
            resolver_timeout 30s;  | 
                
| Контекст: | 
            mail, server | 
                
Задаёт таймаут для операций DNS, например:
resolver_timeout 5s;
| Синтаксис: | 
            server { ... } | 
                
|---|---|
| Умолчание: | — | 
| Контекст: | 
            mail | 
                
Задаёт конфигурацию для сервера.
| Синтаксис: | 
            server_name  | 
                
|---|---|
| Умолчание: | 
            server_name hostname;  | 
                
| Контекст: | 
            mail, server | 
                
Задаёт имя сервера, используемое:
- в начальном приветствии POP3/SMTP-сервера;
 - в salt при аутентификации SASL-методом CRAM-MD5;
 - 
в команде 
EHLOпри подключении к SMTP-бэкенду, если разрешена передача команды XCLIENT. 
Если директива не указана, используется имя хоста (hostname) машины.
| Синтаксис: | 
            timeout  | 
                
|---|---|
| Умолчание: | 
            timeout 60s;  | 
                
| Контекст: | 
            mail, server | 
                
Задаёт таймаут, который используется до начала проксирования на бэкенд.