TCP/IP 與 Internet 網路:第十四章 電子郵件系統  上一頁           下一頁

 

翻轉工作室:粘添壽

 

14-4 SMTP 協定

早期製作『簡易郵件傳輸協定』(Simple Mail Transfer Protocol, SMTP的目的是希望提供一個簡單的共通郵件傳輸方法,讓不同系統之間的郵件可以互相轉送。因此,SMTP 協定也是採用 NVT ASCII 傳輸方式(第十二章介紹),並且有提供直譯程式,使用者可以透過連接埠口(25/tcp)來發送與接收郵件。雖然早期 SMTP 協定是由 RFC 821 822 制定標準,但隨著 E-mail 系統的高度需求,傳輸規範也不斷更新,以下列出較重要的 RFC 規範:

RFC 821Simple Mail Transfer Protocol

RFC 822Standard for the format of ARPA Internet text messages

RFC 1425SMTP Service Extensions

RFC 1426SMTP Service Extension for 8bit-MIME Transport

RFC 1427SMTP Service Extension for Message Size Declaration

RFC 1651SMTP Service Extensions

RFC 1652SMTP Service Extension for 8bit-MIMEtransport

RFC 1653SMTP Service Extension for Message Size Declaration

RFC 1869SMTP Service Extensions

RFC 2554SMTP Service Extension for Authentication

RFC 2821Simple Mail Transfer Protocol

RFC 3030SMTP Service Extensions for Transmission of Large and Binary MIME Messages

RFC 3207SMTP Service Extension for Secure SMTP over Transport Layer Security

14-5 SMTP 協定的功能圖,客戶端(Linux Win 98)透過 SMTP 協定將信件傳送給郵件交換伺服器(或稱 SMTP Server),由 SMTP Server 負責傳送信件。也許該信件會經過多個 SMTP Server 之間的轉送,才會到達目的主機(郵件伺服器),但它們之間都以 SMTP 協定來通訊。

14-5 SMTP 協定功能

14-4-1 SMTP 命令

既然 SMTP 協定是以 NVT ASCII 方式實現,我們可以用 Telnet 方式登入該傳輸埠口,並利用 SMTP 命令來從事郵件傳輸的工作。SMTP 是架設在 TCP 協定上,而著名傳輸埠口是 25tcp/25),因此,我們登入 linux-2(如圖 9-1)的 SMTP 埠口如下:(並執行 help 命令)

[root@linux-2 root]# telnet 163.15.2.30 25

Trying 163.15.2.30...

Connected to linux-2.cu.edu.tw (163.15.2.30).

Escape character is '^]'.

220 linux-2.cu.edu.tw ESMTP Sendmail 8.11.6/8.11.6; Mon, 5 Aug 2002 09:34:28 +08

00

help

214-2.0.0 This is sendmail version 8.11.6

214-2.0.0 Topics:

214-2.0.0   HELO  EHLO  MAIL  RCPT  DATA

214-2.0.0   RSET   NOOP  QUIT  HELP  VRFY

214-2.0.0   EXPN  VERB   ETRN  DSN  AUTH

214-2.0.0   STARTTLS

214-2.0.0 For more info use "HELP <topic>".

214-2.0.0 To report bugs in the implementation send email to

214-2.0.0       sendmail-bugs@sendmail.org.

214-2.0.0 For local information send email to Postmaster at your site.

214 2.0.0 End of HELP info

上述範例中,也執行 help 命令來查詢 SMTP 協定(sendmail)所提供的命令,我們以發信一封信件給 tsnien@linux-2.cu.edu.tw 為例子,來說明這些命令的功能:

HELO開啟通訊連線的命令,以下範例表示由 win98-1 主機向 SMTP 伺服器要求連線,並表示連線成功(回覆訊息 250)。(延續上一範例)

helo win98-1.cu.edu.tw

250 linux-2.cu.edu.tw Hello linux-2.cu.edu.tw [163.15.2.30]

上述中有兩個 linux-2 主機位址,後面的是 DNS 伺服器位址,表示主機向 DNS 伺服器查詢 win98-1 位址正常(同意服務)。

MAIL經過 HELO 連線成功後,便可開始以 MAIL 命令來傳送信件。而此 mail 命令表示開啟傳送信件,並告知傳送信件者(FROM:

mail from:tsnien@linux-1.cu.edu.tw

250 2.1.0 tsnien@linux-1.cu.edu.tw... Sender ok

RCPT接下來,以 RCPT 告訴系統收信者(Recipient)位址,命令格式如下:

rcpt to:tsnien@linux-2.cu.edu.tw

250 2.1.5 tsnien@linux-2.cu.edu.tw... Recipient ok

DATA告知系統發信者(MAIL FROM:)和收信者(RCTP TO:)後,便可以 DATA 來發信了,寫完信後以.來表示信件結束,而系統就會將該信件發送,並回應結果,如下範例:

data

354 Enter mail, end with "." on a line by itself

good lucky to you

.

250 2.0.0 g752Uks02558 Message accepted for delivery

QUIT送完信件後,便可以 QUIT 命令來結束連線,範例如下:

quit

221 2.0.0 linux-2.cu.edu.tw closing connection

Connection closed by foreign host.

以上命令是針對傳遞信件使用,但還有一些常用命令如下:

RESET此命令可中斷目前郵件紀錄,並使雙方重新設定。執行 RESET 命令後,會捨棄雙方所有儲存的資訊。

VRFY:(Verify此命令讓發信端要求驗證收信人的位址是否正確,而不需傳送信件給收信人。通常是由系統管理者想要刪除有問題的郵件時,來確認該信件的傳送位址是否有問題。

NOOP:(No Operation此命令不作任何處理,強迫系統回應OK,以確定系統是否工作正常。

EXPN:(Expand此命令作為展開『郵遞清單』(Mailing List使用。

14-4-2 SMTP 回覆訊息

SMTP 也如同 Telnet 協定一樣,客戶端和伺服端之間都是採用交談式模式,是以『命令/回覆』機制來進行溝通,也是由客戶端為主動,送出一個命令後,等待伺服端回覆執行的結果。SMTP 伺服器回覆『回應碼』給客戶端,客戶端再以回應碼來判斷所下命令的執行結果。SMTP 的回應碼如表 14-1 所示。(回應顯示請參考上一小節範例樣式)

14-1 SMTP 回應碼

   回應碼

                    

211

回覆系統狀態。

214

回覆求助訊息。

220

SMTP 伺服器開始提供服務。

221

SMTP 伺服器關閉連線通道。

250

命令執行完畢,回應正確。

354

請開始輸入郵件內容,並以『.』做文件結束。

421

SMTP 伺服器無法提供服務,將會關閉連線通道。

450

指定的郵件伺服器無法提供服務,郵件無法傳送到達。

451

執行 SMTP 命令錯誤,被迫中斷連線。

452

因系統儲存空間不足,而無法執行 SMTP 命令。

500

SMTP 命令之語法錯誤,而無法執行。

501

命令的參數或引數的語法有誤。

502

不支援此命令。

503

命令序列有誤,

504

不支援此命令參數。

550

指定的郵件伺服器有誤(找不到),而無法執行。

551

指定的郵件伺服器無該使用者,請令指定使用者名稱。

552

因超出配額空間,而無法傳送郵件。

553

因指定郵件信箱有誤,而無法傳送信件。

554

處理失敗。

14-4-3 SMTP 郵件格式

RFC 822 中規範電子郵件由三個部分所組成:信封(Envelope)、標頭(Headers)和主體(Body),以下分別介紹之:

A信封

信封(Envelope)就如一般我們在郵局傳遞信件的信封一樣,信封上必須標明收信者和發信者的名稱地址。E-mail 的信封是由兩個命令來達成:

MAIL From: tsnien@linux-2.cu.edu.tw (發信者名稱和地址)

RCPT To: tsnien@pchome.com.tw (收信者名稱和地址)

有了收信和發信人的地址,此信件就可以依照信封上的註明,在 Internet 網路上通行(轉送與傳遞),有關如何通行的協定請參考 RFC 821 說明。

B標頭

E-mail 的封裝格式類似一般公文格式,每一信件(或公文)的標頭(Header)都包含若干個欄位,來說明此信件的來龍去脈,但並非這些欄位都必須填寫。SMTP 協定的信件標頭包含下列欄位:

To收件人的 E-mail 位址。

From發信人的 E-mail 位址。

Subject信件主題。

Message-ID此信件的訊息識別碼。

Date此信件的發信日期。

Received收到此信件時,郵件伺服器的回覆訊息。

X-Priority信件的緊急程度X

C主體

接下來便是信件的主體(Body),主體也是以 NTV ASCII 方式表示,其中以 <CR><LF>表示每行的結束(如十二章介紹),又以. <CR><LF>表示文件的結尾。

14-4-4 MIME 郵件格式

如果依照 RFC 822 製作信件格式,那麼 E-mail 僅能傳送文字格式。隨著環境的變遷,僅傳遞文字的信件已不能滿足人們的需求,更希望在文件中也可以傳遞聲音、影像、動畫,成為多媒體的文件格式,因此就有制定『多用途網際網路郵件擴充性』(Multipurpose Internet Mail Extensions, MIME協定的必要,標準規範為 RFC 1341 1521MIME 主要是增加文件內容的表達方式,和原來 RFC 822 所制定的規範並不相衝突,它增加了五個標頭區域來說明文件格式:

(1) Mime-Version版本號碼。如 1.0 表示版本 1.0

(2) Content Type內容格式。RFC 1521 定義有五種格式:NVT ASCII7 bits)、Quoted-printableBase648 bits MIME Binary

(3) Content-Transfer-Encoding文件傳輸編碼方法。

(4) Content-Description內容描述。

雖然制定了多媒體的傳輸方式,但必須有多媒體的顯示平台,來配合顯示文件內容,如果僅用一般文字模式的終端系統,將無法顯現出多媒體的信件。因此,在 Linux 系統之 X-windows Microsoft 系統上都有各自的郵件處理平台,最普遍使用的是 Outlook 軟體套件。E-mail 客戶端透過 Outlook 可以製作多媒體信件,可以接收及顯示聲音、文字、影像或動畫的多媒體信件。其實各種郵件平台(如 Outlook)製作多媒體文件方式,也是利用『超文字傳輸協定』(HyperText Transfer Protocol, HTTP,文字輸入方式和網頁系統一樣,以 HTML 語言的標記來製作信件,接收端再以各種標記格式將信件顯現出來。有關 MIME 格式命令請參考 RFC 1341 規範,至於 HTML 請參考下一章說明。本書限於篇幅不再贅言。

 

 

<GOTOP>