標  題: 全方位電子郵件服務 1of3

Copyright Notice: 本文章著作權人為曾瑞源, Internet BBS、 Gopher
Server、 FTP server 及 WWW server 可以收取存放本文作為檢索, 無須
作者額外許可, 其中 WWW server 並被允取做資料格式轉換 (文章本身仍
不可修改)。 以上以外的電子或非電子媒體出版, 須有作者的授權始得以
為之。 本著作權聲明是本著作整體之一部份, 任何修改本文的動作需得
到作者授權 (Netnews/BBS 上討論則無此顧慮)。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        全方位電子郵件服務   Part 1of3
                               曾瑞源 yuan@UUserv.Net.tw
                            An Independent Network Consultant


    電子信件已經作為客戶聯絡、技術支援、 遠程教育 (成人教育)、 親
友聯繫甚至交易工具等等, 已經相當普遍, 不過筆者總感覺仍有很多公司不
得其門而入, 因此, 筆者想辦法把肚子裡淺陋的經驗搬出來, 從全方位的角
度看 Internet E-Mail 的架構規劃及運作原理等等, 甚至實務層面的 Mail
Server 安裝設定細節, 這些筆者計劃一一的提及, 希望這可以對仍在
Internet 門外的公司、企業有些幫助。

    以下的文章中, 筆者計劃分三期介紹, 本文主要是輪廓性的介紹關於
Internet 電子信件運作之原理以其他細節, 我也將提供具體的系統規劃建
議。 之後的兩期筆者將介紹 Sendmail 及 Smail, 這兩部份則完全都是由
Unix 環境來講。

□  關於 Mail 系統
    由於以下文章中, 我們將看到「Mail 系統」、「Mail 系統主機」、 及
「Mail Server」 等等 字眼, 這裡有必要先做一些說明。

    本文所提到的「Mail 系統」之定義, 是指一部能夠接收、投遞、 轉接
(Relay 或 Gateway) 並提供使用者讀取 Mail 的一部網路電腦主機系統。


□  Mail 軟體

    對Unix 環境而言, 構成一部 Mail 系統的主要軟體, 是 Sendmail 及
Smail等等, 這些都可以由 Internet 免費取得。 Sendmail/Smail 所提供
的服務, 除了最基本的信件遞送, 還有信件轉遞處理、 積存 (待送) 信件
處理、 不同傳輸工具判斷及退信處理等等, 這些是 Mail Server系統最基
本的工作。 至於這裡提到的傳輸工具, Smail及 Sendmail 都內建 SMTP 支
援, 同時也可以搭配外部 UUCP 作為替代傳輸工具。 另外, 目前最新版的
Smail 及 Sendmail 也都支援 BIND。

    至於 Unix 環境的 Mail 使用者界面軟體 (MUA), 如今也存在有像 ELM
及 Pine 等等非常具有親和力的軟體, 這兩個軟體的使用場合, 必須先進入
(log in) Unix 系統。 另外,  對 Unix 環境陌生的使用者來說, 系統規劃
者可以設計不同的讀信方式作為選擇, 支援 POP 協定的信件處理軟體就是
用在這場合。 POP Server軟體在 Unix 機器執行, DOS、 Windows 或 Mac
端則安裝支援 POP 的讀信軟體, 這樣就可以成功把 Mail 應用整合在辦公
室環境下。

    當然也許也存在有非 Unix 的解決方案, 假如您找得到專家的話, 也不
妨一試, 但是請先留意, 畢竟 Internet 上的機器主要仍以 Unix 為主, 您
跟大部分人使用相同的環境的話, 出問題時, 要取得技術支援也比較容易。

    以下我們從網路實體帶進 Mail 的話題來, 希望這可以進一步幫助讀者
朋友產生更具體的觀念。


□ Mail Service 網路架構規劃

   前面介紹了軟體, 這裡我們則從網路硬體的角度來看 Mail規劃。 以下
建議二種架構, Unix Host 定位在 Mail server, 使用者的工作站可以為
DOS、 Windows 或 Mac 機器。

(一) LAN 架構

                                   (I) Ethernet To Internet
                                            +--->
                                            |
   +---------+---------+---------+------------|---+
   |            |              |        |         ┌───┐ (RS-232C界面)
┌──┐  ┌──┐  ┌──┐  ┌──┐         │ UNIX =--------->
│    │  │       │  │         │  │    │         │ Host │  SLIP/PPP
└──┘  └──┘  └──┘  └──┘         └───┘       To
Windows     DOS       Mac     Windows                    Internet
  PC           PC             PC       PC              (II)


    架構 (一) 是典型辦公室區域網路的情況, Unix 機器對外連線
Internet 的方式可以用 (II) 串列通訊 (比方PPP 或SLIP), 也可以用
(I) Ethernet 連線, 但這些不是本文的重點, 我們主要是想知道, 在
這樣架構下 Server及 Client 端各自所需要的軟體為何。

    以下建議兩種情況, A 直接在 Unix 環境應用, B 則是 DOS 或 Windows
環境。

A. Telnet 終端連線進入 Unix 主機, 利用 Unix 的Mail界面軟體讀信或寄信。

   Unix Server 軟體需求:
      Telnet server (in.telnetd)
      SMTP (sendmail)
      MUA (mail、elm 或 pine)

   Client 端軟體需求:
      DOS -- packet driver + NCSA Telnet
      Win -- packaet driver + Winsock Stack + Winsock Telnet client


B. Client 端以獨立的 Mail 軟體讀信, 該軟體有獨自的 MUA、 支援 POP收
   信 及 SMTP 送信。

   Unix Server 軟體需求:
      POP server (pop3d)
      SMTP (sendmail)

   Client 端軟體需求:
      DOS -- packet driver + 支援POP/SMTP的 Mail (Success 或 Pegasus)
      Win -- packaet driver + Winsock Stack + Winsock mail client


(二) DIALUP 撥接架構


                   +-------------->
                   |          To Internet
               ┌─┴─┐
           Unix │        │
           Host │        │-------- 內部 Ethernet LAN
               └───┘
                |  |       |
                |  |       |  Modem
                |  |       | 撥接連線
       +---------+   |       |
       |        +---+       +--+---------+
       |        |          |            |
    ┌──┐  ┌──┐       ┌──┐  ┌──┐
    │         │  │    │       │    │  │       │
    └──┘  └──┘       └──┘  └──┘
    Windows       DOS         Mac         Windows
      PC       PC         PC           PC


     架構 (二) 情形下, 我建議三種解決方案。

  A. Dialup 終端連線進入 Unix Host, 利用 Unix 的Mail軟體 (pine、elm
     及 mail等等) 讀信。

   Unix Server 軟體需求:
      Modem server (getty, 或者用硬體 Terminal Server)
      SMTP (sendmail)
      MUA (mail、elm 或 pine)

   Client 端軟體需求:
      DOS -- 終端機模擬軟體 (MS-Kermit)
      Win -- 終端機模擬軟體 (Terminal)

  B. Client 以 PPP/SLIP dialup 連線, 之後 client 端 Telnet 進 Unix
     Server端, 之後以 Server 端的Mail軟體讀信。

     Unix Server 軟體需求:
      Modem server (getty)
      PPP/SLIP server (pppd/dip)
      Telnet server (in.telnetd)
      SMTP (sendmail)
      MUA (mail、elm 或 pine)

   Client 端軟體需求:
      DOS -- PPP 或 SLIP driver + NCSA Telnet
      Win -- PPP 或 SLIP driver + Winsock Stack + Winsock Telnet client


  C. Client 以 PPP/SLIP dialup 連線, 之後 client 端以獨立的 Mail 軟
     體讀信, 該軟體有獨立的讀信軟體並支援 POP 收信 及 SMTP 送信。

   Unix Server 軟體需求:
      Modem server (getty]
      PPP/SLIP server (pppd、dip)
      POP server (in.pop3d)
      SMTP (sendmail)

   Client 端軟體需求:
      DOS -- PPP 或 SLIP driver + NCSA Telnet
      Win -- PPP 或 SLIP driver + Winsock Stack + Winsock Telnet client


   以上介紹忽略了一個與 POP 非常類似的架構 IMAP, 此處讀者在觀念上
可以直接把 IMAP 想成 POP, 至於細節上, 筆者後面會專門提到 IMAP。


§ 以上提到的相關軟體

Winsock Stack:       WinKing、 WinSpan、 Trumpet Winsock 2.0B (都是商業
              軟體, Trumpet Winsock 2.0B 是 Shareware)
Winsock Mail:       Euroda 144 (Freeware)、 Acacia Mail (Commercial)
Winsock Telnet: Ewan 104, Qqtw 3986 (Freeware)
Packat Driver: 網路卡驅動程式


§ 相關軟體取得方法 (以 FTP取得)

Trumpet Winsock 2.0B tpts1.seed.net.tw /UPLOAD/WINKING/Winsock_AP/twsk20b.zip
EUDORA 144 tpts1.seed.net.tw /UPLOAD/WINKING/Winsock_AP/eudor144.exe
WinKing DEMO tpts1.seed.net.tw /UPLOAD/WINKING/wkdemo.exe
SUCCESS 2.0 ftp.iii.org.tw:/SEEDNET/success/all
NCSA Telnet moers2.edu.tw /chinese-pub/ncsa/nctu//nctutel.zip
PD: check out the discette that comes with your Ethernet card.
Linux (A version of Unix, free): NCTUCCCA.edu.tw:/UNIX/linux/Slackware

□ 關於 MUA -- Mail User Agent

     前面我們已經大致知道 Mail 的應用軟體主要有傳輸部份以及讀取界面
部份, 以 Unix 環境來說, 傳輸部份 (指 SMTP) 內建在 Sendmail (或 Smail)
裡面, 而 讀取部份就是我們這節所要介紹的。

     MUA -- 使用者界面軟體, mail、 elm、 pine 軟體屬之, 這些是 Unix
MUA, 在 DOS環境而言, 可以在 Internet 免費取得的 MUA 有 Success 及 Pegasus,
Windows 則有 Euroda 及 Pegasus等等。


□ Unix 的 MUA

    九十年代的 Unix 環境其實已經存在有極具親和力的網路應用軟體, 尤
其是那些存在於 Internet 的免費軟體 (Freewares), 本文提到到 ELM 及
Pine 就是其中之二, 我建議系統管理者取得並安裝這兩個軟體。

ELM souorce code:

    ftp://NCTUCCCA.edu.tw/packages/mail/elm

Pine source code:
    ftp://NCTUCCCA.edu.tw/packages/mail/pine3.91.tar.gz

Pine 甚至有中文版:
    ftp://g834315.hung.ab.nthu.edu.tw (140.114.202.26)
       /pub/cpine3.91/CPine-3.91.tar.gz
    或者 (ftp://NCTUCCCA.edu.tw/UNIX/linux/collect/source/network)



□ MTA & SMTP

    當使用者完成寫信動作, MUA 把該信的內容交付給實際負責信件投遞的
軟體, 負責信件投遞這層面的軟體就是 MTA (Mail Transport Agent)。 以
上 MUA、MTA 這些 名詞其實一點也不重要, 比較重要的是對 Mail 的運作
的理解。

    SMTP (Simple Mail Transfer Protocol, RFC 821) 是規範 Internet
電子郵件遞送的標準 (另外 RFC 822 規範信件格式)。 SMTP 的投遞方式是
點對點 (End-to-end) 交談式傳送, 這傳送是即時的, 中間可以不經過第三
者轉遞。 不過由於 Internet 上的 Mail 主機系統橫跨相當多不同的網路,
因此存在所謂 Mail Gateway (或 Mail Relay)。

    以下我們就用一個圖表來呈現各層面 Mail軟體的關係。 從下圖中我們
可以看出, 最左邊及最右邊是檔案系統下的操作, 最左邊中使用者在檔案系
統下讀信或寫信 (MUA), 當有信件要外送時, 這工作都經由第二個方塊的
SMTP 程式負責執行。 這 SMTP 程式要收送信件時, 會直接 (透過網路) 與遠
端另外一部 Mail 系統的 SMTP 程式打交道, 信件內容在這時被拷貝一份到
收信端這邊,  除非對方 SMTP 通知其確實已經收到, 送信端端的 SMTP程式
不會把信件刪除, 這可以確保信件不會因為任何緣故而漏失 (比方傳送煞那
網路線路突然中斷)。


              [圖 1.1]

              +----------+                 +----------+
   +------+    |         |                 |             |
   | User |<-->|         |        SMTP          |             |
   +         +    |  Sender- |Commands/Replies| Receiver-|
   +------+    |   SMTP   |<-------------->|       SMTP  |    +------+
   | File |<-->|         |    and Mail    |             |<-->| File |
   |System|    |         |                 |             |    |System|
   +------+    +----------+                 +----------+    +------+


              Sender-SMTP                 Receiver-SMTP

                     Model for SMTP Use

              (本圖取自 RFC 821 文件)



□ POP (Post Office Protocol), POP3 over TCP/IP
    POP 可視為 off-line mail 處理協定, 不同於一般電話撥接終端機模擬
連線, POP 只適用在支援 TCP/IP 的網路。 由於系統管理人力的考量, 大部
份的公司或單位只規劃一部 Mail系統主機, 其他的工作站並不需要有獨立收
發信件的能力, 尤其是針對那些 DOS、Windows或 Mac的工作站來說, 這些工
作站的使用者可以透過 POP 協定來收取其個人在 Mail系統主機的信箱。 目前最
新版的 POP 協定是 POP v ersion 3, 我們一般就稱為 POP3。

    POP 跟其他 TCP/IP 網路軟體一樣, 同樣是以 Client-Server 型態存在
。系統管理者可以在原本 Mail 主機系統上加裝 POP server軟體, POP 軟體
對原本 Mail 系統的運作方式並沒有影響, POP 單純只提供信箱下載服務而已。
至於使用者機器上, 系統管理者可以幫忙裝設支援 POP 的讀信軟體, 我們稱
呼這部份為 POP client軟體。 由於 POP 只是個收信協定, 通常這些讀信軟
體還必須有 MTA 模組 (很多 Mail應用軟體已經把POP、MTA及 MUA都整合一
起, 所以一般使用者可以不需要知道這些細節)。 Internet 上有一些非常好
用且免費的軟體像是資策會的 Success (For DOS)及 Eudora144 (For Windows)
都支援 POP 取信 SMTP送信, 另外商業版像是 Acacia Mail (For Windows)
也用在這樣場合。

   更具體的說, 對於想透過 POP 取信的使用者來說, 系統管理者必須在
Unix 主機上為他 (或她) 設立一個帳號, 比方說開一個 yuan 帳號, 以後
寄給 yuan 的信件就放在 Mail主機的 /usr/spool/mail/yuan 檔案, 到此
為止都與 POP 無關。 yuan 一早上班時, 開機進入 Windows環境, 並且進
入 Eudora 軟體, Eudora 這時透過其內建 POP client 與 Unix 主機的 POP
server程式打交道 (Server會檢查 Client送過來的 login ID 及 password)
, 正常的話, 這時才把 Unix 端的 /usr/spool/mail/yuan 檔案下載到
Windows端, Unix 端的 /usr/spool/mail/yuan 於是被歸零, Eudora 這時
就可 以開始閱讀剛剛取得的信件。


   POP client 工作站的設定方式請自行參考各 Mail 軟體本身, 假如讀者
觀念還是無法貫通, 請反覆參考前面介紹的網路架構規劃, 應該不會很難。
至於 POP server這一端的安裝, 假設說把 POP server 程式安裝在
/usr/local/etc/in.popd, 這時在 /etc/services 及 /etc/inetd.conf 兩
個檔案可以參考以下設定, 之後重新啟動 inetd 程式即可。

## (in /etc/services)
pop-2              109/tcp                      # PostOffice V.2
pop-3              110/tcp                      # PostOffice V.3


## (in /etc/inetd.conf, 此設定指定 in.popd 由 inetd 啟動)
pop-2       stream       tcp       nowait       root /usr/local/etc/in.popd  pop2d
pop-3       stream       tcp       nowait       root /usr/local/etc/in.popd  pop3d
## 把以上這兩行加入 /etc/inetd.conf


§ POP server 取得方法

    對於可以上 Internet 的讀者來說, 可以依照以下方式取得 POP3 server
程式碼, 筆者提供兩套, 有興趣者選擇其中之一即可, 不過先註明一點: 筆者
不保證這軟體可以在所有版本的 Unix 成功編譯。 針對 Linux 的用戶 來說,
Slackware Linux 已經內 建有 /usr/sbin/in.pop3d server 程式, 所以無
須額外上網路拿。

ftp://NCTUCCCA.edu.tw/UNIX/linux/packages/Mail/qpopper2.1.3.tar.gz
ftp://NCTUCCCA.edu.tw/UNIX/linux/packages/Net-2/sources/popd/pop3d-1001.tar.z

    對於 Linux 用戶來說, Slackware Linux 系統已經內建有 POP server
程式 (/usr/sbin/in.pop3d 或 /usr/sbin/in.popd), 您只要確定 /etc/
services 及 /etc/inetd.conf 有打開, 就立刻可以使用。

    最後對 POP 協定細節有興趣者, 可以自行拿 RFC 文件來閱讀, POP3 在
RFC 的編號是 RFC 1725。


□  IMAP (Internet Message Access Protocol), IMAP over TCP/IP

    IMAP 是用在 TCP/IP 網路的一個信件擷取協定。 IMAP 與 POP 是非常
類似的東西, IMAP 同樣是以 Client-Server 架構運作, IMAP 跟 POP 一樣
都是取信協定, Mail 軟體必須另外搭配 SMTP 執行信件投遞。

   筆者要介紹 IMAP的理由, 主要受中央研究院計算機中心吳傑先生 (jye
@ccvax.sinica.edu.tw) 的一個觀點 「Pine 支援 IMAP, 而 Pine 到處都可
以用, 包括 DOS、 Windows、 Unix 及 VMS 等等」。 其實筆者平常讀寫信
件都是在 Unix 環境使用 Pine, 為此也特地在 DOS還應使用 Pine, 我發覺
DOS/Windows 環境的 PCPine 非常值得推薦, PCPine 可以免費由
ftp://ftp.cac.washington.edu 在 /pine/pcpine 目錄下取得。

    以下軟體分析分為 Dialup PPP/SLIP 以及 LAN 兩類。

I. Dialup PPP/SLIP

   Unix Server 軟體需求:
      Modem server (getty]
      PPP/SLIP server (pppd、dip)
      IMAP server (in.imapd)
      SMTP (sendmail)

   Client 端軟體需求:
      DOS -- PPP 或 SLIP driver + PC Pine
      Win -- PPP 或 SLIP driver + Winsock Stack + PC Pine


II. LAN

   Unix Server 軟體需求:
      POP server (in.imapd)
      SMTP (sendmail)

   Client 端軟體需求:
      DOS -- packet driver + PC Pine
      Win -- packaet driver + Winsock Stack + PC Pine


     架設 IMAP 環境時, 系統管理者要先幫使用者在 Unix 環境設立一個帳
號, 之後, 使用者在自己的桌上就可以架設 IMAP cllient 軟體。 這一點與
POP 也是完全一樣。

     IMAP server軟體必須系統管理者自行架設, 取得管道是 ftp://ftp.cac.
washington.edu/pine/unix-bin, 此處可以取得以下的版本 (這些都已經是
可執行碼, 無須再行編譯)。

-rwxr-xr-x  1 172      0        1613123 Oct 11 20:53 imapd-bin.a32
-rwxr-xr-x  1 172      0        1134168 Oct 11 16:57 imapd-bin.hpux9
-rwxr-xr-x  1 172      0        1746119 Oct 11 17:27 imapd-bin.linux
-rwxr-xr-x  1 172      0         806431 Oct 11 17:48 imapd-bin.machten
-rwxr-xr-x  1 172      0         752350 Oct 11 17:13 imapd-bin.next
-rwxr-xr-x  1 172      0        1050540 Oct 11 18:06 imapd-bin.osf
-rwxr-xr-x  1 172      0         530322 Oct 11 17:47 imapd-bin.ptx
-rwxr-xr-x  1 172      0         548108 Oct 11 18:53 imapd-bin.solaris
-rwxr-xr-x  1 172      0         819200 Oct 11 17:11 imapd-bin.sun
-rwxr-xr-x  1 172      0         848380 Oct 11 17:15 imapd-bin.ultrix
-rwxr-xr-x  1 172      0         635229 Oct 11 20:52 pico-bin.a32
-rwxr-xr-x  1 172      0         504852 Oct 11 16:58 pico-bin.hpux9
-rwxr-xr-x  1 172      0         411068 Oct 11 17:28 pico-bin.linux
-rwxr-xr-x  1 172      0         431482 Oct 11 18:00 pico-bin.machten
-rwxr-xr-x  1 172      0         415370 Oct 11 17:15 pico-bin.next
-rwxr-xr-x  1 172      0         433290 Oct 11 18:05 pico-bin.osf
-rwxr-xr-x  1 172      0         491154 Oct 11 17:45 pico-bin.ptx
-rwxr-xr-x  1 172      0         176536 Oct 11 17:19 pico-bin.solaris
-rwxr-xr-x  1 172      0         360448 Oct 11 17:13 pico-bin.sun
-rwxr-xr-x  1 172      0         444408 Oct 11 17:16 pico-bin.ultrix
-rwxr-xr-x  1 172      0        4808719 Oct 11 20:51 pine-bin.a32
-rwxr-xr-x  1 172      0        3551052 Oct 11 16:58 pine-bin.hpux9
-rwxr-xr-x  1 172      0        1913542 Oct 11 17:31 pine-bin.linux
-rwxr-xr-x  1 172      0        2915495 Oct 11 18:50 pine-bin.machten
-rwxr-xr-x  1 172      0        2596823 Oct 11 17:22 pine-bin.next
-rwxr-xr-x  1 172      0        3219065 Oct 11 18:01 pine-bin.osf
-rwxr-xr-x  1 172      0        2844046 Oct 11 17:46 pine-bin.ptx
-rwxr-xr-x  1 172      0        1908388 Oct 11 17:30 pine-bin.solaris
-rwxr-xr-x  1 172      0        2637824 Oct 11 17:22 pine-bin.sun
-rwxr-xr-x  1 172      0        2365596 Oct 11 17:22 pine-bin.ultrix

    安裝方法也很簡單, 讀者根據您的 Unix版本取得您要的 imapd 執行檔,
之後可以擺在 /usr/local/etc/in.imapd, 之後在 /etc/services 及 /etc/
inetd.conf 各自增加一行定義:

/etc/services 檔案:
imap              143/tcp                      # IMAP V.4

/etc/inetd.conf 檔案:
imap   stream  tcp nowait  root /usr/local/etc/in.imapd  imapd

    另外, 對於 Linux 用戶來說, Slackware Linux 2.1.0 系統已經內建有
IMAP server 程式 (/usr/sbin/in.imapd), 您只要確定 /etc/services 及
/etc/inetd.conf 有打開, 就立刻可以使用。

    最後對 IMAP 協定細節有興趣者, 可以自行拿 RFC 文件來閱讀, IMAP v4
在RFC 的編號是 RFC 1730。



□  Internet E-Mail Routing 觀念簡介

    關於 Internet E-Mail 的 Routing 其實非常簡單, 因為 SMTP 的傳送
是點對點運作, 既然只是兩個主機對傳, 就談不上 Routing。 (留意, 我們
這裡的討論, 已經忽略了 TCP/IP 更底層的部份)。 我們從前面圖 1.1 中間
的兩個方塊中, 可以看出兩份 SMTP 程式彼此互傳。

    不過以上說明也許不夠具體, 以下我們就由電腦螢幕上實際觀察一下過程。
倘若我們發一封信到 yuan@[139.175.249.15] 這樣的地址, 這封信會立刻從
發信人所在主機, 送到 IP 地址為 139.175.249.15 這部主機, 這信的
routing 就這麼簡單。 以下我們就來看看。


$ mail -v yuan@\[139.175.249.15\]

tpts1#$ yuan@[139.175.249.15]... Connecting to [139.175.249.
15] via ether...

1 Trying 139.175.249.15...  connected.
2 220 h{T
3 >>> HELO tpts1.seed.net.tw
4 250 linux2.uuserv.net.tw Hello tpts1.seed.net.tw
5 >>> MAIL From:
6 250  ... Sender Okay
7 >>> RCPT To:
8 250  ... Recipient Okay
9 >>> DATA
A 354 Enter mail, end with "." on a line by itself
B >>> .
C 250 Mail accepted
D >>> QUIT
D 221 linux2.uuserv.net.tw closing connection
F yuan@[139.175.249.15]... Sent

    以上的訊息, 當使用者在 tpts1.seed.net.tw 這機器完成信件之後,
該機器的 SMTP 程式(以 client角色) 接手把該信件投遞給 139.175.249.15
這部機器的 SMTP 程式(server角色), 上面的訊息也就是兩個 SMTP 程式之
間的對話 (第一欄位的數字不屬於對話的一部份, 其只是標記, 方便閱讀)。

    以上行數 3、5、7、9、B 及 D 為發信人端 Mail 主機所發出的訊息,
其餘的部份則是收信端 SMTP程式的回應, 筆者用口語翻譯如下:

3(發): 打招呼, 並附上自己的地址
4(收): 回招呼
5(發): 說明寄信人地址
6(收): 知道了
7(發): 我要寄給貴系統下的 yuan 使用者
8(收): 察有此人, 請寄過來吧
9(發): 發信端發出 DATA 指令, 這是告訴收信端的 SMTP程式 「從以下起就
       是信件的內容」
A(收): 我知道了, 請送過來吧, 記得遞送完成時, 用 . (句號) 符號通知我
       一下
B(發): . 符號表示資料傳送完成, 這封信就萬事拜託了 :)
C(收): 沒問題, 您的信已經被成功接收, 您盡管放心。
D(發): 再見, 離線

    額外一提, 對於電子郵件應用來說, 我們很少直接指定 IP 地址, 而是
使用 Domain Name居多, 以此例來說, 假如我們寄給 yuan@linux.uuserv.net.tw
, 我們這端的 Mail系統會則會增加一道動作, 先查詢 linux.uuserv.net.tw
的對應 IP 地址, 其他的細節則完全 一樣。

    Internet 上的信件傳遞的基本原理其實就是這麼簡單, 不過以上也是
筆者過度簡單化的結果。 由於我們住的這個世界越來越複雜了, 底下我們
接著就來看看 Internet Mail運作其複雜的一面。


□ Mail Gateway (Mail Relay)
    前面介紹我們知道了, Internet 上的信件傳送是點對點傳送, 中間可以
不經過第三者轉接, 不過真實情況來說, 透過第三者 Mail Gateway 轉遞卻
也很普遍。

    所謂 Mail Gateway (有些朋友比較喜歡稱為 Mail Relay, 都無妨), 就
是有一部 Mail 主機它同時接連 TCP/IP Internet 網路以及其他網路 (比方
BITNET、 UUCP或封閉性統來轉遞。 第三種情況, 則為顧慮到
信件接收備援、 或者是中央集中收信的行政考量, 而透過 Mail eXchanger
(MX, 也就是 Mail Gateway)來轉遞郵件。

    其實以上第二及第三點理由都可以透過 MX 來解決, 接下來筆者就要深
入談一下 MX。

     額外一提,       常有朋友問說, 如何把信送到 BITNET 用戶。 方法有兩
個, 第一, 系統管理者可以設定將所有 .bitnet 信件自動轉遞給 cunyvm.
cuny.edu, 這樣使用者可以正常寄信到 BITNET去, 就跟 Internet 信件沒有
不同 (以關 Sendmail/Smail設定方法在往後文章中會有介紹)。 另外一個
方法適合給使用者自力救濟,linux.uuserv.net.tw, 也
許它會每隔 15 分鐘或 30 分鐘嚐試執行投遞一次, 不斷嚐試, 直到幾天後
(究竟幾天, 由系統自定, 內定可能三天) 若仍沒有成功, 會把信退給
whitehouse.gov, whitehouse.gov 系統再退信給比爾本人, 比爾就知道信沒
有送達。 至於以上提到的時間數據不同的系統會有不同的設定。 我在後面
分別會介紹 Sendmail 及 Smail 如何來設定。

    可是假如故障發生一天之後 linux.uuserv.net.tw 對外線路恢復正常了,
tpts1.seed.net.tw 就會把一天前 whitehouse.gov 交代下來的信, 投遞給
linux.uuserv.net.tw, linux.uuserv.net.tw 接著負責把信轉給 UUserv.Net.tw。

    不論哪一種情況, 比爾 (president@whitehouse.gov) 應該都會知道他寄
出去的信如何了,  信件不會石沈大海。 比方說, 假如 UUserv.Net.tw 收到
了, 卻察無 yuan 此人, 則會把信退回 president@whitehouse.gov, 並附上
錯誤訊息。 假如 tpts1.seed.net.tw 一定時間內仍聯絡不到 linux.uuserv.net.tw
,信件也會退給比爾。 假如UUserv.Net.tw 根本不存在, 則 whitehouse.gov
一開始就會立刻把信丟還給比爾, 命附上 unknown host 的錯誤訊息 (假如
whitehouse.gov 的 Mail 系統不支援 BIND, 這時明明 uuserv.net.tw存在,
unknown host 錯誤也會發生)。

   反過來從 yuan@UUserv.Net.tw的角度來看, 由於 DNS 指定 MX 轉接服務,
所以即使 UUserv.Net.tw 的 Mail系統當掉一整天無法收信, 通常別人寄來的
信件是不會丟掉的, 因為, linux.uuserv.net.tw 、 tpts1.seed.net.tw 或
aladdin.iii.org.tw 會幫忙暫時把信收起來。


 * whitehouse.gov 對外線路中斷

    假如 whitehouse.gov 對外的線路因任何原因中斷了, 這時信件不可
能投遞的出去, 比爾的這封信該如何被處理呢?

    假如 whitehouse.gov 的 Mail server設定正確的話, 這封信會被積存
(queue) 在 whitehouse.gov 自己系統裡面, 之後, 每隔幾分鐘嚐試把信送
給 linux.uuserv.net.tw 這部機器一次, 正常的話, 假如三天或五天後
whitehouse.gov 對外連線仍然未通, whitehouse.gov 的 Mail 系統就會把
信件退還給比爾。 同樣的, 以上所提到的數據會依照系統設定之不同而有
異。


    同樣的, 假如 whitehouse.gov 對外線路通了, 這時 whitehouse.gov
會依序嚐試投遞給 linux.uuserv.net.tw、 tpts1.seed.net.tw 或 aladdin.
iii.org.tw 之其中之一。

□ 相關標準文件介紹及其取得方式
   以下文件若未經額外註明, 都可以用 FTP 在 ftp.edu.tw 的 /documents
/Internet/rfc 目錄下取得, 至於檔名, 比方文件編號為 RFC 1725, 則檔名
為 rfc-1725.txt.gz。 另外 1994 年十月份的 HopeNet光碟月刊所附 CD片,
也附有 Internet RFC 文件, 但沒有FTP 檔案庫上的資料齊全。

RFC 1730  PS   M. Crispin, "INTERNET MESSAGE ACCESS PROTOCOL - VERSION
          4", 12/20/1994. (Pages=77) (Format=.txt)

RFC 1725  DS   J. Myers, M. Rose, "Post Office Protocol - Version 3",
          11/23/1994.       (Pages=18) (Format=.txt) (Obsoletes RFC1460)

RFC 0821  S       J. Postel, "Simple Mail Transfer Protocol", 08/01/1982.
          (Pages=58) (Format=.txt) (Obsoletes RFC0788) (STD 10)

RFC 0822  S       D. Crocker, "Standard for the format of ARPA Internet text
          messages", 08/13/1982. (Pages=47) (Format=.txt) (Obsoletes
          RFC0733) (STD 11) (Updated by RFC1327, RFC0987)

RFC 0974  S       C. Partridge, "Mail routing and the domain system", 01/01/1986.
          (Pages=7) (Format=.txt) (STD 14)

RFC 1522  DS   K. Moore, "MIME (Multipurpose Internet Mail Extensions) Part Two:
          Message Header Extensions for Non-ASCII Text", 09/23/1993.
          (Pages=10) (Format=.txt) (Obsoletes RFC1342)

RFC 1521  DS   N. Borenstein, N. Freed, "MIME  (Multipurpose Internet Mail
          Extensions) Part One:  Mechanisms for Specifying and Describing the
          Format of Internet Message Bodies", 09/23/1993. (Pages=81)
          (Format=.txt, .ps) (Obsoletes RFC1341) (Updated by RFC1590)


RFC 1590  I    J. Postel, "Media Type Registration Procedure", 03/02/1994.
          (Pages=7) (Format=.txt) (Updates RFC1521)

RFC 1591  I    J. Postel, "Domain Name System Structure and Delegation",
          03/03/1994. (Pages=7) (Format=.txt)


□ 結論
    本期單純只介紹 Internet E-Mail的原理及觀念, 由於篇幅考慮, 筆者
暫時停在此處, 在往後兩期, 筆者將介紹 Unix 還境 Mail Server的架設,
我將分別深入介紹 Sendmail 及 Smail 的取得、 安裝以及系統設定。

     最後, 筆者必須說明, 筆者不真正擁有「全方位」 Internet E-Mail
之經驗!  我沒有吹牛 :-)  因此, 筆者竭誠歡迎其他網路先進來函指導,
也歡迎所有讀者朋友來信指教, 您可以用 E-Mail 連過我 yuan@UUserv.Net.tw。


                     曾瑞源 (作者為一獨立網路顧問)


--
* * 曾 桑, UUserv 社區網路 (02) 332-6441, 332-1574, 332-5448, 332-5495
yUan's commUnity Service Network, free UUCP/Internet gateway