邮件模块#
核心邮件模块实现了邮件代理服务器的基本功能: 包括对 SMTP、IMAP 和 POP3 协议的支持、配置服务器块、邮件请求路由、用户身份验证,以及用于保护邮件连接的 SSL/TLS 支持。
本节中的其他模块扩展了此功能,允许您灵活地配置和优化邮件服务器以适应各种场景和需求。
当 从源代码构建 时,
此模块默认不会被构建;
应使用
默认值 — server 设置服务器将接受连接的套接字的 address 和 port。可以只指定 port,Angie 将监听所有可用的 IPv4 接口(如果启用,还包括 IPv6)。address 也可以是主机名,例如: IPv6 地址用方括号指定: UNIX 域套接字使用 备注 不同的服务器必须监听不同的 address:port 对。 指定在此端口上接受的所有连接都应在 SSL 模式下工作。 在 为监听套接字设置接收缓冲区大小(SO_RCVBUF 选项)。 为监听套接字设置发送缓冲区大小(SO_SNDBUF 选项)。 指示为给定的 address:port 对进行单独的 确定(通过 IPV6_V6ONLY 套接字选项)监听通配符地址 [::] 的 IPv6 套接字是只接受 IPv6 连接还是同时接受 IPv6 和 IPv4 连接。此参数默认开启。它只能在启动时设置一次。 启用通过 Multipath TCP (MPTCP)接受连接,
在 Linux 内核 5.6 及更高版本中支持。 为监听套接字配置"TCP keepalive"行为。 如果省略此参数,则套接字将使用操作系统的设置 为套接字开启 为套接字关闭 某些操作系统支持使用 例如, 将空闲超时( 不同的服务器必须监听不同的 address:port 对。 提供配置文件上下文,在其中指定邮件服务器指令。 设置身份验证期间发出的最大命令数,以增强对 DoS 攻击的防护。 设置协议错误的次数,超过此次数后将关闭连接。 设置代理服务器的协议。支持的协议有 IMAP、POP3 和 SMTP。 如果未设置该指令,可以根据 当 从源代码构建 时,可以使用
默认值 mail, server 配置用于查找客户端主机名的名称服务器,以将其传递给 身份验证服务器,并在代理 SMTP 时用于 XCLIENT 命令。例如: 特殊值 地址可以指定为域名或 IP 地址,带有可选端口。如果未指定端口,则使用端口 53。名称服务器以轮询方式查询。 备注 指令值会被嵌套块继承,
并且可以在嵌套块中根据需要进行覆盖。
在单个块内,指令只能指定一次。
如果重复指定,则最后一次定义生效。 默认情况下,Angie 使用响应的 TTL 值来缓存答案。如果
未指定 可选 参数,允许覆盖缓存条目的有效期 默认情况下,Angie 在解析时会同时查找 IPv4 和 IPv6 地址。 禁用 IPv4 地址查找 禁用 IPv6 地址查找 可选 参数,在指定区域中启用 DNS 服务器请求和响应信息的收集 小技巧 为了防止 DNS 欺骗,建议在安全可靠的受信任本地网络中配置 DNS 服务器。 小技巧 在 Docker 中运行时,使用其内部 DNS 服务器地址,例如 设置名称解析的超时时间,例如: 设置服务器的配置。 设置服务器名称,用于: POP3/SMTP 服务器的初始问候语; SASL CRAM-MD5 认证期间的盐值; 连接到 SMTP 后端时的 EHLO 命令,如果启用了 XCLIENT 命令的传递。 如果未指定该指令,则使用机器的 hostname。 设置开始代理到后端之前使用的超时时间。--with-mail
构建选项 启用它。
在来自 我们的软件仓库 的软件包和镜像中,
该模块已包含在构建中。配置示例#
worker_processes auto;
error_log /var/log/angie/error.log info;
events {
worker_connections 1024;
}
mail {
server_name mail.example.com;
auth_http localhost:9000/cgi-bin/auth.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#
listen address[:port] [ssl] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [bind] [ipv6only=on | off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];listen 127.0.0.1:110;
listen *:110;
listen 110; # 与 *:110 相同
listen localhost:110;
listen [::1]:110;
listen [::]:110;
unix: 前缀指定:listen unix:/var/run/angie.sock;
sslproxy_protocollisten 指令可以有几个与套接字相关的系统调用特定的附加参数。backlog=numberlisten() 调用中设置 backlog 参数,该参数限制待处理连接队列的最大长度。默认情况下,在 FreeBSD、DragonFly BSD 和 macOS 上 backlog 设置为 -1,在其他平台上设置为 511。rcvbuf=sizesndbuf=sizebindbind() 调用。事实上,如果有多个具有相同端口但不同地址的 listen 指令,并且其中一个 listen 指令监听给定端口的所有地址(*:port),Angie 将只 bind() 到 *:port。应该注意的是,在这种情况下将进行 getsockname() 系统调用以确定接受连接的地址。如果使用了 backlog、rcvbuf、sndbuf、ipv6only、reuseport 或 so_keepalive 参数,那么对于给定的 address:port 对将始终进行单独的 bind() 调用。ipv6only=on | offmultipathso_keepalive=on | off | [keepidle]:[keepintvl]:[keepcnt]''onSO_KEEPALIVE 选项offSO_KEEPALIVE 选项TCP_KEEPIDLE、TCP_KEEPINTVL 和 TCP_KEEPCNT 套接字选项
在每个套接字的基础上设置 TCP keepalive 参数。在这些系统上,可以使用
keepidle、keepintvl 和 keepcnt 参数进行配置。可以省略一个或两个参数,在这种
情况下,相应套接字选项的系统默认设置将生效。so_keepalive=30m::10
TCP_KEEPIDLE)设置为 30 分钟,将探测间隔(TCP_KEEPINTVL)保留为系统默认值,并将探测次数(TCP_KEEPCNT)设置为 10 次探测。mail#
max_commands#
max_errors#
protocol#
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 address ... [valid=time] [ipv4=on | off] [ipv6=on | off] [status_zone=zone] | off;resolver off;resolver 127.0.0.53 [::1]:5353;
off 会禁用客户端主机名解析,并取消继承的指令值。resolver 指令且不执行动态 DNS 查询(例如,在 Proxy 中使用固定名称而不使用
变量时),则不需要指定解析器:名称将在启动时
使用系统解析器进行解析。可选的 valid 参数允许
覆盖此行为:validresolver 127.0.0.53 [::1]:5353 valid=30s;
ipv4=offipv6=offstatus_zone127.0.0.11。resolver_timeout#
resolver_timeout 5s;
server#
server_name#
timeout#