Module ngx_mail_core_module

默认情况下未构建此模块,应使用--with-mail配置参数启用它。

Example Configuration

worker_processes 1;

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;
    }
}

Directives

Syntax:listen address:port [ssl] [backlog=number] [rcvbuf=size] [sndbuf=size] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
Default:
Context:server

设置服务器将在其上接受请求的套接字的addressport。可以仅指定端口。该地址也可以是主机名,例如:

listen 127.0.0.1:110;
listen *:110;
listen 110;     # same as *:110
listen localhost:110;

IPv6 地址(0.7.58)在方括号中指定:

listen [::1]:110;
listen [::]:110;

UNIX 域套接字(1.3.5)使用“ unix:”前缀指定:

listen unix:/var/run/nginx.sock;

不同的服务器必须侦听不同的addressport对。

ssl参数允许指定该端口上接受的所有连接均应以 SSL 模式工作。

listen指令可以具有一些特定于套接字相关系统调用的附加参数。

  • backlog = number

    • listen()调用中设置backlog参数,该参数限制了挂起的连接队列的最大长度(1.9.2)。默认情况下,backlog在 FreeBSD,DragonFly BSD 和 macOS 上设置为-1,在其他平台上设置为 511.
  • rcvbuf = size

    • 设置侦听套接字(1.11.13)的接收缓冲区大小(SO_RCVBUF选项)。
  • sndbuf = size

    • 设置侦听套接字(1.11.13)的发送缓冲区大小(SO_SNDBUF选项)。
  • bind

    • 此参数指示对给定的 address:port 对单独进行bind()调用。事实是,如果有多个listen伪指令具有相同的端口但地址不同,并且listen伪指令之一在给定端口(*: port)的所有地址上侦听,则 nginx 只会bind()*: port。应当注意,在这种情况下将进行getsockname()系统调用,以确定接受连接的地址。如果使用ipv6onlyso_keepalive参数,则对于给定的addressport对,将始终进行单独的bind()调用。
  • ipv6only = on | off

    • 此参数(通过IPV6_V6ONLY套接字选项)确定在通配符地址[::]上侦听的 IPv6 套接字将仅接受 IPv6 连接还是接受 IPv6 和 IPv4 连接。默认情况下,此参数是打开的。启动时只能设置一次。
  • so_keepalive = on | off |[ keepidle ]:[ keepintvl ]:[ keepcnt ]

    • 此参数为侦听套接字配置“ TCP keepalive”行为。如果省略此参数,则 os 的设置对套接字有效。如果将其设置为值“ on”,则将为套接字打开SO_KEEPALIVE选项。如果将其设置为值“ off”,则套接字的SO_KEEPALIVE选项将关闭。某些 os 使用TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNT套接字选项支持按套接字设置 TCP keepalive 参数。在此类系统(当前为 Linux 2.4,NetBSD 5 和 FreeBSD 9.0-STABLE)上,可以使用keepidlekeepintvlkeepcnt参数进行配置。可以省略一个或两个参数,在这种情况下,相应套接字选项的系统默认设置将生效。例如,
so_keepalive=30m::10

会将闲置超时(TCP_KEEPIDLE)设置为 30 分钟,将探测间隔(TCP_KEEPINTVL)保留为系统默认值,并将探测计数(TCP_KEEPCNT)设置为 10 个探测。

Syntax:mail { ... }
Default:
Context:main

提供在其中指定邮件服务器指令的配置文件上下文。

Syntax:protocol imap | pop3 | smtp;
Default:
Context:server

设置代理服务器的协议。支持的协议是IMAPPOP3SMTP

如果未设置指令,则可以根据listen指令中指定的知名端口自动检测协议:

  • imap : 143, 993

  • pop3 : 110, 995

  • smtp : 25, 587, 465

可以使用configuration参数--without-mail_imap_module--without-mail_pop3_module--without-mail_smtp_module禁用不必要的协议。

Syntax:resolver address ... [valid=time] [ipv6=on|off] [status_zone=zone];

resolver off;
默认值:resolver off;
上下文: mailserver

配置用于查找客户端主机名的名称服务器,以将其传递给authentication server,并在代理 SMTP 时使用XCLIENT命令。例如:

resolver 127.0.0.1 [::1]:5353;

可以使用可选端口(1.3.1,1.2.2)将地址指定为域名或 IP 地址。如果未指定端口,则使用端口 53.以循环方式查询名称服务器。

Note

在版本 1.1.7 之前,只能配置一个名称服务器。从版本 1.3.1 和 1.2.2 开始,支持使用 IPv6 地址指定名称服务器。

默认情况下,nginx 在解析时将同时查找 IPv4 和 IPv6 地址。如果不需要查找 IPv6 地址,则可以指定ipv6=off参数。

Note

从版本 1.5.8 开始,支持将名称解析为 IPv6 地址。

默认情况下,nginx 使用响应的 TTL 值缓存答案。可选的valid参数允许覆盖它:

resolver 127.0.0.1 [::1]:5353 valid=30s;

Note

在 1.1.9 版之前,无法调整缓存时间,nginx 始终将答案缓存 5 分钟。

Note

为防止 DNS 欺骗,建议在适当安全的受信任本地网络中配置 DNS 服务器。

可选的status_zone参数(1.17.1)启用collection的 DNS 服务器统计信息,用于指定zone中的请求和响应。该参数可作为commercial subscription的一部分使用。

特殊值off禁用解析。

Syntax:resolver_timeout time;
Default:resolver_timeout 30s;
Context:mail , server

设置 DNS 操作的超时,例如:

resolver_timeout 5s;

Syntax:server { ... }
Default:
Context:mail

设置服务器的配置。

Syntax:server_name name;
Default:server_name hostname;
Context:mail , server

设置使用的服务器名称:

  • 在最初的 POP3/SMTP 服务器问候语中;

  • 在 SASL CRAM-MD5 身份验证期间处于盐状态;

  • 如果启用了XCLIENT命令的传递,则在连接到 SMTP 后端时在EHLO命令中单击。

如果未指定指令,则使用计算机的主机名。

Syntax:timeout time;
Default:timeout 60s;
Context:mail , server

设置在代理到后端开始之前使用的超时。