介绍
本文通过个人对Postfix的使用和官方文档的介绍,对Postfix的体系结构的一些见解,有理解不当的地方还请发邮件指正,官方文档:http://www.clusting.com/postfix/docs/OVERVIEW.html。
本文主要讨论以下内容:
当一封邮件进入Postfix邮件系统后,首先被放入incoming queue(入口队列). 下图体现了处理一封新邮件涉及的主要进程和顺序。 带数字的名称代表Postfix的命令或服务程序,不带数字的名称代表Postfix的邮件队列。
- 本机发送的邮件是由Postfix自带的 sendmail(1)兼容性命令来处理,并且被特权命令postdrop(1) 放入 maildrop queue队列中进行排队,这种方式使得即使Postfix邮件系统没有运行也能正常工作(本机能够发送邮件,只不过发送完的邮件必须在maildrop queue中,直到Postfix邮件系统启动才能被发送出去。但对用户来讲,不必关心邮件什么时候被发送出去。)。 本地的 pickup(8)服务从maildrop queue中读取本机发送的邮件,并且强制进行一些邮件健康检查(sanity checks)来保护Postfix,然后将邮件的发送者、接收者地址和邮件内容交给cleanup(8)服务处理。
- 内部(Postfix邮件系统本身)发送来的邮件直接被提交给cleanup(8)服务来处理,这部分没有包括在上面的图示中。所谓内部发送的邮件主要包括:被local(8)投递代理转发的邮件(参看下一小节)、被bounce(8)服务(参看下一小节)返回给发送者的邮件以及postmaster关于Postfix系统问题的通知。
一封邮件一旦到达incoming queue队列,下一步就是进行投递。下图简要表示了Postfix投递器的主要组件。 带数字的名称代表Postfix的命令或服务程序,不带数字的名称代表Postfix的邮件队列。
前面两节已经对Postfix服务程序如何处理发送和接收邮件,这些服务器进程都需要依赖那些在后台工作的服务器进程。下面我们将讨论每个服务在它自己的环境中如何工作。带数字的名称代表Postfix的命令或服务程序,不带数字的名称代表Postfix的邮件队列。
我们将以Postfix邮件系统的常用命令择要来结束该文档。除了Sendmail的兼容命令sendmail(1), mailq(1), 和 newaliases(1) 外,Postfix系统有自己的工具命令集,下面将列出所有以post开头的命令: