邮件核心模块(Mail Core)


·邮件代理配置

nginx可以处理和代理以下的邮件协议:
·IMAP
·POP3
·SMTP

·认证

nginx使用外部的HTTP类服务器来了解它将连接到哪个后端的IMAP/POP。
nginx在HTTP头中通过认证信息:
GET /auth HTTP/1.0
Host: auth.server.hostname
Auth-Method: plain
Auth-User: user
Auth-Pass: password
Auth-Protocol: imap
Auth-Login-Attempt: 1
Client-IP: 192.168.1.1
合适的应答为:
HTTP/1.0 200 OK      # 这个字段实际上是被忽略或者可能不存在。
Auth-Status: OK
Auth-Server: 192.168.1.10
Auth-Port: 110
Auth-User: newname   # 如果你连接到一个后端可以不理会这个用户名。
当为POP3认证使用APOP时,你必须返回Auth-Pass:
HTTP/1.0 200 OK      # 这个字段实际上是被忽略或者可能不存在。
Auth-Status: OK
Auth-Server: 192.168.1.10
Auth-Port: 110
Auth-User: newname   # 如果你连接到一个后端可以不理会这个用户名。
Auth-Pass: password  # 这里必须为明文的用户名密码。
失败的应答为:
HTTP/1.0 200 OK      # 这个字段实际上是被忽略或者可能不存在。
Auth-Status: Invalid login or password
Auth-Wait: 3         # nginx将在3秒后重新读取客户端的用户名与密码。

·指令

auth

0.5.15版本后重命名为pop3_auth,见下文。

imap_capabilities

语法:imap_capabilities "capability1" ["capability2" .. "capabilityN"]
默认值:"IMAP4" "IMAP4rev1" "UIDPLUS"
使用字段:main, server
在客户端发布IMAP命令CAPABILITY时,设置IMAP协议扩展列表,STARTTLS在你使用starttls指令时会自动添加。
目前标准的IMAP扩展在www.iana.org发布。
mail {
  imap_capabilities NAMESPACE SORT QUOTA;
}
默认值仍然会被设置!?

imap_client_buffer

语法:imap_client_buffer size
默认值:4K/8K
使用字段:main, server
为IMAP命令设置读取缓冲区大小,默认值为分页大小(根据系统不同为4k或8k)。

listen

语法:listen address:port [ bind ]
默认值:no
使用字段:server
listen指令指定了server{...}字段中可以被访问到的ip地址及端口号,可以只指定一个ip,一个端口,或者一个可解析的服务器名。
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
ipv6地址格式(0.7.58)在一个方括号中指定:
listen [::]:8000;
listen [fe80::1];
指令中可以指出系统调用bind(2)。
bind -- 指出必须为这个“地址:端口”对独立构建bind(2),如果多个指令监听同一端口但是不同的地址和某个listen指令为这个端口(*:port)监听所有地址,那么nginx仅构建bind(2)到*:port,在这种情况下地址通过系统调用getsockname()取得。

pop3_auth

语法:pop3_auth [plain] [apop] [cram-md5]
默认值:plain
使用字段:main, server
为POP3客户端设置允许的认证动作:
·plain - USER/PASS,AUTH PLAIN,AUTH LOGIN
·apop - APOP
·cram-md5 - AUTH CRAM-MD5

pop3_capabilities

语法:pop3_capabilities "capability1" ["capability2" .. "capabilityN"]
默认值:"TOP" "USER" "UIDL"
使用字段:main, server
在客户端发布POP3命令CAPA时,设置POP3协议扩展列表,STLS在你使用starttls指令时会自动添加,SASL通过指令pop3_auth添加。

protocol

语法:protocol [ pop3 | imap | smtp ] ;
默认值:IMAP
使用字段:server
为这个server块设置邮件协议。

server

语法:server {...}
默认值:no
使用字段:mail
指定一个虚拟服务器配置。
没有明确的机制来分开基于域名(请求中的主机头)和基于IP的虚拟主机。
可以通过listen指令来指定必须连接到这个server块的所有地址和端口,并且在server_name指令中可以指定所有的域名。

server_name

语法:server_name name fqdn_server_host
默认值:主机名,通过调用gethostname()取得。
使用字段:mail, server
指定虚拟主机名。如:
server {
  server_name   example.com  www.example.com;
}
第一个名称为服务器的基本名称,默认名称为机器的hostname。当然,可以使用文件通配符:
server {
  server_name   example.com  *.example.com;
}
上述例子中的两个名称可以合并为一个:
server {
  server_name  .example.com;
}
如果客户端请求中没有主机头或者没有匹配server_name的主机头,服务器基本名称将被用于一个HTTP重定向,你可以只使用“*”来强制nginx在HTTP重定向中使用Host头(注意*不能用于第一个名称,不过你可以用一个很傻逼的名称代替,如“_”)
server {
  server_name example.com *;
}
server {
  server_name _ *;
}

smtp_auth

语法:smtp_auth [login] [plain] [cram-md5] ;
默认值:login plain
使用字段:main, server
为SMTP客户端设置允许的认证动作:
·login - AUTH LOGIN
·plain - AUTH PLAIN
·cram-md5 - AUTH CRAM-MD5

smtp_capabilities

语法:smtp_capabilities “capability1” [“capability2” .. “capabilityN”]
默认值:no
使用字段:main, server
在客户端发布命令EHLO时,设置SMTP协议扩展列表,这个列表使用smtp_auth指令中启用的动作自动扩展。

so_keepalive

语法:so_keepalive on|off;
默认值:off
使用字段:main, server
为后端的IMAP/POP3设置socket SO_KEEPALIVE选项。FreeBSD中keepalive参数使用于所有的连接,并且可以通过内核参数(sysctl net.inet.tcp.always_keepalive)关闭。

timeout

语法:timeout milliseconds;
默认值:60000
使用字段:main, server
设置到后端代理连接的超时时间。

·参考文档

Nginx Mail Core Module

前进->邮件认证模块(Mail Auth)