文章内容摘自<<Postfix权威指南>>
我们追踪一封典型邮件如何通过Postfix系统。图1、图2 与图3描绘的处理流程,是一封邮件从发信方到达目的地(信封地址所指的MTA),然后又被转寄到最终的MTA(收件人实际取信处)。
Postfix的邮件处理流程:送出邮件到其他MTA
图1,Helene(helene@oreilly.com)想要发邮件给Frank(frank@postfix.org),Helene的账户位于一台运行Postfix 的服务器。她使用自己习惯的MUA编写邮件,然后调用Postfix的sendmail命令送出邮件。Postfix的sendmail程序从 Helene的MUA软件中收下邮件,然后放在队列的maildrop子目录下。接着,pickup daemon从该目录取出邮件,交给cleanup daemon运行必要的清理程序,如果Helene的MUA软件没提供地址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的队列系统。当cleanup与queue manager处理邮件时,依靠trivial-rewrite将地址转换成标准格式,并判断传送方式以及递送流程的下一站。
Postfix的邮件处理流程:从其他MTA接收邮件并存入邮箱
当queue manager发现新邮件应该送到另一个网络(onlamp.com),则会调用Smtp来进行投递操作,而smtp会先向DNS查出哪些邮件服务器可能接收onlamp.com网域的邮件。
图3 是onlamp.com的MTA系统(它也是Postfix系统),该系统最后会将邮件交给local MDA,由它将邮件存入该系统的邮箱。到这时候,Postfix就完成了它的工作。Frank现在可以使用他自己的MUA来阅读邮件,至于这个 MUA是直接从邮箱取信,还是使用POP或IMAP之类的协议通过网络下载邮件,都已经不是Postfix所能控制的了。
转载于:https://blog.51cto.com/echo1937/1283333