第六章 标准Unix邮政系统程序

在第五章中,我们曾谈到过Internet电子邮政系统,通过使用一种叫 SMTP的系统来发送和接收邮件。

每台Internet计算机均含有两套能提供邮件服务的重要程序。其一传 输受理,在后台运转,使邮件与外界相联;其二,PC机中的用户邮件程序。 这样,就可发送和接收邮件。

在所有第五章中提及过的邮件程序中,最为重要的是标准Unix邮件程 序,叫做mail。该程序是唯一适用于所有Unix系统的程序。即使你所使用 的是一个与上述程序完全不同的程序,你也应该至少将本章其余部分浏览 一遍。以下的提示和技术在一般说来适用于所有邮件程序。尤其应当知晓 的是from与biff命令。

无论你所使用的是何种邮件程序,都可以去熟悉一下标准Unix邮政系 统。这对你有益,因为这是唯一能在所有Unix系统中均能找到的程序。

Unix邮件程序步骤

我们先大致了解一下mail程序如何操作。下面,将更为详细地讨 论发送与接收邮件。

使用mail有两种方法。发送邮件时,录入mail紧接着录入信件到达的 某个或多个地址。例如:你想把一封信件送至harley@fuzzball.ucsb.edu, 你需录入:

mail harley@fuzzball.ucsb.edu

大多数系统设置向你询问标题和其它信息。于是你可录入你的这些信 息,一次一行。

录完全部内容后,另起一行,按“CTRL-D”(即按定“CTRL” 键时再 按下D键) 。在Unix中,此键被称为eof(文件结束键)。一旦你按下了该键, 信息便开始发送,且mail程序也行将结束。

若要读出邮件,录入:

mail

若有许多信息待读,mail可显示出信息清单,等你录入命令,执行不 同的命令,你能读出且对你觉得需要的信息作出回复。结束之后,请录入 q(停止)命令,则mail程序也终止。

如果读不出信息, 你会看到一行带有你的用户标识说明的提示:

No mail for harley

邮件地址

录入mail命令以及收件人的一个或多个地址名称,可发送邮件。例如:

mail harley@fuzzball.ucsb.edu
mail addie@nipper.com mschuster mpeirce

第一个例子中邮件只送到一个地址,第二个例子中则出现了三个地址。

让我们花点时间讨论一下第二个例子中的三个地址。 第一个地址 addie@nipper.com是完整的,包括一个用户标识和一个域。第二个和第三 个地址就只有用户标识。这是因为这两个接收方与发送信件的一方使用了 同台计算机,地址上与本机相同部分就省略了。

以下即工作步骤:

假若你的完整地址是harley@fuzzball.ucsb.edu,按照基本的原则, 当你向某人发送邮件时,可以省略你们共同的子域(sub-domain)。例如, 你想将一封信件送至kim@furface.ucsb.edu,因为最后两个子域 ucsd 与 edu是一样的,你可以删去它们,仅将邮件发送到kim@furface即可。 换 句话说,就是因为fuzzball与furface都处于同样的本地网络之中, 你只 需录入不同的计算机名即可。

如果你与某人使用同台计算机主机,连整个域都相同,则只需使用用 户标识就行了。因此,如果你请求登录至fuzzball,且欲将信件送至同在 fuzzball中的某人处,则你只需说明其用户标识。比如,你的完整地址是 harley@fuzzball. ucsb. edu ,而你的收件人的完全地址是 mschuster@fuzzball.ucsb.edu,那么以下所用 的命令均可:

mail mschuster@fuzzball.ucsb.edu
mail mschuster@fuzzball
mail mschuster

欲知更多有关Internet地址的信息,请参见第四章。

若你发送邮件至某无效地址,信息将被打回,且有解释 ,因为在发现地址错误之前仍会沿着原路通向目的地计算机。 对此类情 况,我们称之为信息“反弹”。比如, 你或许会打电话给你的朋友:“ 你能再告诉我一下你的地址吗?我按你昨天给的地址交了邮件,但它被‘ 反弹’了回来。”

编写信件

录入mail命令之后,你会看见

Subject:

这是向你询向信件标题。录入信息,并按“RETURN”键,你所录入的 内容即成为信头中Subject的内容。

你应使你的标题描述简短些。经验法则约定,不应超过40个字符。

鉴于你的程序设定方法,你现在会看到:

Cc:

这是向你询问是否将信件的副本送至别处。若要,则录入它的地址或 多个地址并按下RETURN键。若否,则只按RETURN键。

在你可以一次一行地录入你的信件内容。完成后,按下RETURN( 移向 新的一行),再按CTRL-D。正如我们已解释过的,“CTRL-D”(文件结束键) 通知程序数据已完全录入。

图6—1是发送信件样本。用户敲入的用黑体字表示;第一行的“”符 号是Unix中的shell提示符,即表示shell待命。请注意在信件的最后,当 我们按了“CTRL- D”之后,邮件会回复出“ EOT ”, 这表示 End of Transmission(传送结束)。这也证实了信件的完整和可以发送。

在编写信件时,你若改变了主意,只需在行中按两次“CTRL-C”即可 消除以前的内容。在Unix系统中,“CTRL-C ”被称为“ intr ”键 ( 即 interrupt,中止键),用来使一个正在运行的程序紧急停止。当你想紧急 终止信件时,mail规定要按两次“CTRL-C”。 第一次按后,你会看到:

(Interrupt--one more to kill letter)

这是一种自我保护手段,是当你不慎按下“CTRL-C”键后,仍可忽略 它并继续录入信件。但你确要紧急中止信件录入,需再按一次“CTRL-C” 就可以加以确定。


    mail kim@furface.ucsb.edu

    Subject: An important visit

    Cc:

    kim:

    the great scholar T.L.Nipper will be visiting next

    keek and giving a guest lecture. Do you want me

    to get tickets?

    --Harley

    CTRL-D

    EOT

    图6-1信件发送

代字号换符命令

当你录入信件时,某些特定命令可以在mail程序中使用,为了避免这 些命令与你所录入内容相混淆,这些命令均以代字号“~”开头。当一单 个字符如此使用时,即表示其后的内容需用另一种方式来处理——这样的 字符被称为“换符”。鉴于此,这些命令被称为换符命令,必须是在一行 的开头。

下面的表6-1概括了各类换符命令。在此表中,我们使用标准Unix 命 令语法,即使用标准Unix惯例来描述命令的技术格式。斜体字代表你必须 填入的内容。 当看到“…”,则表明你可以填入不止一项的内容。


   命令功能

  ~? 帮助;显示代字号换符概述

  ~b address...在“Blind copy”行添入地址

  ~c address...在“Copy”行中添入地址

  ~d读出死信(dead letter)文件内容

  ~e调用正文本编辑器

  ~f messages(继续)读出信件

(斜体字部分)

  ~h编辑所有信头行

  ~m messages读入信息;在开头插入tab键

  ~p显示(打印)当前信件

  ~q终止(与两次“CTRL-C”相同)

  ~r file读出文件内容

  ~s subject改变标题行

  ~t address...在“To”行添加新地址

  ~v调用另类编辑器(通常与~e相同)

  ~w file将当前信件写入文件

  ~! command执行shell命令,然后返回信件 

  ~| command通过过滤器传送当前信件

    表6-1mail代字号换符命令概要

我们可以不必谈论各个代字号换符命令,而应该花点时间实际操作体 验一番,我们将仅就其中几个最重要的命令作示范说明:

首先,“~?”命令能显示一个所有代字号换符的概述,如表6-1所示。

最重要的命令是“~e”, 它能启动一个文本编辑器以便你在信息发 出之前能进行修改。正如在前一节里提及的,你一次一行编写信件,在录 入的行中,可以退格并对信件加以修正。然而,回车后对前一行进行修正 却是办不到的。

对此的解决办法就是使用“~e”键。它可启动你的改错文本编辑器。 通常可以是vi——标准Unix文本编辑器——或是emacs。这样就可以对任 意一行进行修改并添加所需内容(当然,你得知道使用编辑器的方法 )。 修改完成后就可采取通常很简单的方式终止编辑。你便回到了mail程序, 按下“CTRL-D”可发送信息。

另一个有用的换符命令是“~h”,它能通知mail你所想修改的信件 信头。那些信头会一条条地被显示出来,供你随意修改。如果你不想作出 改动,只需按RETURN键。


    起初,你会看到:

    To:

    现在你可以修改地址。然后会出现:

    Subject:

    现在你可以修正信件的标题。在此之后,你会看到:

    Cc:

    你可以在此时说明你想将信件(副本)送至的地方。最后,会出现:

    Bcc:

    现在如果你想将死件送至某处,你可将该处说明出来( 若你不想作出

任何改变,就按“RETURN”键)。

在每一条都修改完毕之后,你便回至了原处并可继续录入信件。

如果你想直接对某条信头作出修改,而不是逐个寻找,你可以用~t (To:) , ~s (Subject:),~c (Cc:),或~ b (Bcc:)。 这是一种 将命令部分中的新信息说明出来的简单方法。例如:将你的信件标题改为 “Important new item”,使用:

~s Important new item

如果要将死件送至一个地址为kim@furface.ucsb.edu的朋友,录入:

~b kim@furface.ucsb.edu

下面的两个换符命令用于你对正读到的信件进行回复之时。我们将在 以后的章节加以详尽的描述。mail 程序可以在你读完信件之后比较容易 地将回复信件发给用户标识,且当你回复时,它还有助于将来信原件复制, 以作回复的一个部分。

命令“~f”(follow-up)可以做到这样。如果只用~f,mail 将你刚 读到的信件插入你回复的信件当中。若你还想加上另一封信件,只需说明 出其编号(每封信件都会有一个编号)。比如:需要4号信件,可录入 ~f 4

~m命令的功用相同,只是在被包括的信件的每行之前打上一个tab键。 这样,当别人阅读你的回信时,被包括的文本将被缩排。

在回复中,把所有的或是部分的信件包括进去是很不错的。比如,假 定你收到了:


    Do you  want to go to a movie later today ?

    lf so, would you like to see the film version 

    of the book' A Student's Guide to Unix'?

你可以利用~f将此信件插入你的回复之中,然后使用~e 开启文本 编辑器编辑信件并加上评论。回复便成为:


    > Do you want to go to  a movie later today

    Yes, That would be wonderful

   > lf so, would you like to see the film version

   > of the new book 'A student's Guide to Unix'?

   I have already seen it It is great

   Actually, I wouldn't mind seeing it again.

这里将教你如何漂亮地作出回复。首先,用~f将信件原文插入回复中, 然后, 用~e把全部内容置于文本编辑器里, 将所有的信头和你不想引 用的冗长部分从信件中删去。

在剩下的所有行的开头,能打出两个“>”(大于号,两个之间空出一 格)。有些邮件程序会自动印出,但mail没有如此设计, 所以你必须自己 去操作。 如果你使用的是vi编辑器, 接下来的命令将会在编辑缓冲寄存 器中把下列字符显于每一行前:

:s/^/> /

然后移向你想回复的每一点将你的回复插入。 这一切完成之后, 终 止编辑并按CTRL-D 送出信息。

另外一种将文本作为新信件包括进去的换符命令是~r(read读)。 它 能把一个现存的文件内容插入到你的信件中。方法是打入~r 及文件名称。 比如,要读名为memo的文件,则需录入:

~r memo

最后,我们还想提一下~!与~|两个命令。在编写信件的过程中,想 使用Unix命令时,可运用它们。~!能暂停mail程序,执行你所需的 Unix 命令后再返回mail。比如,暂停程序,想了解一下时间与日期,录入:

~!date

利用~|,同样可以给出Unix命令的名称,在此情况下,mail将把你 的信件内容送至此命令中加以处理,命令的输出将代替你的信件。比如, 假定你的信件由一长串标题构成,当该名单被录入后,你想在其发送之前 用Unix分类命令进行名单分类, 则录入:

~|sort

你的信件内容将会被分类命令处理后的输出所代替,即显示出分类过 后的顺序。如果此时你想做出少许修改的话,可使用~e启动文件编辑器。 在Unix中有一叫fmt的命令专门用来对邮件内容格式化。fmt 命令首 先一行一行地阅读文件,然后使其尽可能紧凑,可达每行72个字符。 该 命令不会改变每行开头或两字之间的间隙,同样也保留了空行。换言之, 只要你使用空行来分隔段落的话, fmt命令使信息格式更为优美。

在整个信件发送之前进行格式化,需录入以下代字号换符:

~ |fmt

若要检查结果,可使用~p(print,即打印)显示出信息或~e 来启动 文本编辑器。

发送邮件的捷径

我们已描述过如何发送邮件:先录入mail命令,再录入一个或多个地 址, 编写完信件内容后定一个标题,最后按CTRL-D发送出信息。

为了加快速度,你可以使用几种不同的mail命令。首先, 你可以把 标题定为命令的一部分,先录入mail再输-s和标题,如:

mail—s Meeting harley@fuzzball. ucsb. edu

此命令把信头中的标题行定为“Meeting”。 如果你想定一个复杂一 点的包括空格和标点的标题,可用一个单引号将内容包括进去。如:

mail—s ‘Meeting next week’ harley@fuzzball.ucsb.edu

用此种方法规定出标题时,mail不会要求你再录入标题。若你想做出 修改,可使用~s或~h换符命令。

在Unix专有术语中,-s叫做“选择”或“转换”,根据Unix规定,所 有的选择必须在命令的开始,以此保证在-s 后说明地址。比如, 如此录 入便会出错:

mail harley@fuzzball.ucsb.edu -s ‘Meeting for next week’

mail会认为你想把一条信息送到三个不同的地方: harly@fuzzball .ucsb.edu,-s和“Meeting for next week”,于是所有的部分都会出错。

另一捷径是你可以事先准备好信件并存入文件,然后你可以通知mail 直接从文件中读取信件。实施步骤:在命令最后打入“<”(小于号), 再 打入文件名称。比如:假定你在文件(名为memo)中存有一封信件,并想以 “Meeting next week”为标题,把此信件送到 harley@fuzzball. ucsb .edu,录入:

mail -s ‘Meeting next week’ harley@fuzzball.ucsb.edu 如何识别信件已被读取

一般来说,无法看出信件是否被接收方读取。但有一条命令可以奏效。 这就是 finger 命令。 我们将在第八章中详细讨论。 基本上说来, finger会显示出在Internet中有关任何用户标识的公众信息( 有些地方却 禁止finger进入系统,可能是安全的原因,也可能是为了减少进入该系统 的网络请求的数量)。

有些finger版本能告诉你是否在某个用户标识有信件等待而未被读取。 举例说明: 假定你把信件送到一个地址是 harley@fuzzball. ucsb .edu的朋友处,你可以运用以下命令得到有关他的信息:

finger harley@fuzzball.ucsb.edu

如果他的计算机上的finger系统显示出邮件信息,输出中会有下列内 容:

New mail received Thu Apr 1 12:39:22 1993
unread since Thu Apr 1 08:16:11 1993

(我们将在第八章中见到finger命令的完整输出)

许多系统中都有命令可使你检查何种邮件处于待读状态。 比方说, Unix有from命令(我们会在下一节中碰到)。这种命令可以将信件清单连同 其它标题显示出来。

如果某人使用了from命令,对于finger来说此人就好像读过邮件,即 使实际上并非如此。更确切地说,from命令必须取出这个文件, 所以产 生看上去已读过邮件的错觉,而实际上只不过是那人列出过的未读取信件 的清单而已。

当你看到这样一条令人生气的信件:“我知道你已读过我的邮件,为 何不回信? ”请先不要暴怒,记住上面的情况。

检查邮件是否到达:from ,biff

除了使用mail程序,Unix系统还有另外两个命令能通知你是否有邮件 待读。第一个是from,只需简单录入:


    from

    你就会看到所有待读信件的概要。例如:

    From addie@nipper.com Wed Mar 31 23:49:50 1993

    From kim@fuzzball Thu Apr 1 06:42:25 1993

    From mschuster@music tuwien.ac.at Thu Apr 1 06:50:48 1993

    From addie@nipper.com Thu Apr 1 08:22:28 1993

    From mpeirce @shamrock.tcd.ie Thu Apr 1 08:23:45 1993

如上所示,from 会显示每封信件信头的头一行, 如果无待读信件, from 将什么都不显示。

第二个命令叫biff,后台工作,监测持有你的邮件的文件。当你在登 录过程中,无论新的信件何时传来,biff都自动地叫你知晓。因此,没有必要一直录入 from 命令检查是否有新的邮件抵达。

biff命令有一个on/off开关。开动后,biff会检查你的邮件的所有路 径;若关闭, 则biff停止工作。大多数时候让biff开启着是极有用的; 但 当你进行某种特殊的处理时,不希望被新来的邮件打扰,即可关掉biff。


    若要开启biff开关,录入命令并打入y(即“yes”):

    biff y

    若要关闭biff,则打入n(即(“no”) 

    biff n

    如要检查当前状态,只录入命令名称:

    biff

    你会看到:

    is y

    或

    is n

当信件抵达后,它们会被存入一个文件, 以备读取。 每位用户都有 这样的文件。使用from命令使之用来查看此类文件且知道是否有信件存在。 在有些系统中,如果不能再存入更多的邮件,邮件就会消失。当新的 邮件抵达后,文件又重新出现。因此,当你并无邮件时,from命令发现的 不是一个空的文件,而是发现一个失踪了的文件,你会看到如下警告:

Can't open /usr/spool/mail/harley

其含义是from命令无法找到你所要的文件, 而实际上你并无邮件。

如果你使用X Window系统(参见第二章《附》), 有一个叫xbiff 的X 客户机可供使用,xbiff为你画出一个邮箱,当邮件抵达时, 邮箱上的旗 子会升起。只需移动鼠标器至邮箱和卡嗒一声,旗子就会放下回到原位。 当你向Unix系统请求登录时,你会见到一条信息,它告诉你有邮件。 此信息来自你的shell(命令处理器),而不是来自biff命令。

Biff命令的名称来自一位叫Heidi Stettner的程序员所养的名为Biff 的狗。1980年夏天,Heidi在等待进入研究生院读书期间, 为加州大学柏 克莱分校一位计算机科学教授工作。当时,她经常把Biff带到办公室,离 她不远处,Unix的程序员正研制BSD的新版本(柏克莱Unix)。

有一种传说是这条叫Biff的小狗每当邮递员来到的时候都要叫一阵。 实际并非如此,Biff是教授们与学生们共同的宠物。在贴有所有计算机学 研究生照片的广告牌上,Biff 也自有它的照片 ( 甚至在一次编译课中, Biff得上了B,不过这是另外一个故事)。

有一天,一个为Unix工作的学生John K. Foderero 决心设计出一个 命令并命名为Biff。他很快有了主意并写下了检查邮件的程序。自此全世 界使用Unix的人们都用biff为名的命令检查邮件。

(顺便提一下,我们写此书时, Biff 已经退休。 它仍在柏克莱陪伴 Heidi。正如许多上了年纪的Unix先驱者们一样,Biff 把大多数时候也花 在了睡觉上面。)

读取邮件-概要

若要读取邮件,只录入mail命令即可:

mail

如果有待读邮件,mail会以信头概述的形式,即一行的简短描述显示 出每条信件的内容。例:


    *mail version 2.18 5/19/83. Type ? for help.

    “/usr/spool/mail/harley“:5 messages 5 unread

    >U 1 addie@nipper.com Wed Mar 31 23:49 35/1204 “Re: seeing

a movie”

   U 2 kim@fuzzball Thu Apr ? 06:42   138/5518  “ Re : having

dinner”

   U 3 mschuster@music.tuwien.ac.at Thu Apr ? 06:50  46/1592  “

Students Guide To Unix”

   U 4 addie@nipper.com Thu Apr ? 08:22 48/1595    “ Something

 interesting about TLN”

   U 5 mpeirce@shamrock.tcd.ie Thu Apr ?   08: 23  343/16810  “

Schedule  for Chapter 5”

摘要中的每一行代表一条待读信件。如果一个信头概述很长, 在你屏 幕上所显示出来的就会分成几行。如上所示,信件均被编号。在上例中我 们共有五条信件。

在编号之后, 你看到的是发送信件的用户标识。 如 1 号信件由 addie@nippercom送出。紧随其后的是发送日期和时间。 在此之后又是 两个被“/”(分隔号slash)隔开的数字。这能告诉你信件的长短,两个数 字分别为行数及字数。在上例中,1号信件包括了35行共1,204字。 最后 是信件的标题。

在信头摘要显示完毕后,你会看到“&”(表示and的符号)的独行显示

&

这是一种提示符(prompt),表示mail在等你录入命令。你就可以逐个 地录入命令对邮件进行读取和处理。输完之后,录入q(quit)停止程序。

在出现“&”提示符之后,你有许多命令可以录入,表6-2和6-3 是这 些命令的简介;表6-2是以字母顺序列出的所有重要命令;6-3 是以功能列 出上述命令。


    缩写全称功能

    ?-显示命令概况

    !-执行单个shell(命令处理器)命令

    +-显示下一封信件

    --显示前一封信件

    RETURN-显示下一封信件

    number-显示信件编号

    ddelete删除信件

    dp-删除当前信件,显示下一封信件

    eedit对信件进行文本编辑

    hheaders显示信头概述

    llist列出可用命令名单

    mmail将新信件送到指定的用户标识

    nnext显示下一信件

    pprint显示(打印)信件

    prepreserve把信件保存于系统邮箱

    qquit终止邮件

    rreply回复发送方及所有接收方

    RReply只回复发送方

    ssave将信件存入指定的文件中

    shshell暂停mail,启动新的命令处理器(shell)

    totop显示信件头几行

    uundelete保留事先删除信件

    wwrite与s相同,只是不存信头

    xexit终止mail,一切改变无效

    z-显示下一组信头概要

    z--显示上一组信头概要

    注意:在某些系统中,r与R用途相反

    表6-2mail重要命令一览(以缩写字母为序)

    缩写全称功能

    停止mail

    qquit终止mail

    xexit终止mail,且一切改变无效

    HELP

    ?-显示命令概要

    llist显示命令名单信头

    shheaders显示信头概要

    z-显示下一组信头概要

    zˉ-显示上一组信头概要

    显示信件

    +-显示下一封信件

    --显示上一封信件 

    RETURN-显示下一封信件

    number-显示信件编号

    nnext显示下一封信件

    pprint显示(打印)信件

    totop 显示信件头几行

    回复及邮寄

    mmail编写一封新信件

    rreply回复发送方及所有接收方

    RReply仅回复发送方

    处理信件

    ddelete 删除信件

    dp-删除当前信件,显示下一封信件

    eedit对信件文本编辑

    prepreserve将信件存入系统邮箱

    ssave将信件存入指定的文件中

    uundelete恢复先前删除信件

    wwrite与s相同,不存信头

    Shell指令

    !-执行单个shell命令

    shshell暂停邮寄,启动一新的shell命令

    注意:有的系统中,r与R功效相反

    表6-3mail 重要命令一览(以功能排列为序)

当前信件及信件清单

过一会儿我们将讨论最重要的mail命令。 这里有几个你在读取及处 理信件时会用到的命令。讨论之前,我们先弄清“信件清单“的涵义。

再看一下前面列出的信头概述


    Mail version 2.18 5/19/83. Type ? for help.

    “/usr/spool/mail/harley”:5 messeges 5 unread

    >U1 addie@nipper.com Wed Mar 31 23:49 35/1204“Re:seeing a

 movie ”

    U2 kim@fuzzball Thu Apr ?06:42 138/5518 “Re:having dinner”

    U3 mschuster@music.tuwien.ac.at Thu Apr ?06:50    46/1592 “

Students Guide to Unix”

    U4 addie@nipper.com Thu Apr ? 08:22    48/1595 “ Something

 interesting about TLN”

    U5 mpeirce@shamrock.tcd.ie Thu Apr  ?   08: 23  343/16810 “

Schedule for Chapter 5”

注意1号信件的最左端有一个“>”(大于号),表示当前信件。如果你 录入命令时未清楚地指定某封信件,则当前信息就是缺省的。

比如,正象我们待会儿看到的,d命令删除信件。命令:

d 3-5

会删除3#-5#的信件。若你没有指定信件的标号, 此命令将对当前信 件起作用。如,你录入:

d

它将会删除当前信件(在上例中当前信件是1号)。

当你要读取信件时,当前信件从1号信件开始,一个一个读下去, 当 前信件也会变成为上一封信件。因此,无论在何时, 任何未清楚的指定 信件的命令都会作用于上一封你读取的信件。

有时,尽管你会指定某封信件号,对于大多数命令而言, 你可以使 用一个或多个号码,比方刚才提到的第二个例子中,我们说明我们想删除 3号-5号信件。 你所指定信件的方法就是使用信件清单。

“信件清单”中可以包括一个或更多的数字式,即一组数字或字符, 具有特殊意义的数字或字符。表6-4列出你能指定信件清单的不同途径。

大多数情形下,你使用的命令只指定一个号码或是完全不用信件清单。 然而, 说明信件清单的方法很容易,你应该熟悉并且会使用。

表6-5列出使用d命令的一些信件清单例子。


     规定含义

     当前信件

     n信件号码n

     n-m包括从n至m的所有信件

     ^第一封信件

     $上一封信件

     *所有信件

     userid所有来自指定用户标识的信件

     /pattern所有包括标题形式的信件

     :n所有新信件

     :o所有老信件

     :r所有被读取的信件

     :u所有尚未被读取的信件

     表6-4指定信件清单的不同途径

     命令含义

     d删除当前信件

    d 删除当前信件

    d 3删除3号信件

    d 3-5删除3至5号信件

    d ^删除第一封信件

    d $删除上一封信件

    d *删除所有信件

    d harley删除从用户标识harley来的所有信件

    d /hello删除标题中带有“hello”的信件

    d :n删除所有新信件

    d :o删除所有旧信件

    d :r删除所有已读取信件

    d :u删除所有未被读取信件

   表6-5指定信件清单举例

在一张信件清单中,:r指那些已被读过的信件;:u则指尚未被读过的信 件。你又如何能知道哪个是读过的,哪个是未读过的呢?

再回头看一下本节开头的信头概要, 请注意在每一个信头行左端都 有一个“U”,表示信件尚待读取,你读过信件后“U”便会自动消失。 信件显示

mail程序的设计有利于信件逐封显示。其步骤如下:开始读取时, 当前信件定在1号,要读取第一封信件,只需按“RETURN”(回车键) ; 要 读取下一封信件, 就再按一次“RETURN ”。 换言之, 你一次一次按“ RETURN”就可以逐个读出信件。

如果你想直接跳到某封指定的信件,可以使用P(print)命令。 比如你 想读取4号信件,录入

p 4

为了方便起见,如果你只录入号码,mail会认为你想要信件显示出来。 因此,更容易的方法就是

4

除此之外,你可以录入“+”(加号)显示下一封信件或“-”(减号)来 显示前一封信件。

若是信件太长而不适于屏幕一次显示完,mail 会启用一个卷页程序 来为你显示信件。卷页程序一次显示一个屏幕,并在屏幕的底部有提示: 还有未完内容。使用哪一种卷页程序取决于你使用的系统如何设置。三种 最常用的卷页程序是more、pg和less。

在使用more或less时,你按空格键卷动屏幕;用pg时,你须按RETURN 键。存储及删除信件

你读完一封信件后要对其进行处理,有两种选择:删除或存储信件于 文件中。删除信件用“d”命令;存储信件用“s”命令。若录入命令时无 信件清单,则它实施于当前信件上,即刚已读过的那一封信件。

比如,你刚读取一封信件,要删除它:

d

当然你可将信件清单和d命令一起录入,如删除2号和从5号到7号的信 件,录入:

d 2 5-7 若你改变了主意不想删除信件了,你可用u命令来保留。 但必须在停 止程序之前保留。如:保留6号信件,录入:

u 6

存储信件时, 你必须指定文件名称。 比如要把刚读取的信件存储到 名为“important”的文件中去,录入:

s important

若你将信件存入一个已有的文件中,mail会把新内容加到文件的末尾。 若没有文件,mail会自动为你创建一个。

如果你想把一些人的信件存起来,可以使用以人名为名称的文件。如: 每次你读到一个叫Harley的人的信件,就可以录入

s harley

用此法可很好地整理你的函件。

每次你向Harley发出信件,自留一份副本,且存入harley文件。这样, 你就能存储

下与某人有关的所有信件——发出过的和接到过的。

当你终止mail程序时通过录入q命令,mail 会把所有删除的和存储了 的信件从邮箱中取走。除了这两部分外已读过的信件会被 mail 存入名为 mbox的文件,而未读过的信件被单独放置。

mail为何如此急于处理你的信件?当信件抵达时, 它们会被留在一个 叫mailbox的文件里。这个文件是硬盘系统的一部分。在许多系统中, 你 的mailbox所占用的硬盘内存并未计入你个人的份额。但mail 把信件转储 到文件中时,它存储于你的目录之中,存储空间便是你的了(在Unix 中, 文件存于目录之中)。

在一些系统中,尤其是那些由你付费的系统,在你的mailbox 中未读 信件占有的空间由你来付帐。

如果你偶然删除了过多的文件,或因为其它原因破坏了不少信件,你 可以用“x”(exit)而不是“q”来停止mail,该命令通知mail当前所作任 何变动无效。 若你没有时间来整理一些你所读过的信件, 在停止之前, 使用pre(preserve) 命令, 该命令告诉mail 不要把某些指定的信件置入 mbox文件。如把2号到6号的信件留在邮箱中,录入:

pre 2-6

保留所有信件在邮箱中,使用:

pre

通常你读取那些留在邮箱中的信件, 但有时你想读取那些存于自己 个人文件中的信件。比如:你或许在一个名为Harley的文件中存有一批来 自Harley的信件, 或许mail程序把一些你的信件存入了mbox文件(如前所 述)。

在此情况下,当录入mail命令时,使用“-f”,在-f之后,录入文件 名称,mail程序能从文件中读出信件。如从harley文件中读取信件,录入:

mail -f harley

从mbox 文件中读取信件,录入:

mail -f mbox

信件的回复

回复信件使用命令r,mail程序会自动使用信件发送人的地址。 你可 以录入你的信件,一次一行,正如我们已描述过的; 而且因为你在编写一 封信件, 你可以使用所有的代字号换符命令。 尤其在你的回复中可以运 用“~m”来包括原始的信件。


    下面有个例子:你刚读到一封信件:

    Do you want to go to a movie tonight ?- -kim

    欲回复,录入

    r

    由此你可以开始录入你的信件:

    Yes. I would love to go toa movie,

    as soon as I finish writing Chapter 6.

   -Harley

录完最后一行,按下“CTRL-D”发送信件。

如果原始信件的副本被送至其它用户标识,使用“r” 命令可以自动 把你的回复送到每个人那里,但有时,你只想把回复送到发信人处。 比 如, 你要回复一份有三十多人都收到的备忘录, 或许你不希望三十多人 都会收到你的回复,在这种情况下,使用“R”命令则可以告诉mail 只把 回复送到信件发送人处。

在你开始使用电子邮件后,信件很快就装满了你的邮箱(或mbox文件)。 为了不让信件被弄得乱七八糟,应该读完信件就处理。可循以下三条建议: 读完一条信件后,决定是否需要回复,若是则立即着手;

在开始读下一封信件之前,把上一封删除或存储;

若有疑问,先抛开。

编写新信件及转寄邮件

在你读取一封信件时, 你可能会决定给某人回送一封新的信件。 你 无需中止 mail再录入新命令,而可以通过“m”命令即可发出一封新的信件。 举例说明:你在读一封信件时意识到应立即给一位地址是 harley@fuzzball.ucsb.edu的朋友发送一条便笺,只需简单录入 m harley@fuzzball.ucsb.edu 还需录入信件标题,之后你以一般程序录入信件内容,按“CTRL-D ” 送出信件后,你又可以回到刚才中断的地方继续读下去。

有些mail程序中的命令可以把信件转寄他人。mail 程序不具备此种命 令,但要这样也不难。

首先使用“m”命令发送一封新的信件给某人,然后用“~f ”代字号 换符命令把你刚读到的信件包括入新信件中。

此如:,你刚读完3号信件并想把它转寄至地址为kim@nipper.com的一 位朋友。 开始先录入命令发送新信件:

m kim@nipper.com

你会看到

Subject:

录入标题并按“RETURN”。现在再录入命令将当前信件拷贝至新信件 之中:

~f

你会看到:

Interpolating: 3 (continue)

此行告诉你,mail已经把3号信件拷贝至新信件中。现在按“CTRL-D” ,你会看到:

EOT

新信件已经发出,你可以回头继续读取文件。

当你采用该法转寄信件时,你也许会在使用“~f”之后用“~e”启 动文本编辑器,这样你可以在送出信件时去掉旧的信头行。