UNIX 系统 MAIL 简介及使用



1 寄信

地址叫做 E-MAIL ADDRESS 此地址,是由三部份所组成:
(a) 收信人姓名 (login name) (b) 收信人所在的机器名称(hostname)(c) 收信人所在的网路区域名称 (domain name)
格式如下:  username@hostname.domainname
其读法为: "我要寄信给一个叫做 user-name 的人, 他住在叫做hostname 的电脑上,那一台电脑是位於 domainname 这个区域内"(注意: user-name 与 hostname 中间以'@'符号分隔,'@'读作 at,而 hostname 与 domainname 则以句点"." 隔开)。 

2 找出自己的 E-MAIL ADDRESS 

首先我们先来找出你在此工作站的 E-MAIL ADDRESS 为何:
1. user-name: 此名称即为你 login 时,所输入的 login-name ,或者你也可以用 whoami 命令来查看系统认定的你的称谓
2. host-name: 此名称即你所在机器的名字,通常在 login 时,就会有显示出来,另外你也可以用 hostname 命令来查询
3. domain-name:此名称即为你所在的机器所在电脑网路的区域名称,此名称可用 domainname 命令查询
合起来之後,你的 E-MAIL 收信地址是 username@hostname.domainname

3 寄信给自己

想要寄信给自己,只要在 Shell 下,键入下列命令即可
( 假设你的 username 叫作 'ottocho' )
ottocho@i7:~$
ottocho@i7:~$ mail ottocho
说明:
在这里,因为你是写信给同一台机器上的人 (自己) ,因此 @後面的部份便可省略,系统会认定你是要写信给一个在同一机器上叫做 lin 的人,而不替你作转寄的工作,譬如你有问题要问本机的root ,则打入 :
ottocho@i7:~$ mail root
此信的标题或主旨,输入标题然後按下 Enter 後就可打入信件的内容,最後要结束信件本文时,於行首处打入句号 "." 做为信件的结尾 , 此符号在 mail 程式中有此一特定的意义 ( 另一个方法是按CTRL-D),接著 mail 又 出现 Cc: (抄送 carbon copy)的提示符号, 表示询问你是否要顺便将此信寄给某人,若没有就打入 ENTER 即可,然後又回到Shell,信件便寄出去了。若在写信途中, 临时想放弃, 可打二次 CTRL-C退出 mail 程式。

4 寄信给别人

我们可以把 E-MAIL ADDRESS 想成如下的格式
user-name@host-name.domain-name => user-name@where
因此在上例中,我们如果是寄给同一机器上的 user,只要打 user-name 的部分即可 @where 部份便可省略,也可以全部打,我们称这一种格式的 E-MAIL ADDRESS 叫做 FQDN(Full Qualify Domain Name),例如:写给自己的信,可下如下的命令
ottocho@i7:~$ mail lin@mail.ncku.edu.tw
这与如下的命令是同样的
ottocho@i7:~$ mail lin
而如果你所要送的信是要送往别的机器的话,就必须非用 FQDN 不可,例如要写信给本校电算中心一台叫做 dec6 的工作站上的 root ,就必须用如下的方式
ottocho@i7:~$ mail root@dec6.ncku.edu.tw
才能寄的到,如果@where的部分省略了,就变成寄给本机的 root了。

5 读信

输入 mail 命令读取信件,例如你可能会看到如下的萤幕:
ottocho@i7:~$ mail
"/var/mail/ottocho": 1 message 1 new
>N   1 ottocho            Thu Feb 25 01:32  15/462   Hello!
&
这时我们称您进入了 mail 内的命令模式, 提示符号也由系统的提示符号改为 mail 程式自己的提示符号,接下来,我们来讨论在图中mail程式所显示的各项资料,首先第一行是 mail 程式的 版本序号与发行日期,并提示使用者打入问号?可列出在此命令模式中, mail 程式可提供的指令及其解释, 在第二行显示使用者用来存放收到之信件的档案的全路径名,(Incoming mailbox),且在该档中, 原有一封信,其状态是新寄到的。接下来的每一行则列出该 user 目前所收到的每一封信(在此只有一封)的相关资料,依序为" 状态,信件编号,寄信人,日期,信件标题"
*状态栏位: 以不同的字元,表示不同的信件状况,指出信是新到'N',尚未读取而过时的'U',而已读过的信件则无任何记号,在一列寄来的信中,开头有'>'记号者,则表示目前命令所作用的信件 (Active letter)
*信件编号: 指示信件到达的次序编号
*寄信人 : 指出是谁在什麽地方 (FQDN) ,寄信给你
*时间 : 信件寄出时的日期及时间
*大小 : 指出该信件的内容大小 (BYTE 数)
*主题 : 指出该信的主题

6 选取欲读的信件

在列完所有的信後,mail 程式会出现它的提示符号,等待你下命令给它。此时打入欲看的信件编号便可读取该信,举例如下:
ottocho@i7:~$ mail
"/var/mail/ottocho": 1 message 1 new
>N   1 ottocho            Thu Feb 25 01:32  15/462   Hello!
&
To: <ottocho@i7.tt>
Subject: Hello!
From: ottocho <ottocho@i7.tt>
Date: Thu, 25 Feb 2010 01:32:00 +0800

I am learning mail!
&
而如果欲读取的信,恰为目前作用的信件(有'>'符号者),直接按ENTER 即可(不必打信件编号)。
如果信件太长,无法一次在萤幕内颢示完,则 mail 会呼叫 more程式来完全显示,因此在 more 中的功能在此便也可以用得上。

7 信件的内容

信中除了,信件的内容外,此信还包括了一些重要的讯息:
From:显示寄信的 E-mail ADDRESS 如此可看出此信是谁在什麽地方寄来的。
TO:即为你的收件人 E-mail ADDRESS
Subject:此信的标题

8 储存删除与退出 mail

在 mail 的命令模式内,我们可以键入问号'?',来询问 mail在此提供的命令有那些,以下是键入问号之後的结果:
& ?
a[lias] [alias [address...]]
alt[ernates] name...
C[opy] [msglist]
cd [directory]
ch[dir] directory
c[opy] [[msglist] file]
dec[ode] [msglist]
d[elete] [msglist]
di[scard] [header-field...]
dp [msglist]
dt [msglist]
ec[ho] string ...
e[dit] [msglist]
el[se]
en[dif]
ex[it]
F[ollowup] [msglist]
fi[le] [file]
fold[er] [file]
folders
fo[llowup] [msglist]
f[rom] [msglist]
g[roup] [alias [address...]]
h[eaders] [msglist]
hel[p] [command...]
ho[ld] [msglist]
i[f] s|r|t
ig[nore] [header-field...]
inc[orporate]
l[ist]
m[ail] [address...]
mb[ox] [msglist]
n[ext] [message]
nos[ender] [header-field...]
nou[nfold] [header-field]
P[rint] [msglist]
pi[pe] [[msglist] command]
pre[serve] [msglist]
prev[ious] [message]
p[rint] [msglist]
q[uit]
R[eply] [msglist]
R[espond] [msglist]
r[eply] [msglist]
r[espond] [msglist]
ret[ain] [header-field]
S[ave] [msglist]
s[ave] [[msglist] file]
sen[dheader] [[header][: value]]
se[t] [name[=[string]]...] [name=number...] [noname...]
sen[der] [header-field...]
sete[nv] [name[=value]]
sh[ell] [command]
si[ze] [msglist]
so[urce] file
su[mmary]
T[ype] [msglist]
ta[g] [msglist]
to[p] [msglist]
tou[ch] [msglist]
t[ype] [msglist]
una[lias] [alias]...
u[ndelete] [msglist]
unf[old] [header-field]
uns[et] name...
unt[ag] [msglist]
ve[rsion]
v[isual] [msglist]
wa[rranty]
W[rite] [msglist]
w[rite] [[msglist] file]
x[it]
z[+|-|. [count]]
? [command...]
![command]
=
# comment
*
+ [message]
| [[msglist] command]
- [message]

在此,我们介绍三个最常用的命令:储存,删除和退出

9 信件的储存

在 mail 中,我们可以把看过的信存起来, 其储存方式有 3 种(1) 存入 mail 程式内定之信箱 (mailbox) (2) 存成一般的档案(3) 一个 folder, 其实这三者在 UNIX 底下皆为一般的档案,只是对 mail 程式而言有不同的意义,而这三者的储存规则皆是用(APPEND) 的方式,因此你可以将你的信加以分类,如某某人寄来的信摆在某个档,另外一个人寄来的信,存到另一个档,或者通通不管,将所有信件丢入 mailbox 里面去,而你也可以用 folder 的方式来储存信件,所谓一个 folder 其实也是一个 text 档,你可以把它 cat出来看只不过它在储存时,会把 folder 档存放在有一个叫作 folder directory 的目录下, 亦即所有的 folder 档都存在 folder directory 里面,这个 directory 可以在" ~/.mailrc "内设定其路径,使用 folder 的好处是 : 你可以不必每次都键入一长串的档案路径名,你只要键入 folder name,你的信就自动存在你所指定的folder directory 内的 folder 档中。

10 一般信件的储存

要将信件储存到档案中,请使用下列指令
& s [letter-number] [filename]
其中 letter-number 是指定所要被储存的信件编而 filename是欲储存的档名,这二者皆可省略,当省略 letter-number 时,则以有'>'符号,表示目前动作的信件来储存,当 filename 省略时,则内定储存至根目录 ~/mbox 的信箱内。例如:
& s 3 batman
把第 3 封信存入一个叫 batman 的档中,(如果 batman 档本不存在,则 mail 程式会 creat 它,若已存在,则把3封信的内容附加至
原 batman 档的档尾)
& s
把目前作用的信件存入 ~/mbox 档中。
& s 4
把第4封信存入 ~/mbox档中。

11 把信存入卷宗中 (folder) (未能解决)

   11-1 folder directory 的设定
欲使用此方式来储存信件,必须先指定 folder 是要存放在何处 (即决定卷宗目录, folder directory 的 path), 欲建立folder directory ,有二个步骤:首先创建一个目录在你的 Home directory ,例如你要的folder directory 叫做 letters,便可如下
ottocho@i7:~$ mkdir ~/letters (建立 letters 子目录)
再来:使用 vi 来 edit ~/.mailrc 档案,以便设定 folder directory, 修改 "set folder" 这一栏的值,使成为:
set folder = letters
如此便完成了 folder directory 的设定
   11-2 把信存入 folder
现在我们可以启用 mail,把信件存於 folder 与存入一般档案的指令都一样只不过 filename 部份不大一样,只需在 filename 前加上一个加号'+'即可,让 mail 程式辨别这是要存入 folder去的(此时的 filename 即为 folder name) 还是存成一般的档案。
例如:
& s 3 + lin

& s + robin
便会分别存入
~/letters/lin
~/letters/robin
这二个 folder 内

12 信件的删除与救回

要删除一封信,则在 mail 的提示符号下,使用命令
& d〔letter-number〕
例如,要删除第二封信,可用如下的方式
& d 2
若欲删除第一封到第三封信,则可下如下的命令
& d 1-3
若要杀掉全部的信,则可以使用
& d *
以上删除的动作只有在你选择 q(quit)命令真正退出之後才真正删除,在尚未退出之前,你都可以将刚作过的 delete 作用取消。要取消 delete 可用'U'命令 (undelete) ,如:
& u〔letter-number〕
其使用方法与 d 相同,例如
& u *
可救回刚才全部的信件

13 退出 mail

要退出 mail 的命令模式,可打入'x'或'q',x 是指 exit 而 q是指 quit ,两者的差别在於 x 完全不更动 mail 的任何状态,而q 则使 mail 的状态改变 (如 deldete 信後,必须用 q 退回,才真的删除掉。例如:
& x

& q
皆可回到 UNIX 的 shell

14 信件的列印 (管道)

在 mail 程式的提示符号下,我们可以将信件的内容转向给别的程式处理,其形式为:
|[letter-number] prog-name
其中 prog-name 为欲处理的程式名,letter-number 与前述的用法相同,例如我们可将信件 pipe 到印表机来列印信件
&| 2 1pr
或 pipe 给别的程式如 wc
&| wc

15 在 mail 内使用 shell 命令

我们可以在 mail 的提示符号内,执行 shell 的命令,例如
&! ls (ls)

&! csh
便可暂时离开 mail 程式,打入 exit 又回到 mail 程式内。

16 其他 mail 的命令


在 mail 中,还有许多的命令,在此简单的介绍其用法。
1. cd [目录名] 可在 mail 内改变工作目录,若不指定目录名,则回到根目录。
2. e [letter-number] 编辑某一信的内容,使用的 editor 为 ex
3. f [letter-number] 显示信件从何而来。
4. h       列出所有的信件资讯
5. m EMAIL-ADDRESS   在命令模式内寄信。
6. n    显示下一封信
7. p [letter-nuber] 显示信件内容
8. pre [letter-number]保留指定的信件在系统的 incoming mialbox,这在当你设定 mail 在读过或储存信件後,自动将信件删除时,使用此命令可使自动删除的功能不作用。
9. r [letter-num] 回信  
10.R [letter-num] 跟上面相同, 只是如果当初是同时寄给很多的人话,(在Cc: 内指定)用 R 回信,亦可将信回给这一些人,这在作 group的讨论时,十分方便。
11.v [letter-num] 用 vi 来编辑信件
12.w [letter-num]file 只存信件内容到一个档案去。
13.z [-] 显示下一页〔前一页〕的信件标题,这在当你查看 folder 或~/mbox 时很有用,因为信件数量太多,你可以用此命令显示其他的信件标题。

17 mail 的写作技巧

我们在这一节来讨论在 mail 当编辑信件时,如何插入另一封信内容,或另一个外部档案,以及其他一系列常用的 ~ 指令。
   17-1 mail 的编辑命令格式
   所有在 mail 的编辑模式时,在行首键入 ~ ,(其中表示编辑的命令),如欲插入信件可用 ~m,而欲插入外部档 案可用 ~r 。另外其他还有指令如下:( '~' 念作 tilde),键入~? 可得此 help
~?
-------------------- ~ ESCAPES ----------------------------
~~ Quote a single tilde
~a,~A Autograph (insert 'sign' variable)
~b users Add users to Bcc list
~c users Add users to Cc list
~d Read in dead.letter file
~e Edit the message buffer
~m messages Read in messages, right-shifted by a tab
~f messages Read in messages, do not right-shift
~h Prompt for To list, Subject and Cc list
~p Print the message buffer
~q,~Q Quit, save letter in $HOME/dead.letter
~x Quit, do not save letter
~r file Read a file into the message buffer
~s subject Set subject
~t users Add users to To list
~v Invoke display editor on message
~w file Write message onto file
~. End of input
~? Print this message
~!command Run a shell command
~|command Pipe the message through the command
~:command Execute regular Mail command
-----------------------------------------------------------
   17-2 插入信件
   你经常有机会在回信时,必须引述对方所说的话,这时你可以将对方的信件加入你的信件内容,其命令如下(在新的一行首键入)
~m [letter-number]
(当在 reply 时,若 letter-number 不设,只设 ~m ,则会插入目前正在 reply 的信件内容)
例如:
~m 2
可插入第 2 封信之内容,在插入之後, mail 会显示下列讯息
 Interpolating:2
(continue)
这时第二封信已插入了编辑区的缓冲区内,同时 mail 提示你继续键入信件随後的内容,注意 : 因为信件是插入缓冲区内,故你目前并看不到,我们可以打入 ~p 命令来显示目前整个编辑缓冲区的内容。最後记得打逗号 '.' ,来结束信件的编辑在你的终端机前.
   17-3 插入外部档案
如果你不善於使用 vi,在写信时,可能会觉得十分不方便,一个解决的方法就是利用这边介绍的方法,先在你的 PC 上,用 PE2或你常用的编辑器把信件内容打好,然後使用 ftp 把信件内容传上工作站来,存成一个档,然後在编辑信件内容时,把该档叫进来,当作信件内容寄出去。
欲使用上述的功能,请在写信时,键入下列的命令
~r file-name
例如:假设由 PC 传上来的档其档名叫 text,则可用下面的命令来插入
~r text
   17-4 利用转向来把档案寄出
在上面的方法中,使用者尚须进入 mail 程式,在写信时来下命令,在这里介绍另一个更简单的方式,就是利用转向的方式把档案内容作为信件内容寄出,其命令格式如下:
mail -s "This is the Subject" user@where
(其中 filename 即是用 ftp 传进来的文章档名或用 vi 编辑的档名)
例如在本工作站,当 user 新申请帐号时,系统管理者都会寄送一封欢迎的信给新 user 便是利用如下的方式来完成mail -s "Welcome" new-user
其中信件内容是存於 welcome 档中,而信件的 subject 为 Welcome
   17-5 用 Vi 来编辑信件
在写信时,由於 mail 程式内定的编辑器是 ex,为一个 lineeditor ,比 vi 还难用,因此你可以在编辑模式内叫用 vi 来写信,其步骤如下:
1. 在新的一行之行首键入:
  ~v
2. 如此便可进入 vi,使用 vi 的命令来编辑信件的内容。
3. 信件写完後,使用命令:
  :wq
or
:x
来退出 vi
4. 此时又回到 ex 的编辑状态下,你可继续写信,或按逗号结束编辑。
   17-6 取得其他的编辑命令的指引
在 ex 的编辑状态下,你可以在行首打入 ~? 来列出目前可用的编辑命令,这些命令与在 mail 程式内打问号 '?' 列出来的是不同的(? 的命令是 mail 程式在命令模式所接收的命令,不是编辑命令)。
   17-7 修改收信人,修改标题,使用签名
1. 修改收信人:
此功能对 post master 十分有用,因为当使用信件寄送有误时,其信件的 sender 部份都会覆寄一份给 post-master,这是mail程式内定的一位 user,专门负责 mail 的事宜,通常此人就是root,当 root 收到这些错误讯息的信时,其寄件人是 MailerDaemon,即是mail 程式本身,而不是产生错误讯息的 user,使用~h 命令可以在回信时,把 To : 这一栏位的内容的 Mailer-Daemon 改成产生错误讯息的 user name
2. 修改标题:
在回信时,内定的 Subject 内容为原信之 Subject 加上Re:字串为前导,你可以用 ~s 命令来修改(用 ~h 也可以)。
3. 使用签名:
在信尾要写上你的名字时,可以用 ~a 代替,其字串是定义於~/.mailrc 档内。  

18 读取旧的信件

我们在前面有介绍过信件的储存,使用者可以把信储存到一个普通的档,或是一个 folder 内,在这里我们介绍一下,如何把旧的信件从一个档案或 folder 叫出来。
   18-1 读取档案中的信件
通常使用者使用 s 命令,不加任何参数时来储存信件时,信件都是存入 ~/mbox 档内,这时你可以在 shell 下用下列命令前存起来的信,重新叫出来看。
ottocho@i7:~$  mail -f ~/mbox
or ottocho@i7:~$  mail -f 亦可。
(在此 '~'表示 Home directory,档名叫 mbox)
   18-2 读取 folder 内的信件
用 s + folder-name 存起来的信,同样可用 -f 参数把 folder内的信叫出来看。
mail% mail -f + folder-name
mail 程式便自动到 folder directory 去,把指定的档案(folder)当作 incoming mailbox 一样读进来,好似你收到这些信一般。

19 关於 folder 的命令

在上面读 folder 的方式是在 shell下指定的,我们也可以在mail 程式内来选定要看的 folder,首先介绍一个新的命令"folders",此命令可用来列出有多少 folder 存於 folder directory 内 (相等於 ls),在此共有 9 个 folder.我们可用如下的命令,使该 folder 变成 incoming mail box
folder + foldername
若要回到 incoming mail box 则可键入
folder %

20 Cc: 的补充说明

许多 use 对信尾的 Cc: 提示常常感到困惑,在此我们对此做个说明。
Cc (Carbon Copy 复写功能) 的主要用途是在信尾编辑结束後,询问使用者此信是否要顺便寄送给其他人 (可以包括自己),如果是的话,就把一串收信人的 E-MAIL Address 彼此以逗号 ','隔开,在此输入,否则就直接按 Enter 即可,例如:
Cc: user1@where1,user2@where2
或  
Cc:
另外关於 Cc 还有一些细部的说明:
1. 寄信时,可将欲寄的内容拷背一份存成档案或 folder,其方法为
在 Cc: 提示下,键入档案的全路径名或 folder-name ,如 Cc :~/text.doc ('~' 表示 Home directory)

Cc: +text.folder
注意: 若不是全路径名,则此时 mail 会把档名当作是欲寄送的收信人姓名,而寄出去,然後被退回。
2. 欲寄给一群人时,可在 mail 的提示符号下指定,如:
mail% mail user1@where1,user2@where2,user3@where3
亦可在 Cc 中指定其串列,各 user 之间须以逗号 ','分开,但两者的差别为收信人使用 R 命令(不是r) 时,只会 reply 给在 Cc中的收信人串列,而不会回信给在 shell 命令中指定的其他收件人。
3. Bcc: 与 Cc: 的差别
  上面提到 Cc: 是记录这一封同时也寄送给那些人,如果寄信人不想让收信人知道他所收到的信,有那些人也收到的话,可以使用 Bcc (Blind Carbon Copy) 来设定收件人串列,这可在编辑信件时,加入~h 命令来修改。亦即 mail 程式会把 Cc 的讯息,连同信件内容寄出 (而不会把 Bcc: 的讯息寄出)。

21 寄信给一群人 (group)

欲寄信给一群人时,除了上面 Cc 的补充说明方法外,亦可由下列方式寄出。
首先用 vi 来编辑 ~/.mailrc 档案,然後加入下面这句话。
alias  user1@where1,user2@where2,user3@where3
例如:
alias ct lin@dec1 jou@mail yang@dec6 rlwu@mail
(其中 ct 代表 lin@dec1 jou@mail yang@dec6 rlwu@mail 的别名)
以後如用 mail ct 即代表寄给 ct 所包括的那一群人。
若在 Cc: 中用 ct 即副本寄给 ct 所包括的那一群人。
相对的 Bcc: 亦可用别名来寄给一群人。


---------------------------------------------------------------------
[FAQ]


问 : 若有两个以上不同的 Email 帐号, 请问如何能做到, 不论在那一个帐号 login 均能知道或看到有新的 mail. (用 .forward
档不行, 因为那样 login 原来那边就看不到 mail 了)
答 : 用 ".forward"
man sendmail ( or man -k forward ...)

问 : mail全是一堆乱码 这是什麽现象造成的?
答 : 原因:
1) 对方的系统不能send 8-bit 的mail, 所以你会收到乱码。没办法还原, 要求对方重send吧!
2) 对方可能是用pine 来send, 而pine 会有它的编码方法,可以用metamail 来解读。
3) 其他原因

问 : 在 VMS 中的 mail有一个将 e-mail保留, 并且可以像子目录那样加以分类的功能, 但是我在 unix中似乎没有找到类似的东西 请问 unix有没有提供这种功能?
答 : 若用 elm 的话,可以把 mail 存到不同的 folder(file) 中,然後在改变你的 folder 就可达到你所说的功能.

问 : 我的 mbox 有一大堆信, 在 unix 下用 more 可以看到所有的信, 可是无法编辑
答 : 其实在 unix 中, 用一般 editor 就可以编辑 mbox, 不过,elm 提供一个方便的功能, 用 :
elm -f mbox
elm 会帮你编排好以前你所有的信件, 让你一一编辑。

问 : 如何在自己的信上加上签名档, 就像在 tin 上一样 ?
答 : 如果你使用的是 elm, 在根目录下的 .elm/elmrc 中加入
remotesignature=your remote signature file name
localsignature=your local signature file name
注意你的档案路径是否正确
另外 elm 的 header 可以在你写完信存档之後, 他会问你要寄
或是要干嘛的, 你按 "h" 就可以进入 header 的选项了。
不过, 为了简单起见,可以在建立 $HOME/.elm/elmhearders
============内容如下============
Return-Receipt-To:your e-mail address
=============================

问 : 有没有办法将 e-mail 设成当有人寄信给我, 我的机器可以自动回一封信给寄信者有点类似 elmheader 的功能。
答 : 试试 "vacation" 这个工具

问 : 从哪可取得可show中文标头的elm或者在程式那个地方须修改 ?
答 : 在 .login or .cshrc 中加上如下两行 :
setenv LC_CTYPE iso_8859_1
stty pass8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值