`
hongtoushizi
  • 浏览: 377038 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Postfix的邮件队列管理

阅读更多

转载:http://blog.webwlan.cn/wordpress/?p=899

 

 

Postfix邮件队列管理单元的服务器程序–qmgr,是整个postfix系统的中心枢纽。所有邮件,包括等待送出与从外界收进来的,都必须通 过Postfix邮件队列。了解Postfix邮件队列的运行原理以及postfix如何处理Postfix邮件队列,有助于你解决问题。

Postfix邮件队列管理器总共设置了五个做不同用途的Postfix邮件队列,包括:输入、活动、等待、故障、保留。每个Postfix邮件队列在 queue_directory参数指定的路径下各有一个专属的子目录。默认的Postfix邮件队列目录是/var/spool/postfix /。

于后台运作的qmgr daemon能自动处理大部分的Postfix邮件队列管理工作,必要时,管理员可使用postsuper和postqueue自己动手管理。本章介绍qmgr于相关命令行工具的运行原理,以及能影响Postfix邮件队列的postfix参数。

qmgr的运行原理

邮件进入postfix系统的第一站是“输入Postfix邮件队列”。postfix以queue_minfree参数来保护Postfix邮件 队列文件系统,此参数的默认值为0,表示qmgr可以无限制地使用Postfix邮件队列磁盘空间。如果你不想Postfix邮件队列耗尽服务器地磁盘空 间,建议你设定一个合理地上限值。

每当有新信进入收件Postfix邮件队列,qmgr便会将邮件移到活动Postfix邮件队列,并调用适当地MDA来处理。只要投递过程没遇到意 外,这段流程通常是相当迅速地,快到你没机会 见到邮件停留在活动Postfix邮件队列里,除非postfix正在将邮件送到一台非常慢地远程smtp server。如果无法在30秒内连接到远程系统,postfix便会认为该系统目前无法到达。

暂时无法送出去地邮件会被放在等待Postfix邮件队列。可能发生了临时性意外包括:DNS系统暂时离线、远程服务器主机临时故障、网络不稳定、 收件人地邮箱爆满等。如果遇到永久性地问题或是被远程拒收,则邮件会连同错误报告立刻被退回给原寄件人,不会留在Postfix邮件队列里。

等待邮件

留在等待Postfix邮件队列里地邮件,会待到它们被成功投递出去,或因为超时而被退回给原寄件人为止。退信通知函与遭退邮件地总和大小不得超过bounce_size_limit,如果超过此限制,则原寄件人只会收到退信通知函,而不会收到遭退邮件本身。

如果邮件一时无法投递,postfix会给邮件标上一个时间,这个时间代表下次尝试投递得时刻。对于一时无法联系得远程主机,postfix会将它 们另外 记录在自己内部得一份有时效性得名单上,借此避免不必要的递送尝试。如果有任何等待邮件要被安排重新投递,而且活动Postfix邮件队列里有足够空间, 则qmgr会交替在 等待Postfix邮件队列与收件Postfix邮件队列之间取信。如此一来,新进邮件不至于因为postfix正在忙着处理大量等待邮件而等待太久。

Postfix邮件队列调度

postfix会定期扫描Postfix邮件队列,检查每一封等待邮件的时间,看看是否有任何等待邮件已经到了下一回合应该尝试投递的时间。每一次 投递失败,都会导致延迟间 隔时间加长,所以,失败次数越多,就必须等待更长的时间才有再次被投递的机会。延迟时间上限由maximal_queue_lifetime参数决定。如 果邮件在等待Postfix邮件队列里的时间超过此上线,postfix便会放弃投递,并退信给原寄件人。maximal_queue_lifetime 的默认值为5天,你 可以将它改成任何时间长度;如果你希望postfix在第一次递送失败时就立刻退信,你可将此参数的值该为0。

postfix内部的Postfix邮件队列扫描间隔决定于queue_run_delay参数,其默认值为1000秒。也就是说,大约每隔1000秒,postfix就会检查一次等待Postfix邮件队列,看看是否有任何应该再次尝试投体的邮件。

postfix重新投体等待邮件的频繁程度的上下限,分别由minimal_backoff_time与maximal_backoff_time 这两个 参数决定。每次邮件被延迟,qmgr便会加长下次投递机会的时间间隔,但是累增后的间隔时间不的超过上线,也不得低于下限。如果你发现经常有寄不出去的等 待邮件,或许你应该考虑适度加大上线,让postfix不要浪费太多资源于等待邮件。

投递操作

每当需要投递邮件时,qmgr便会调用适当的MDA来运行投递程序。postfix会很谨慎地避免干扰收信系统,并提供几个参数来控制外寄邮件地可 用资 源。这些参数地默认值应该足以应付大部分地情况,但是如果你地操作环境特殊,需要调整资源分配或是想要改善投递操作,你应要实际的测试qmgr或MDA的 操作参数,并依据实测效果来嫁衣调整。

列在master.cf配置文件里的各个MDA,都有可能被用来投递外寄邮件。master.cf配置文件的maxproc字段限定了MDA的进程数上限。如果该字段没有明确的设定值,则postfix使用default_process_limit参数的值为默认值。

大部分的MDA都有能力同时投递多封邮件到同一个目的地,但是并非所有收信系统都时时刻刻有能力同时收下许多邮件。为了兼顾投递效率于接收系统的工 作负 荷,postfix使用一种特殊的投递调度算法:如果有多封邮件要送到同一个目的地,MDA第一次最多只能同时送出 initial_destination_concurrency封邮件,如果能成功完成初次投递,则postfix会尝试同时送出更多邮件,知道发现目 的地系统不能承当当前的工作负荷,或是同时投递的邮件数即将超过default_destination_concurrency_limit。

里可以适度提升initial_destination_concurrency参数的值,但是不能超过该MDA在master.cf配置文件的 maxproc字段值。一般而言,你不应该提升default_destination_concurrency_limit,因为这有使收信系统瘫痪的 风险。

postfix随附的每一个MDA,都有一个对应的mad_destination_concurrency_limit参数,它们的效力高于 default_destination_concurrency_limit参数。因此,如果想提升本地邮件的同时投递量,而不想影响其他MDA,你可 以修改local_destination_concurrency_limit参数的值。同理,如果只想降低远程邮件的同时投递量,而不影响其他 MAD,也可借由修改smtp_destination_concurrency_limit参数来达成目的。

同理,postfix内置的所有MDA都有自己的mad_destination_concurrency_limit参数,它们限制 postfix将邮 件交给MDA时,每次最多可以指定多少位收件人。如果同一封邮件的邮件人数超过MDA每次能够承受的人数,postfix会将收件人分成多个小组,分批投 递。

损毁邮件

故障Postfix邮件队列纯粹用于存放受损或无法解读的邮件。如果邮件已经损坏到无法进行任何处理的程度,postfix便将它们放在此处,供你 调查故障原因。管理员可使 用“Postfix邮件队列管理工具”提到的工具来检查故障邮件。一般而言,故障邮件非常少见,如果不幸遇到,通常是操作系统或硬件故障的征兆。

错误通知函

postfix可发出“错误通知函”给管理员,让管理员知道发生了什么类型的错误。postfix将错误通知分成七大类,管理员可设定 main.cf里的 notify_classes参数来决定要收哪些类型的错误通知。在默认情况下,管理员只会收到resource与software两种错误类型的通知 函。

对于每一种类型的错误通知函,都有一个对应的class_notice_recipient参数,这些参数代表该类通知函的收件人地址,它们的默认值都是postmaster。

bounce 遭退邮件本身的标头

2bounce 无法投递的退信通知函

delay 被延迟邮件的标头

policy smtp对话过程(因违反垃圾邮件过滤条件而予以拒收的邮件)

protocol smtp对话过程(曾经在smtp对话过程出现错误者)

resource 因为系统资源问题而投递失败的通知

software 因为软件问题而投递失败的通知

如果想收到所有问题的通知函,请照下面这样设定notify_classes参数

notify_classes = bounce, 2bounce, delay, policy, protocol, resource, software

如果你的站点有专人研究垃圾邮件,你可以这样设定:

policy_notice_recipient = antispamexpert@example.com

Postfix邮件队列管理工具

postfix提供了一组命令行工具来检查、控制、管理Postfix邮件队列里的邮件,其中以postsuper和postqucuc这两个工具最为重要。你可以对Postfix邮件队列中的邮件进行下列操作:

显示邮件列表

删除邮件

重新排队

保留邮件

显示邮件内容

清空邮件

每一种操作都有对应的命令。

显示邮件列表

邮件列表的显示项目,包括邮件在Postfix邮件队列里的标识符、大小、到达时间、寄件人地址、收件人地址。对于等待邮件,还会另外显示等待原 因。如果邮件是在活动Postfix邮件队列 里,其标识符栏会加注一个星号(除非你的服务器很慢或是负荷沉重,否则应该没有机会见到星号)。在保留Postfix邮件队列里的邮件的邮件,其标识符栏 会加注一个感叹号。 等待邮件不加注任何符号。

使用postqueue -p 命令可列出Postfix邮件队列里的所有邮件,其效果如果sendmail包的mailq。当安装postfix时,安装脚步会以postfix版的 mailq程序(它其 实只是postqueue -p的符号链接而已)取代sendmail包原有的同名程序,借此维持与sendmail包的兼容性。

删除邮件

使用postsuper命令的-d选项,可移除Postfix邮件队列里的邮件。邮件是以它们在Postfix邮件队列里的标识符表示。

如果要删除所有邮件,请把标识符换成ALL

请注意,由于删除所有邮件是相当危险的操作,所以ALL关键字必须全以大写字母表示才有效,其目的是希望你三思而后行。

保留邮件

当你想将邮件无限期留在Postfix邮件队列系统里,保留Postfix邮件队列就成为容纳这些邮件的场所。不管邮件目前已经传到哪一个Postfix邮件队列,你都可以将它们移除原来的Postfix邮件队列,转移到保留Postfix邮件队列。

假设你已经知道要保留的邮件的标识符,使用postsuper工具的-h选项,就可将指定的邮件搬到保留Postfix邮件队列:

postsuper -h DRA3P1A9

在这之后,如果观察邮件列表,会发现该邮件的标识符多了一个感叹号。

要将邮件移回原来的Postfix邮件队列,继续其未竟之进程,可使用同一个postsuper工具,只要将原来的-h改成-H。

在邮件被移回原来的Postfix邮件队列之后,qmgr依照平常的调度原则来决定其下次投递时间。或者,你也可以执行清空(flush)命令,立刻将邮件递送出去。

重新排队

如果因为配置问题而耽误了任何邮件,在问题解决之后,你可能希望被耽搁的邮件重新走一遍Postfix邮件队列处理流程,以便能够成功完成递送。因 为配置问题可能使得 postfix在邮件里存储了错误的投递处理信息,或是使用了错误的地址改写法则。重新排队会使得postfix依据里的新配置来修正错误信息。使用 postsuper工具的-r选项,可以重新排队某一特定邮件,或是要求所有邮件全部都重新排队。

显示邮件内容

使用postcat工具的-q选项,可以查看一个Postfix邮件队列文件的内容

早期版本的postcat并未提供-q选项,而是要求你提供Postfix邮件队列文件的完整路径。然而,由于邮件可能在各个Postfix邮件队 列目录之间游移不定,而且这些Postfix邮件队列目录还有自己的子目录,所以管理员很难一眼看出Postfix邮件队列文件的完整路径。

清空邮件

要求postfix立刻投递滞留在Postfix邮件队列里的邮件的操作称为清空(flush),执行清空动作的命令是postqueue -f。不过,除了你有理由确定邮件一定能成功投递出去,否则,最好还是让qmgr自己决定重新投递的时机。不断的反复要求清空,会严重影响邮件服务器的效 率。

使用-s选项可清空寄到特定站点的邮件,而且收件站点必须要有接收快速清空的“资格”才有效。要使得某站点具备此资格,你必须将该站点的主机名称或 网域名 称列在fast_flush_domains参数中。此参数的默认值只包含relay_domains所列的所有网域,但是你可以视情况增加额外的站点:

fast_flush_domains = $relay_domains example.com

如果你有一个间歇性的邮件交换机,你可以在该交换器上线的时间内,使用postqueue -s清空先前无法送达到该交换器的所有邮件:

 

postqueue -s example.com

分享到:
评论

相关推荐

    Linux系列-Red_Hat5平台下的Postfix邮件服务搭建

    而管理工具位于/usr/sbin/,如Postalias、Postconf、Postfix、Postmap、Postqueue和Postsuper,它们分别用于管理别名表、配置文件、服务启停、查询表、邮件队列和邮件队列管理。 Postfix的配置文件主要有以下几个...

    postfix邮件服务器软件

    Postfix邮件服务器软件是一款在Linux平台上广泛使用的强大Mail服务器软件,它以其高效、稳定和安全性而备受推崇。这款开源软件由Wietse Venema在1998年开发,旨在替代旧有的Sendmail系统,为互联网上的邮件传输提供...

    Postfix邮件书籍

    在管理方面,Postfix提供了丰富的命令行工具,如`postconf`用于查看和修改配置,`postfix start/stop/restart`用于控制服务状态,`postqueue`和`postfix flush`则帮助我们查看和管理邮件队列。了解这些工具的使用是...

    postfix post 邮件系统

    Postfix邮件系统是一款开源、高性能、安全且易于管理的邮件传输代理软件,广泛应用于各种规模的企业和组织。它由Wietse Venema在1998年开发,旨在替代Sendmail,提供更快、更安全、更灵活的服务。Postfix的设计理念...

    postfix 权威指南

    队列管理 qmgr的运行原理 队列管理工具 第六章 E-mail与DNS DNS概论 决定邮件路由 Postfix与DNS 常见问题 第七章 本地投递与 POP/IMAP Postfix的投递代理程序 邮箱格式 本地邮件的投递操作 POP与IMAP 本地邮件传输...

    Linux下配置Postfix邮件服务器.pdf

    同时,监控邮件队列和系统资源使用情况,以确保邮件服务器的稳定运行。 以上就是配置Linux环境下Postfix邮件服务器的关键知识点,包括邮件接收策略、安全设置、域名转发规则以及SMTP安全认证等。正确配置和管理...

    postfix完全手册 (共294页)

    此外,还会有关于邮件队列管理的内容,包括如何查看、控制和清理邮件队列。 再者,手册会讲解如何实现邮件的别名和转发功能,以及虚拟邮箱和域的配置。这对于那些需要提供多用户邮件服务或托管多个域名的管理员来说...

    postfix邮件服务器forade版本.doc

    - `postdrop` 组通常用于PostFix处理邮件队列。 - `amavis` 用户和组是Amavis防病毒系统的用户,用于邮件过滤。 - `clamav` 用户和组则是ClamAV反病毒软件的用户,用于邮件扫描。 **三、软件安装** 1. **MySQL安装...

    Linux系统下postfix邮件系统反垃圾技术解析.pdf

    Postfix邮件系统作为Linux环境下常见的邮件传输代理(MTA),因其高效、易管理及安全性能,被广泛应用于大型邮件系统中。本文主要解析了在Linux系统下,Postfix如何实现反垃圾邮件的技术。 Postfix的反垃圾邮件策略...

    postfix电子邮件服务器配置.docx

    master.cf 文件控制着 Postfix 的进程管理,例如邮件队列的管理、邮件传输的管理等。access 文件则是用来控制邮件服务器的访问权限的。 DNS 服务器的配置 DNS 服务器的配置是邮件服务器的基础配置之一。DNS 服务器...

    postfix邮件服务器

    10. **监控与维护**:使用工具如`postqueue`、`postconf`、`postmap`进行队列管理、查看配置和更新映射文件。定期检查日志,监控邮件流量和错误,确保邮件服务的正常运行。 综上,Postfix邮件服务器的配置和管理...

    Linux系统下基于postfix垃圾邮件过滤方法.pdf

    Linux系统下基于postfix垃圾邮件过滤方法是指在Linux系统下使用postfix邮件服务器实现垃圾邮件过滤的方法。该方法可以有效地阻止垃圾邮件入侵用户邮箱,提高邮件系统的安全性,并实现指定用户的邮件收发功能。 ...

    the book of postfix

    - **邮件队列管理**:讲解如何监控和管理邮件队列,确保邮件服务的正常运行。 - **故障排除**:提供一系列实用的技巧和工具来诊断和解决Postfix运行中遇到的问题。 - **性能优化**:分享提高Postfix性能的方法,如...

    邮件系统Postfix安装与配置

    4. **邮件队列管理**:Postfix通过队列管理系统协调邮件的接收、存储和投递过程。 #### 三、Postfix启动流程 1. **初始化阶段**:当Postfix启动时,会读取配置文件并创建初始进程。此时,Postfix只会启动必要的...

    postfix中文技术手册

    - **队列管理**:深入探讨如何有效管理邮件队列,比如延迟邮件处理、队列监控等高级功能。 - **本地投递**:详细介绍如何配置本地投递策略,确保邮件能够准确无误地送达本地用户的邮箱。 - **安全管理**:Postfix...

    postfix 完全解析postfix 完全解析

    - **队列管理**:Postfix 使用队列来管理待发送的邮件,管理员可以使用队列工具来监控和控制邮件的流动。 - **本地投递**:Postfix 支持多种本地投递机制,如本地文件系统、管道命令等。 - **认证机制**:为了确保...

    ubuntu下postfix配置资料

    当遇到邮件问题时,可以使用`postconf`查看当前配置,`postfix reload`重新加载配置,`postqueue -p`查看邮件队列,以及`postfix flush`强制投递邮件队列。 以上是Ubuntu环境下Postfix配置的基本知识。虽然描述中...

    POSTFIX设置大全

    10. **邮件队列管理**:POSTFIX有一个内置的邮件队列管理系统,通过`postqueue`和`postfix flush`命令可查看和操作邮件队列。 11. **调试与故障排除**:POSTFIX提供了丰富的调试选项,通过`debuglevel`参数调整。...

Global site tag (gtag.js) - Google Analytics