2.2.3.1 基本收发信过程中的模块

来源:互联网 发布:斗鱼程序员 工资待遇 编辑:程序博客网 时间:2024/06/06 09:22

master模块是postfix的主模块,被首先执行,以root权限作为守护进程执行,负责管理其他模块的启停。

         接下来的处理大致按照smtpd->cleanup->qmgr->MDA模块的顺序执行。

 

         smtpd模块负责解析smtp协议。该模块有两种运行模式:stand-alone和网络模式。stand-alone模式接收来自本地的sendmail –bs命令传递来的邮件,网络模式接收来自网络的邮件。

 

         pickup模块默认每分钟检查sendmail程序放在maildrop目录中的信件,将其置入incoming队列。

 

         cleanup模块负责将邮件按RFC822的格式进行整理。

 

         qmgr模块负责队列调度。邮件将从incoming或deferred队列放入active队列,qmgr模块负责发送active队列中的邮件,如果发送有延迟则可能将其置入deferred队列。

 

         smtp、local、virtual等模块是MDA模块,分别进行面向网络、本机、虚用户方式的邮件传输。

 

         bounce模块负责处理邮件状态通知信,包括退信、发送延迟提醒信、发送成功提醒信等,生产系统上经常只为用户发送退信。

 

         error模块调用bounce模块的功能。将其独立为一个模块可以在独立的进程中实现销毁延迟发信活动内存数据(in-core)的功能,见6.8.1。

 

         anvil模块负责统计客户端并发连接数等统计计数,postfix使用这些统计计数完成对恶意客户端(这些客户端的并发连接可能会超过限制)的阻挡等功能。

 

         trivial-rewrite模块负责地址重写和解析。本地用户可能在smtp会话过程中没有提供完整的邮件地址,如2.1.2中的例子,这时trivial-rewrite模块的本地地址重写功能可以为其补全地址的域名部分。收信人地址在一些情况下需要被改写(见6.2),这时也需要trivial-rewrite模块解析收信人地址。使用trivial-rewrite模块进行收信人地址解析是从active读取邮件内容后要做的第一个操作。

 

简单的信件收发场景可以分为两类:

 

从本地发信,即使用sendmail–bs会话发信。该命令将开启一个命令行模式smtp会话。会话完成后,postdrop程序将邮件存入maildrop队列目录。pickup模块负责定期检查该目录,将该目录中的新邮件交给cleanup模块处理。

 

对于来自网络的邮件,由smtpd模块完成smtp协议解析后,将信件交给cleanup模块处理。

 

可见信件最终都将交给cleanup模块,由cleanup模块整理格式后交给qmgr模块,qmgr选择合适的MDA发信(或延迟发信等)。邮件状态提醒信也会交给cleanup模块处理(见6.3节,都会调用post_mail_fopen_nowait函数连接cleanup模块)。

 

在master.cf中,error模块默认有两个服务名:error和retry:

error     unix -       -       n      -       -       error

retry     unix -       -       n      -       -       error

 

bounce模块默认也有两个服务名:bounce和defer:

bounce    unix -       -       n      -       0       bounce

defer      unix  -      -       n       -      0       bounce

0 0
原创粉丝点击