13.4 接收并解析客户端请求

无论是POP3、SMTP还是IMAP邮件模块,在处理客户端的请求时,都是使用ngx_mail_protocol_t接口中的init_protocol方法完成的,它们的流程十分相似:首先反复地接收客户端请求,并使用状态机解析是否收到足够的信息,直到接收了完整的信息后才会跳到下一个邮件认证阶段执行(通过调用ngx_mail_auth方法)。

使用状态机解析来自客户端的TCP流的方法其实就是通过ngx_mail_protocol_t接口中的parse_command方法来完成的,POP3、SMTP、IMAP邮件模块实现的parse_command方法都在ngx_mail_parser.c源文件中。由于本章不涉及邮件协议的细节,这里不再一一说明。