文章内容摘自<<Postfix权威指南>>

我们追踪一封典型邮件如何通过Postfix系统。图1、图2 与图3描绘的处理流程,是一封邮件从发信方到达目的地(信封地址所指的MTA),然后又被转寄到最终的MTA(收件人实际取信处)。


Postfix的邮件处理流程:送出邮件到其他MTA

点击查看原图

1Helene(helene@oreilly.com)想要发邮件给Frank(frank@postfix.org)Helene的账户位于一台运行Postfix 的服务器。她使用自己习惯的MUA编写邮件,然后调用Postfixsendmail命令送出邮件。Postfixsendmail程序从 HeleneMUA软件中收下邮件,然后放在队列的maildrop子目录下。接着,pickup daemon从该目录取出邮件,交给cleanup daemon运行必要的清理程序,如果HeleneMUA软件没提供地址From: ,或是该地址没使用完整的主机名称,则cleanup会主动补齐不足的信息以确保邮件格式符合标准。

完成清理程序之后,cleanup将邮件存入incoming队列,并通知queue manager ,使其知道有一封新信正在等待投递。如果queue manager已经准备好处理新邮件,它会将邮件搬移到active队列。由于Helene的信是要送到其他网域系统的用户,所以queue manager使用smtp MDA来投递该邮件。



Postfix的邮件处理流程:从其他MTA接收邮件再转寄出去

点击查看原图

2 显示Frank Postfix.org 网域的邮件服务器同样也是运行 Postfix(其实,任何符合标准的MTA 都可以),则在Frank的服务器上的 Postfix smtpd 收下Helene smtp MDA 送来的邮件。当smtpd 确认它应该收下该邮件之后,它会将收到的信交给cleanup daemon 进行检查,然后存入incoming队列。

Queue manager 将邮件搬移到active队列,检查收件人地址,然后使用local MDA 来进行投递操作。接着,local发现收件地址frank是一个别名(真实地址位于另一个网域),所以将邮件与新地址信息传给cleanup daemon,回到Postfix的队列系统。当cleanupqueue manager处理邮件时,依靠trivial-rewrite将地址转换成标准格式,并判断传送方式以及递送流程的下一站。



Postfix的邮件处理流程:从其他MTA接收邮件并存入邮箱

点击查看原图

       当queue manager发现新邮件应该送到另一个网络(onlamp.com),则会调用Smtp来进行投递操作,而smtp会先向DNS查出哪些邮件服务器可能接收onlamp.com网域的邮件。

3 onlamp.comMTA系统(它也是Postfix系统),该系统最后会将邮件交给local MDA,由它将邮件存入该系统的邮箱。到这时候,Postfix就完成了它的工作。Frank现在可以使用他自己的MUA来阅读邮件,至于这个 MUA是直接从邮箱取信,还是使用POPIMAP之类的协议通过网络下载邮件,都已经不是Postfix所能控制的了。