51niux.com邮件域的这个csp用户通过MUA也就是Foxmail之类的软件编写了一封邮件,也可以看做是postfix服务器的client端。然后邮件编写完了要发送,通过25端口交给postfix服务端,然后调用sendmail。
postfix服务端的sendmail程序从csp@51niux.com的MUA软件中收下邮件,然后放到队列的maildrop/(/var/spool/postfix/maildrop)子目录下. pickup daemon从maildrop/目录取出邮件,交给cleanup daemon运行必要的清理程序,如主动补全不足的信息以确保邮件格式符合标准。
完成清理程序之后,cleanup将邮件存入收件队列,并通知queue manager,queue manager如果已经准备好处理新邮件了,它会将邮件移动到活动队列。
因为我们要发送给120ni.com网域的用户,是其他网域,queue manager使用smtp MDA来投递该邮件。smtp使用DNS查出120ni.com网域mx记录,smtp协议送出邮件到对端的邮件服务器主机。
120ni.com域的邮件服务器同样运行postfix(或者是其他符合标准的MTA),服务器上的postfix smtpd收下51niux.com域下的csp用户通过smtp MDA发来的邮件。
120ni.com域的邮件服务器smtpd确认收下该邮件后,会将受到的信交给cleanup daemon进行检查,然后存入收件队列。
Queue manager将邮件搬移到活动队列,检查收件人地址,然后使用local MDA来进行投递操作。
如果local发现收件地址csp@120ni.com是别名,真实地址是另一个网域,就又回到了Postfix的队列系统,将邮件和新地址传给cleanup daemon,然后依靠trivial-rewrite将地址转换成标准格式,当queue manager发现新邮件应该送到另一个网络,则会调用smtp来进行投递操作。不过一般我们也不会开启转发操作。只会接收和处理发送到本域的邮件。 如果收件人是本地网域的用户,local MDA会将csp@51niux.com发送来的邮件存入120ni.com改系统的邮件,到这个时候,postfix就完成了它的工作。剩下的用户通过MUA来阅读邮件什么的就不是postfix所能控制的了。
#上面的例子是理想的简单状况,实际的传送程序可能会遇到诸如临时断线、邮件空间不足等意外情况,发送意外时,MDA会通知queue manager将邮件暂时存放到延迟队列,等待一段时间之后再重新投递。当然queue manager可能要通过lmtp MDA来投递邮件或者通过pipe MDA将邮件送到一个实现确定的外部程序。