邮件队列是存储 sendmail 命令传送的邮件消息数据和控制文件的目录。缺省情况下,邮件队列是 /var/spool/mqueue。

邮件消息可能由于很多原因而排入队列。

例如:

  1. sendmail 命令可以配置成按一定的时间间隔处理队列,而不是立即处理。如果这样,邮件消息必须临时存储。
  2. 如果一个远程主机不响应一个邮件连接的请求,邮件系统会将这些消息排入队列,稍后再作尝试。

打印邮件队列

队列内容可以使用 mailq 命令打印(或通过指定 sendmail 命令的 -bp 标志)。

这些命令产生队列标识、消息大小、消息进入队列的日期以及发送方与收件人的列表。

邮件队列文件

队列中的每条消息都与一定数量的文件相关联。这些文件按以下约定命名:

 

TypefID

其中 ID 是一个唯一的消息队列标识,而 Type 是以下表示文件类型的字母中的一个:

d 包含消息正文但无标题信息的数据文件。
q 队列控制文件。该文件包含处理作业所需要的信息。
t 临时文件。该文件是 q 文件重建时的一个映象。它快速重命名为 q 文件。
x 在会话过程中存在并显示该次会话中发生的任何事件的记录文件。

例如,如果一条消息的队列标识为 AA00269,当 sendmail 命令尝试传送消息时,在邮件队列目录中创建和删除以下文件:

dfAA00269 数据文件
qfAA00269 控制文件
tfAA00269 临时文件
xfAA00269 记录文件

q 控制文件

q 控制文件包括一系列行,每一行都以一个代码字母开始:

B 指定 body type。该行其余部分是定义 body type 的文本字符串。如果缺失该项字段,则缺省情况下 body type 是 7 位的,而且不会尝试特殊的处理。合法值是 7BIT 和 8BITMIME。
C 包括控制用户。对于以文件或程序作收件人的地址,sendmail 作为该文件或程序的所有者来执行传送。控制用户被设置为文件或程序的所有者。由 .forward 或 :include: 文件读取的收件人地址也将使控制用户被设置为文件所有者。当 sendmail 传送邮件到这些收件人时,sendmail 作为控制用户传送,然后转换回 root 用户。
F 包括信包标志。标志是以下的任意组合:w(设置 EF_WARNING 标志)、r(设置 EF_RESPONSE 标志)、8(设置 EF_HAS8BIT 标志)和 b(设置 EF_DELETE_BCC 标志)。其它字母则被忽略而无提示。
H 包括一个标题定义。此类行的数量任意。H 行出现的顺序确定了它们在最终消息里的出现顺序。这些行使用的语法与 /etc/mail/sendmail.cf 配置文件中的标题定义相同。(对于早于 AIX 5.1 的版本,该文件是/etc/sendmail.cf。)
I 为 df 文件指定内节点和设备信息;这可以在磁盘崩溃后用来恢复邮件队列。
K 指定上一次传输尝试的时间(以秒为单位)。
M 当一条消息由于在传送尝试中出现了错误而放入队列时,错误的性质就存储在 M 行。
N 指定传送尝试的总数。
O 指定 ESMTP 的消息传输系统(MTS)的原始值。它只用于传送状态通知。
P 包括当前消息的优先级。优先级用来对队列排序。数字越大表示优先级越低。当消息位于队列中时优先级增加。初始优先级取决于消息的类和消息的大小。
Q 包含初始收件人,由 ESMTP 事务中的 ORCPT= 字段指定。仅用于传送状态通知。只应用于紧接着的 R 行。
R 包含收件人地址。每个收件人占一行。
S 包含发送方地址。此类行只有一行。
T 包含消息创建时间,用来计算何时消息超时。
V 指定队列文件格式版本号(该队列文件格式用来允许新的 sendmail 二进制文件读取旧版本创建的队列文件)。缺省时指版本 0。如果存在,必须是文件的第一行。
Z 指定原始信包标识(从 ESMTP 事务中)。只用于传送状态通知。
$ 包含宏定义。某些宏($r 和 $s)的值会传递到队列运行阶段。

传送到 amy@zeus 的消息的 q 文件类似于:

 

P217031
T566755281
MDeferred: Connection timed out during user open with zeus
Ramy@zeus
H?P?return-path: <geo>
Hreceived: by george (0.13 (NL support)/0.01)
id AA00269; Thu, 17 Dec 87 10:01:21 CST
H?D?date: Thu, 17 Dec 87 10:01:21 CST
H?F?From: geo
Hmessage-id: <8712171601.AA00269@george>
HTo: amy@zeus
Hsubject: test

其中:

P217031 消息的优先级
T566755281 提交时间(秒)
MDeferred: Connection timed out during user open with zeus 状态消息
Sgeo 发送方标识
Ramy@zeus 收件人标识
Hlines 消息的报头信息

在 sendmail 中指定时间值

要设置消息超时和队列处理间隔,必须用特定的时间值格式。时间值的格式是:

 

-qNumberUnit

其中 Number 是一个整数值,Unit 是单位字母。Unit 可以是以下值中的一个:

s
m
h 小时
d
w

如果没有指定 Unit,sendmail 守护程序使用分(m)作为缺省值。下面三个示例说明时间值的规范:

 

/usr/sbin/sendmail -q15d

该命令使得 sendmail 守护程序每 15 天处理一次队列。

 

/usr/sbin/sendmail -q15h

该命令使得 sendmail 守护程序每 15 小时处理一次队列。

 

/usr/sbin/sendmail -q15

该命令使得 sendmail 守护程序每 15 分钟处理一次队列。

强制邮件队列

在某些情况下,您可能发现队列由于某种原因阻塞。您可以使用 -q 标志(没有值)强制一个队列运行。您也可以用 -v 标志(详细)来观察发生了什么:

 

/usr/sbin/sendmail -q -v

使用一个队列修饰符,您也可以将作业限制在具有特定队列标识符、发送方或收件人的范围中。例如,-qRsally 将队列运行限制为收件人地址之一中有字符串 sally 的作业。同样,-qS 字符串会将运行限制为特定的发送方,而 -qI 字符串将它限制为特定的队列标识。

设置队列处理时间间隔

守护程序启动时 -q 标志的值确定 sendmail 守护程序处理邮件队列的时间间隔。

sendmail 守护程序通常由 /etc/rc.tcpip 文件在系统启动时启动。/etc/rc.tcpip 文件包含一个称为队列处理间隔(QPI)的变量,该变量在该文件启动 sendmail 守护程序时用来指定 -q 标志的值。缺省情况下,qpi 的值是 30 分钟。要指定不同的队列处理间隔:

  1. 用您喜欢的编辑器编辑 /etc/rc.tcpip 文件。
  2. 查找给 qpi 变量指定值的行,例如:

     

    qpi=30m
  3. 将指定给变量 qpi 的值更改为希望的时间值。

这些变化会在下一次系统重新启动时生效。如果您想让这些变化立刻生效,请停止并重新启动 sendmail 守护程序,指定新的 -q 标志值。更多相关信息,请参阅停止 sendmail 守护程序启动 sendmail 守护程序

移动邮件队列

当一个主机长期关闭时,路由到(或通过)该主机的很多消息可能存储在邮件队列中。结果 sendmail 命令要花费很长时间对队列排序,这严重降低了系统性能。如果您移动队列到一个临时空间并创建一个新的队列,旧队列可以稍后在该主机恢复服务后运行。要移动队列到一个临时空间并创建一个新的队列,请:

  1. 停止 sendmail 守护程序中的指示信息停止 sendmail 守护程序。
  2. 输入以下内容移动整个队列目录:

     

    cd /var/spool
    mv mqueue omqueue
  3. 启动 sendmail 守护程序中的指示信息重新启动 sendmail 守护程序。
  4. 输入以下内容处理旧邮件队列:

     

    /usr/sbin/sendmail -oQ/var/spool/omqueue -q

    -oQ 标志指定一个备用队列目录。 -q 标志指定运行队列中的每一项作业。要获取操作过程的报告,请使用 -v 标志。

    注:
    此操作可能要花些时间。
  5. 当队列为空时,输入以下内容除去日志文件和临时目录:

     

    rm /var/spool/omqueue/*
    rmdir /var/spool/omqueue

启动 sendmail 守护程序

要启动 sendmail 守护程序,请输入以下命令中的一个:

 

startsrc -s sendmail -a "-bd -q15"

 

/usr/lib/sendmail -bd -q15

如果 sendmail 守护程序在输入这些命令中的一个时已经激活,请参阅屏幕上的以下消息:

 

sendmail 子系统已经激活。不支持多实例。

如果 sendmail 守护程序没有被激活,您将会看到一条消息表示 0sendmail 守护程序已经启动。

停止 sendmail 守护程序

要停止 sendmail 守护程序,请运行 stopsrc -s sendmail 命令。

如果 sendmail 守护程序没有随 startsrc 命令启动,请:

  • 查找 sendmail 进程标识。
  • 输入 kill sendmail_pid 命令。(其中 sendmail_pid 是 sendmail 过程的处理标识)。

管理 sendmail 的邮件队列的更多相关文章

  1. Postfix常用命令和邮件队列管理(queue)

    本文主要介绍一下postfix的常用命令及邮件队列的管理: Postfix有以下四种邮件队列,均由管理队列的进程统一进行管理: maildrop:本地邮件放置在maildrop中,同时也被拷贝到inc ...

  2. Asp.Net Core 快速邮件队列设计与实现

    发送邮件几乎是软件系统中必不可少的功能,在Asp.Net Core 中我们可以使用MailKit发送邮件,MailKit发送邮件比较简单,网上有许多可以参考的文章,但是应该注意附件名长度,和附件名不能 ...

  3. Linux基础命令---mailq显示邮件队列

    mailq mailq指令可以显示出待发送的邮件队列. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora.   1.语法       mailq   2.选项参数列表 ...

  4. Confluence 6 邮件队列

    需要发送的电子邮件将会在邮件队列中进行等待,Confluence 的邮件队列每分钟刷新一次.Confluence 的管理员也可以手动的刷新邮件队列中等待发送的消息. 如果在发送的时候出现了错误,那么出 ...

  5. Powershell检查邮件队列设置阈值,通过html形式进行邮件告警

    为了完善公司的整体邮件质量,博主通过zabbix监控了exchange的所有微软推荐项目,并写了很多powershell来辅佐, 旨在更大程度上提高整体的邮件性能 这篇文章主要是讲通过powershe ...

  6. 查看Exchange邮件队列(queue)

    #加载Exchange管理模块 Add-PSSnapin Microsoft.Exchange.Management.PowerShell.snapin get-queue #查看队列 get-mes ...

  7. linux安装配置sendmail实现邮件发送

    sendmail配置 yum -y update sendmail sendmail-cf SendMail相关目录1. 设定档目录:/etc/mail2. 记录档:/var/log/maillog3 ...

  8. 17.2-uC/OS-III消息管理(任务消息队列)

    1.任务的消息队列 uC/OS-III在任务中内建了一个消息队列.用户可以直接发送消息给任务而不通过外部消息队列. 这个特性不仅简化了代码, 还提供了效率.每个任务都内建一个消息队列. uC/OS-I ...

  9. linux性能监控 + Sendmail 发邮件

    sendmail安装 #!/bin/bash#控制发邮件的阈值是在rate,rate1和FF值(三个同样的用途,仅仅是名字不同)##注:该博文中的变量不规范,我是随意定义的,请注意##定义时间倒计时函 ...

随机推荐

  1. plaidctf2015 ebp

    很容易看出是格式化字符串漏洞.这里的格式化字符串漏洞不像传统的那样,格式化字符串是放在bss段中,并没放在栈上,因此利用起来有些困难. 不过,我们可以利用ebp,可以修改函数的ebp,从而能控制函数的 ...

  2. 一点用JS写控制权限的心得

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. CSS3 过渡

    通过 CSS3,我们可以在不使用 Flash 动画或 JavaScript 的情况下,当元素从一种样式变换为另一种样式时为元素添加效果. 请把鼠标移动到右侧的元素上: 浏览器支持 Internet E ...

  4. csss3 2D转换

    CSS3 转换 通过 CSS3 转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 它如何工作? 转换是使元素改变形状.尺寸和位置的一种效果. 您可以使用 2D 或 3D 转换来转换您的元素. 浏 ...

  5. c# 自定义位数生成激活码

    Random random = new Random(~unchecked((int)DateTime.Now.Ticks));private string CreateAndCheckCode(Ra ...

  6. 远程访问数据库查询数据量一大就Hang

    最近刚为客户升级了一套Oracle Database,一切进展顺利,眼看就要顺利验收时,发现有部分客户端软件连接新版本数据库时会Hang,问题非常诡异. 系统环境如下 升级前的环境OS:Windows ...

  7. 回滚Swtichover

    从11.2.0.2开始,如果由于某种原因switchover没有成功,可以回滚switchover. For physical standby databases in situations wher ...

  8. 记一次phpStudy apache启动后自动关闭 修改过程

    第一种可能原因:路径包含中文 .添加站点 2.重启服务 3.遇见问题 apache 刚启动,1秒钟中后就停止 4.解决问题 发现是自己添加的网站中包含中文路径的问题,建议不要在自己的网站目录下包含中文 ...

  9. C++ buffer缓冲区的秘密

    在搞数据库和C++进行连接的时候,遇到一个问题,就是如果前面用到了fflush(stdin)即清空缓冲区,就OK,如果不清空缓冲区就不能把记录加入到Mysql的数据库中, 但是即便如此,这个问题目前还 ...

  10. JSP(二)

    JSTL JSTL不仅可以实现EL所不能实现的逻辑循环或者条件判断,还有强大的定制标记. 使用JSTL 需要将两个文件("jstl.jar"和"standard.jar& ...