MH 的 .maildelivery 文件

用途

指定接收邮件时要执行的操作。

描述

$HOME/.maildelivery 文件包含 slocal 命令对接收到的邮件执行的操作的列表。 slocal 命令读取 $HOME/.maildelivery 文件,并在激活该文件时执行指定的操作。

$HOME/.maildelivery 文件中指定您自己的邮件传递指示信息。 $HOME/.maildelivery 文件中的每一行都描述了一个操作以及应该执行该操作的条件。 以下五个参数必须出现在文件的每一行中。 这些参数之间用逗号或空格字符分隔:

.maildelivery 文件中的空行将被忽略。 第 1 列中的 # (井号) 表示注释。 文件是从头到尾读取的,因此可以通过多个操作进行多个匹配。 .maildelivery 文件应该由用户所有,并且所有者可以是唯一具有写访问权的文件。

如果找不到 $HOME/.maildelivery 文件或未交付消息,那么将以相同方式使用 /etc/mh/maildelivery 文件。 如果消息仍未传递,那么会将其放入用户的邮件删除。 缺省邮件删除是 /usr/mail/$USER 文件。

MH 包包含四个标准程序,这些程序可以作为 receive-mail 挂钩运行: Rcvdist接收包接收存储已接收 命令。

参数

描述
Field 指定要在其中搜索与 模式 参数匹配的模式的头组件。 为 字段 参数指定下列其中一个值:
组件
指定您要搜索的头组件; 例如,Fromcc.
*
匹配所有内容。
addr
搜索用于将消息传递给您的任何字段。
缺省值
仅当消息尚未传递时才匹配。
SOURCE
指定频带外的发送方信息。
Pattern 指定要在 字段 参数所给定的头组件中搜索的字符串。 例如,如果您指定了From字段 参数中, 模式 参数可能包含类似如下的地址:sarah@mephisto.

模式 参数是不区分大小写的。 字符串与大写和小写字符的任意组合匹配。 如果使用 * (星号) ,请指定哑元模式或指定default字段 参数中。

Action 指定要对消息执行的操作 (如果它包含 模式 参数中指定的模式)。 指定以下值:
文件 >
将消息附加到使用 "字符串" 参数指定的文件中。 如果可以将消息写入文件,那么该操作将被视为成功。 该Delivery-Date:头组件将添加到消息中,以指示何时将消息追加到文件中。
管道 |
将消息作为标准输入传送到使用 "字符串" 参数指定的命令。 Shell 解释该字符串。 如果该命令的退出 0 为 0 ,那么认为该操作成功。 在提供给 shell 之前,将使用以下内置变量来扩展字符串:
$(地址)
用于传递消息的地址。
$(大小)
消息的大小 (以字节为单位)。
$(回复)
要么Reply-To:From:消息的头组件。
当使用管道机制启动进程时,该进程的环境设置如下:
  • 用户和组标识将设置为收件人的标识。
  • 工作目录是收件人的目录。
  • Umask 变量的值为 0077。
  • 进程没有 /dev/tty 特殊文件。
  • 将标准输入设置为消息。
  • 标准输出和诊断输出设置为 /dev/NULL 特殊文件。 关闭所有其他文件描述符。 相应设置了 $USER$HOME$SHELL 环境变量; 不存在任何其他环境变量。
用于确定进程要执行的时间量的公式如下:
bytes in message x 60 + 300 seconds.

在此时间之后,该过程将终止。

如果程序的退出状态为 0 ,那么假定该操作已成功。 否则,假定操作不成功。

Qpipe ^
管道类似,但在内置变量扩展后直接执行命令,而不需要来自 shell 的帮助。 如果命令中的退出状态为 0 ,那么表示操作成功。
destroy
销毁消息。 此操作始终成功。
Result 指示应该如何执行该操作。 您可以为该参数指定下列其中一个值:
a
执行操作。 如果操作成功,那么认为消息已传递。
R
执行操作。 即使操作成功,也不会将消息视为已传递。
?
仅当尚未传递消息时才执行该操作。 如果操作成功,那么认为消息已传递。
"String" 指定如果将 文件 值用于 行动 参数,那么可以将消息追加到其中的文件。

如果您使用 管道 Qpipe 值,那么 "字符串" 参数会指定要执行的命令。

如果您使用 破坏 值作为 行动 参数,那么不会使用 "字符串" 参数,但您仍必须包含哑元 "字符串" 参数。

注: 要接收关于您有邮件的通知,必须在 .maildelivery 文件中指定 已接收 命令。

示例

  1. 要将消息保存在特定文件中,请输入:
    From george file A george.mail
    此示例指示 斯本地 命令搜索以下内容:From消息中的头行。 当 斯本地 命令从以下地址找到消息时george,它将消息归档到一个名为george.mail.
  2. 要将消息的副本保存在文件中,请输入:
    addr manager > R proj_X/statlog
    此示例指示 斯本地 命令在消息中搜索地址字段。 当它找到项目管理器的消息时, 斯本地 命令会将该消息的副本归档到一个名为proj_X/statlog. 原始消息未被视为已传递 (R值) ,因此该消息仍被视为邮件,您将像往常一样收到通知。
  3. 要获得您已收到邮件的通知,请输入:
    * - | R "/usr/lib/mh/rcvtty /home/sarah/allmail"
    在此示例中,/home/sarah/allmail文件包含以下行:
    echo "You have mail\n"
    /home/sarah/allmail文件必须具有执行许可权。 当你有邮件的时候You have mail显示在控制台上。
  4. 要转发消息的副本,请输入:
    addr manager | A "/usr/lib/mh/rcvdist amy"
    此示例指示 斯本地 命令在消息中搜索地址字段。 当它找到到项目经理的消息时, 斯本地 命令会将该消息的副本发送到amy. 原消息不受影响。 将始终执行该操作 (A值)。 斯本地 命令为将副本分发给另一个用户而读取的命令是 Rcvdist 命令。
  5. 要保存任何未传递的消息,请输入:
    default - > ? mailbox
    此示例指示 斯本地 命令查找所有未传递的消息。 该-(短划线) 是 模式 参数的占位符。 该>(大于号) 指示 斯本地 命令对它找到的消息进行归档。 该?(问号) 指示 斯本地 命令仅对未传递的消息作出响应。 用于存储未传递消息的文件的名称为mailbox.

文件

描述
$HOME/.forward 在收到邮件时由 发送邮件 命令搜索,其中包含要将邮件转发到的机器的路径或用于启动 斯本地 命令的行。
/usr/mail/$USER 提供缺省邮件放置。
/usr/lib/mh/ slocal 包含用于读取 .maildelivery 文件的 斯本地 命令。
/etc/mh/maildelivery 包含 slocal 命令读取的邮件传递指示信息 (如果在 $HOME/.maildelivery 文件中未指定任何内容)。
$HOME/.maildelivery 为要执行的 斯本地 命令指定与邮件相关的操作。