.qmail 文件包括了一个传送指令清单, 每行一个指令. 每行的第一个字符决定了选择那种传送方式.
字符 传送类型 值
# 无 (注释) 忽略
| 程序 由shell 执行的命令
/ 或者 . mbox邮箱格式 (如果路径最后一个字符不是一个斜杠) mbox 的路径名 (包括斜杠"/"或者 点".")
/ 或者 . maildir邮箱格式 (如果路径最后一个字符是一个反斜杠) maildir 的路径名 (包括斜杠"/"或者 点".")
& 转发 转发邮件的地址 如 /home/vpopmail/domains/real2.com/xia/.qmail的内容为
&xiajc@sina.com
/home/vpopmail/domains/real2.com/xia/Maildir/
则发送给xia@real2.com的邮件都会被转发到xiajc@sina.com,并在本地保存一个副本
字母或者数字 转发 转发邮件的地址 (包括第一个字符)
程序传送
如果指令是由程序传送, qmail 启动一个 shell (/bin/sh) 来执行这个命令, 然后把邮件的一个副本从标准输入传送给这个命令.
程序传送是非常强大的, 被用来实现的功能范围非常广阔, 例如邮件过滤, 自动回复, 以及通过第三方传送代理比如procmail来传送邮件.
例如:
|preline /usr/ucb/vacation djb
这个指令操作qmail 启动preline, 将 /usr/ucb/vacation 和 djb 作为参数传送给 preline, 并且在标准输入传送邮件的副本给这个命令.
(1). mbox 格式邮箱的邮件投递
mbox 是标准的UNIX邮箱格式, 多个邮件存放在一个独立文件内, 每个邮件由一个"From" 的行开始. 这一行看起来像一个标题字段, 不过那不是标题, 那仅仅是传送代理添加的, 便于邮件读出器可以找到每个邮件开始部分的一个标记.
例如:
./Mailbox
这个设置表示邮件将被追加到 $HOME/Mailbox 文件上, 每个邮件由"From"引领. 一个存放了一个单独邮件的简单的mbox 的邮箱看起来是下面这个样子的:
From user1@example.net Thu May 13 18:34:50 1999 Received: (qmail 1287205 invoked from network); 13 May 1999 18:34:49 -0000 From: user1@example.net To: user2@example.com Subject: hey What's up?
第一行是 qmail 传送邮件时添加的.
(2). maildir 格式邮箱的邮件投递
maildir 是 Dan Bernstein 为了表明 mbox 邮箱格式的缺陷而创造的格式. 一个 maildir 邮箱包含三个子目录, new, cur, 和 tmp. 在各个子目录下的每个邮件根据状态的不同分别存储在各个子目录下独立的文件中. 未读邮件存储在new中, cur存储已读邮件, tmp 是为那些正在传送过程中的邮件使用的. maildir 的man手册页详细描述了maildir格式的细节.
maildir 格式的优点之一就是保证邮件传输的安全, 即使在不锁定情况下, 不同邮件代理同时更新邮件, 也能保证传输的可靠. 这意味着maildir 邮箱可以安全的建立在以NFS性质挂接的文件系统上.
例如:
./Maildir/
这个设置表示将把邮件存储在 $HOME/Maildir 下面的 maildir 格式的邮箱.
注意: qmail-local 可以将邮件传送到 maildir 格式邮箱, 但是不能创建这种邮箱. 你需要使用qmail 附带的maildirmake 程序来创建 maildir 格式邮箱. 例如: "maildirmake ~/Maildir". 不过要确定你使用maildir的拥有者运行maildirmake, 而不是 root 用户. 另外的方式, 你的 useradd 和 adduser 命令可能支持"skeleton"骨架目录, 例如: /etc/skel, 然后可以直接复制这个目录给所有新用户.
(3). 转发邮件
转发邮件就是将邮件重发到指定地址. 由.qmail文件内的命令不能包含注释部分和多余的空格.
下面的写法是错的:
& & user@example.com &Joe User
下面的是正确的写法:
&user@example.com user@example.com &user
前两个将邮件副本转发给 user@example.com, 最后一个将邮件副本转发给本地用户 user.
(4). 扩展地址
qmail 支持用户控制扩展地址. 在基本地址 username@hostname.domain 上扩展的扩展地址为: username-extension@hostname.domain ,用户同样可以接收发往扩展地址的邮件. 在本节其余部分, 我们讨论的范围都是在本地系统上, 所以我们将不再使用"@hostname.domain" 部分.
给用户 username 的邮件传送指令由 ~username/.qmail 文件指定. 对于型如username-extension 的扩展地址的传送指令由用户目录下的~username/.qmail-extension 文件指定.
举一个例子, dave-lwq@sparge.example.com 这个扩展地址的传送将由文件 ~dave/.qmail-lwq 来控制.
扩展地址可以拥有多个字段, 例如 dave-list-qmail 这个扩展地址, 由 ~dave/.qmail-list-qmail 来控制. 在这个例子里面, dave-list-qmai 这个地址被用来订阅 qmail 的邮件列表, ~dave/.qmail-list-qmail 则负责归档这个列表的邮件到单独的邮箱里面.
.qmail 文件可以用-default 后缀进行匹配。 所以 dave-list-qmail 可以由 ~dave/.qmail-list-default 操作. 这个文件可以一对多方式用一个.qmail文件控制所有型如 dave-list-加上任何后缀的地址. 注意 dave-list 不能由 ~dave/.qmail-list-default 控制, 因为在"list"后面没有"-".
qmail 会使用最接近的匹配方式. 例如, qmail在传送一个标志着送给dave-list-qmail这个地址的邮件时, 会按照下面顺序查找.qmail控制文件, 并按照最先匹配的.qmail文件传送这个邮件.
.qmail-list-qmail .qmail-list-default .qmail-defaul