您的位置:首页 > 大数据 > 人工智能

qmail总结笔记(1)

2006-02-19 21:43 225 查看
1.Qmail实用程序

Bouncesaying: 允许用户将消息转发给程序或程序不可用时反弹消息。

Condredirect: 允许用户将消息转发给程序,然后转发给另一个地址。

qmail-qread:产生一个显示当前邮件队列里消息的报告。

Qmail-qstat:产生一个报告来显示当前处在qmail投送状态下等待发送的消息数目。

Qmail-showctl:显示当前的qmail系统的配置情况。

Qmail-smtpd:显示来自远程主机的smtp连接请求。

qmail-start:初始化qmail的启动脚本。

qmail-tcpok:用来清空qmail-remote中用到的tcp超时纪录表。

qmail-tcpto:显示当前的tcp超时纪录表。

splogger:将消息插入到系统登录程序中。

2.后台进程:

1.qmail-send 2.splogger 3.qmail 4. qmail-lspawn 5.qmail-rspawn 6.qmail-clean

qmail-smtpd进程由tcpserver监视到25端口的连接后启动。

MUA: 例如pop3d (邮件用户代理) MUA:例如smtpd(邮件传输代理)

3.Qmail-queue与qmail-send处理邮件的方法,深入qmail邮件消息队列的内部:

1)消息插入在pid子目录下做临时存放

2)后拷贝至mess子目录里,文件名便是在pid子目录里创建的临时文件的inode编号,如果系统在这个时候崩溃了,qmail-queue能够通过检查mess子目录来判断是否有存储的消息等待着被处理。任何来自本地或远程用户的消息被传送到邮件队列后,都会被放在mess子目录下。在intd下创建文件,文件名与mess子目录下的文件名相同。
3)扫描mess,相应的头信息被复制到intd目录中的文件中时,消息完成了它的第三个状态进入4
4)将intd子目录下产生的文件链接到todo子目录下的同名文件(todo 与 intd在相同的文件系统中。链接成功后,qmail-queue完成了他的工作,就由qmail-send来预处理。
Qmail-send 首先检查info(F加上发件人地址)、local(本地T加上收件人地址)和remote(本地R加上收件人地址)子目录来判断是否存在与消息文件同名的文件,如果有,他们将被自动删除。
检查完后,qmail-send读取todo文件并在info目录下创建一个文件,他包含了消息发送方的头信息,发送完info信息后,qmail-send决定接收方并根据消息中所列的接收方在local和remote子目录下创建一个新文件。所有消息中的本地地址都在local下,所有消息中的远程地址都在remote下。
5)消息分发:qmail-send读取每一个接收方地址,并试图将mess目录下的消息正文投送给指定的接收方,qmail-send将文件中的每一个接收方根据投送请求的状态标以完成(done,在remote目录下的文件里的收件地址前标以D代替原来的T,如把Tcz_hyf@sina.com^@改为Dcz_hyf@sina.com)或未完成(undone).done的则删除相应的头信息(info中),undone的则仍然保留着,当所有的接收方已经成功的收到消息,该消息文件会从子目录中删除。如果qmail-send尝试将一个消息投送给接收方而收到一个临时投送错误,它会标记上not done,即在local或remote下的收件地址中T保留,这样会被再次处理,如果投送请求收到了一个永久失败的信号,qmail-send将接收方标以done并在bounce子目录的文件中添加一行纪录。如果bounce子目录下没有该消息的纪录文件存在,那么就创建一个新文件。
Bouce 子目录下的消息:bouce子目录下的消息作为新消息来对待,bouce文件和mess文件合并起来产生一个新的消息,该消息将被重新加入qmail-queue进程并被发送给原始的消息发送方。一旦新的消息创建了,bounce子目录中的文件将被删除。
一旦接收方完成了并且local和remote中的文件被删除,消息分发就完成了。如果存在一个bounce消息,它会如前所述的那样被处理删除。接下来,info子目录下的文件被删除,暂时将消息放回到消息状态2。最后,mess子目录下的文件被删除,将消息返回到消息状态1并完成消息处理。投送完成。
6)消息清除:如果由于某种无法解释的原因,一个消息被终止了36个小时,qmail会认为一个灾难性的错误发生了,并试图删除该消息。首先删除intd,然后是mess.如果pid子目录下的文件36小时没有被处理,也被删除。
Dnscache是Dan Bernstein尝试开发的一个Dns服务器和客户端程序,允许更为简单的dns服务器的配置,使用了简单的命令行程序来向dns数据库中添加记录,可以作为本地缓存dns服务器来提高qmail的域名查询效率。

4. smtp解析
在用户收到的最终文件文本里的Deliverd-To:与Return-Path:是qmail-send加上去的,根据的是用户在进行25端口连结时所发的MAIL TO:RCPT TO:命令最后的投递用户是根据RCPT TO:里面的信息来的。

其余部分是基本遵循RFC822邮件格式的。
一对received与received from 都是每次经过一个中继加上去的,received一般表示本地接收进程的信息,received from 是对方发送进程的信息。

在RFC822里,也定义了MIME,用来在邮件中发送二进制数据,分为MIME头信息与MIME BODY信息,在头信息里包含一个比较重要的选项便是Content-Transfer-Encoding头字段,头字段中指明了嵌入到消息中的二进制数据是如何被编译成ascii码的,最为常用的是base64型,即把六位的数据块映射成可打印的ascii文本字符块。

RFC1869定义了一种扩展smtp的方法,称之为smtp扩展。既保持了原有文件的规范,又添入了许多新的特性。使用了EHLO来取代原始的smtp问候命令(HELO)。当一个smtp服务器接收到这个命令时,他应该意识到客户端将有能力发送扩展的smtp命令。

5.QMTP(用在两个邮件服务器之间进行邮件群发)

与SMTP不同,QMTP并不是用一串ASCII命令来控制邮件传输的。它假定客户端能够发送邮件包,而服务器也能够接收邮件包。一个QMTP邮件包由消息体,发送方和一个或多个接收方组成。服务器必须返回一个信息来响应整个消息包,但客户在发送下一个包之前,不必等待前一个包的响应。

使用209端口监听。

服务器响应

K-----接收到的消息ok并接收投送

Z-----暂时失败

D-----永久失败

客户端接收到一个Z响应,可能会试图重新提交该包,如果客户端接收到一个D响应,它会向本地的MTA系统返回一个出错代码来指明发生了一个永久的投送错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: