UNIX mail 線上教材

UNIX 系統種有幾種不同的基本 e-mail 工具軟體,我們在此介紹一種工具, 稱之為 mail。 這個基本的 MUA 只能處理未經編碼的純文字信件 (看第 6 講), 而且很難處理附件,所以事實上已經很少人使用了。 我們將此教材留在這裡,給有興趣的人參考。 或許也算是個歷史文件吧。

這個非常基本的 e-mail 工具,只能收發純文字信件。 如果經過 uuencode,也可以傳送非文字檔案,但是近年來因為其他工具的發展, 已經很少需要使用 uuencode 了,故從略。 以下我們只講最基本的 mail 操作。

[ 寄信 ]‧[ 設立別名或地址簿 ]‧ [ 讀信 ]‧[ 郵件夾 ]‧ [ mail 設定 ]

寄信

如果要寄出一封信,下指令

mail RECVER
其中 RECVER 代表一個 e-mail 地址。 如果同時要寄給許多人,也可以用指令
mail RECVER1 RECVER2 RECVER3 ...
然後就會看到如下的提示號
Subject:
在此輸入信件的主題。只能有一行,而且最好只用 ASCII 字符。 寫好了之後按 Enter。

接著,游標就停留在下一列的第一格,沒有提示號。 這時候,請輸入信件內容。 注意,這個編輯環境的功能非常少, 基本上只能在同一列中以 Backspace 或 Delete 鍵修改文字, 一旦按了 Enter 進入下一列之後,就不能返回修改前面的文字了。 信件寫完之後,按 Enter 使游標在第一格,然後按 Ctrl+D 寄出並結束 mail 程式。

如果已經準備好一個純文字檔案 a.txt 而打算將它當做信件內容,寄給某人, 則可以下指令

mail -s "SUBJECT" RECVER < a.txt
其中 SUBJECT 是信件主題。 注意,這並不等於是夾檔案,a.txt 是信件內容,並非附件。

設立別名或地址簿

此處需要用到編輯器,如果還不會,可以以後再學。

在您的帳號根目錄裡面,編輯一個名叫 .mailrc 的檔案。 如果在檔案內輸入一列,如下:

alias chiu boyuan@cycs02.ice.cycu.edu.tw
則 chiu 就是 boyuan@cycs02.ice.cycu.edu.tw 這一長串難記的郵件地址之別名。 以後,您可以用
mail chiu
來代替
mail boyuan@cycs02.ice.cycu.edu.tw

一個別名也可以代表許多個郵件地址,而那些地址本身還可以是其他別名。 例如

alias chiu boyuan@cycs02.ice.cycu.edu.tw
alias luofz gefjulo@saturn.yzu.edu.tw
alias teachers chiu chern@math.ntu.edu.tw luofz
則 teachers 這個別名就代表了三個郵件地址,說 mail teachers 就會同時寄一封信給這三位收信人。

以下所說的,牽涉到資料夾和檔案路徑的部分,您可以在第四講中學習。 牽涉到 mail 程式的設定部分,以中大數學系的設定為準。 其他地方的 UNIX 系統未必如此設定。 如果您想要將您的 UNIX 系統設定得和此處所說的一樣, 請參考 [mail 設定] 這一節。

讀信

下指令

mail
就會打開您的收信夾 (INBOX),展開此夾內的郵件目錄,如下
 O  1 Shann Wei-Chang    Tue Aug 22 09:44   14/379   test 2
 U  2 Shann Wei-Chang    Thu Oct 19 16:09   14/370   test
 S  3 wingip             Tue Oct  3 10:39   33/1247  Art and Science
 R  4 Mr zhang_yi`huang' Tue Oct 24 16:19   13/389   hi everybody
>N  5 Tse-Liang Yeh      Wed Oct 25 15:51   46/2170  環安的事
?
以上 ? 是 mail 環境的提示號,以上的是郵件目錄。 從郵件目錄每一列的最左邊看起,如果有一個 > 符號,代表「正在處理的郵件」。 第二欄表示郵件的狀態, 第三欄是郵件編號。第四欄是寄信人的名字, 如果信是從 UNIX 系統寄來的, 則它是由 UNIX 帳號資料表中 GECOS 那一欄資料決定的。 接下來是收到信的日期和時間,再來的 14/379 表示這封信一共有 14 列、 379 拜的內容。這包括郵件之檔頭,所以郵件之內容沒有這麼多。 最後,就是郵件的主題了。

mail 環境全是文字操作,也就是說必須在 ? 提示號後面下指令。 搶您讀信的時候,「目前資料夾」是您的帳號根目錄裡面的 Mail 資料夾。 所有您讀過的信,除非刪除或是另存其他郵件夾,全部都被保留在收信夾內。 這樣雖然方便,但是也會使得您的收信夾越來越大。 所以,請隨時整理收信夾 (刪除舊信或是另存其他郵件夾), 否則系統管理者會進場干預。

以下是 mail 環境內的基本指令:
z mail 一次最多只能呈現 20 份郵件目錄,用 z 翻下一頁,用 z- 翻上一頁
h# 例如 h25 將郵件目錄翻到含有 25 號郵件的那一頁目錄。 如果沒有輸入號碼,顯示含有「正在處理的郵件」的那一頁目錄
# 例如 25 就是展讀第 25 號郵件。如果沒有輸入號碼就只按 Enter, 便展讀「正在處理的郵件」。如果郵件的內容超過一頁 (25 列), 就會進入閱讀環境:按 Space 翻下一頁,b 翻上一頁,q 離開。 展讀的郵件包括一部分的檔頭部分,#只是郵件的主題和內容而已
d# 例如 d25 就是刪除第 25 號郵件。如果沒有輸入號碼就是刪除「正在處理的郵件」。 然後 mail 會自動展讀下一號的郵件
u# 如果剛才刪除一份郵件,在沒有結束 mail 環境之前,還可以恢復。 例如 u25 就是恢復第 25 號郵件
r# 例如 r25 就是回覆 (reply) 第 25 號郵件。如果沒有輸入號碼, 就是回覆「正在處理的郵件」。mail 不會自動引用原文。
s# FILE 例如 s25 mate 就是將第 25 號郵件儲存到名為 mate 的郵件夾內。 如果 mate 不存在,會自動新建。 如果沒有輸入號碼,則儲存「正在處理的郵件」。 如果沒有指定郵件夾的名稱,則儲存到 mbox 郵件夾內。
q 結束 mail,並更新郵夾內的郵件目錄。 例如讀過而沒有刪除、也沒有儲存的郵件,下次打開郵件夾時, 將會出現 O 記號。刪除的郵件,此後就真的消失了。
x 結束 mail,但是不更新郵夾內的郵件目錄。

郵件夾

所謂郵件夾 (mailbox) 只是個集存郵件的檔案, 在 UNIX 系統內,它是一個普通純文字檔案,並非資料夾。 每個用戶有一個,而且只有一個,收信夾 (INBOX mailbox)。 這個收信夾不在個人的帳號根目錄之下,而是在一個公共使用的資料夾內。 通常是 /var/spool/mail 或是 /var/mail。 而各用戶的收信夾檔案名,就是他∕她的帳號名。

所有新寄來的 e-mail,都集存在收信夾裡面。 為了用戶的方便,除非是經過 mail 程式明白地刪除或儲存的郵件, 都被保存在收信夾裡面。 但是,如此一來,有些用戶的收信夾可能會佔用很大的磁碟空間。 一個 UNIX 系統的所有用戶,都有一個收信夾在同一個磁碟上。 只要這個磁碟滿了,則所有用戶都無法接收新郵件,甚至可能遺失整個收信夾。 可以想像這是個嚴重的情況。 所以,請大家應該盡量在讀信之後,刪除不必要的郵件, 或是將必要的郵件轉存自己的郵件夾。

當我們用 mail 讀信的時候,自動打開的是收信夾。 當我們儲存郵件到郵件夾的時候,那個郵件夾其實是 HOME/Mail 資料夾內的一個檔案, 其中 HOME 代表用戶的帳號根目錄。 如果想要閱讀自己的郵件夾內的信件,則可以要求 mail 打開該對應檔案。

  1. 一個方法是,進入存放郵件夾的資料夾。如果該郵件夾的名字是 MBOX,則說
    mail -f MBOX
    就會進入 mail 的讀信環境。所有的操作,都和 [讀信] 那一節所說的一樣。
  2. 或者,如果 MBOX 是放在正確的郵件資料夾內 (也就是帳號根目錄內的 Mail 資料夾),就可以說
    mail -f +MBOX
    就會進入 mail 的讀信環境。所有的操作,也都和 [讀信] 那一節所說的一樣。

除了收信夾之外,還有兩個特殊的郵件夾,應該都是位於郵件資料夾內的檔案。 一個叫做 mbox,這是當您說要儲存一個郵件,但是卻沒有指名要存到哪裡的時候, mail 自動幫您儲存的地方。 另一個叫做 sentout,這是當您寄信出去的時候,mail 自動幫您留的副本。 也就是說,所有您寄出去的信,都可以在 sentout 這個郵件夾內找到。

所有的郵件夾都可能越來越大,除了可能浪費磁碟空間之外, 也會使得打開郵件夾的速度越來越慢。 您還是需要適當地管理這些郵件夾,不要讓它們變得像恐龍一樣又慢又大。

所有郵件夾都是純文字檔案。所以您可以用任何一個編輯器來閱讀或修改它。 它的格式非常單純。只要有一列文字,其第一個字是

From
就代表是一份郵件的開始。 這也就說明了,為什麼當您在寫信的時候,如果有一列的第一個字是 From, 則收信的人會看到
>From
這是寄信程式自動為您添上去的,以免混淆了郵件夾的格式。

mail 設定

中大數學系的 UNIX 系統已經是如此設定,所以用戶不必自行修改。

首先,您要知道自己使用的 mail 到底是哪個檔案。用

which mail
看看。最好是 /bin/mailx 或 /usr/bin/mailx,其次是 /usr/ucb/mail 或 /usr/ucb/Mail。如果不是這些,請使用文字操作介面的功能, 重新設定 PATH 或者是利用 alias,使得 mail 指令所執行的檔案, 是 /bin/mailx。

當 mail 啟動的時候,會先讀取一個系統設定檔,名叫 mailx.rc 通常放在 /etc/mail 裡面。 這個檔案記錄著 mail 的基本設定規格, 它是個人人可讀的純文字檔,您可以閱讀參考。 但是只有系統管理者才能修改這個檔案,一般用戶動不得。 我們假設 mailx.rc 這個檔案維持原樣,而且大家的 mailx.rc 檔案都一樣。

當 mail 讀過了 mailx.rc 檔案,就會在您的帳號根目錄中, 尋找一個名叫 .mailrc 的隱藏檔案。 如果存在,mail 就讀它,獲得進一步的設定規格。

如果您是系統管理者,則可以修改 mailx.rc, 否則可以修改自己的 .mailrc。以下只是建議,它們是中大數學系對於 mail 的設定。

set ask noaskcc crt=22 autoprint hold
set MBOX=$HOME/Mail/mbox
set indentprefix="> "
set folder=Mail
set record=$HOME/Mail/sentout
ignore Received Message-Id Resent-Message-Id Status Mail-From Return-Path Via
if r
    cd $HOME/Mail
endif
此外,每個用戶的帳號根目錄內,要有一個 Mail 資料夾, 而且其權限模式應該是 rwx------。

此外,要設定三個系統參數 PAGER、LESS 和 LESSCHARSET,其值分別是

setenv PAGER less
setenv LESS "-fCe"
setenv LESSCHARSET latin1

[ 寄信 ]‧[ 設立別名或地址簿 ]‧ [ 讀信 ]‧[ 郵件夾 ]‧ [ mail 設定 ]

單維彰 (2000/10/27) ---