簡單郵件傳輸協議

本页使用了标题或全文手工转换,现处于繁体转换模式
出自求聞百科


簡單郵件傳輸協議(英語:Simple Mail Transfer Protocol,縮寫:SMTP)是一個在網際網路上傳輸電子郵件的標準。

SMTP是一個相對簡單的基於文本協議。在其之上指定了一條訊息的一個或多個接收者(在大多數情況下被確認是存在的),然後訊息文本會被傳輸。可以很簡單地通過telnet程序來測試一個SMTP服務器。SMTP使用TCP端口25。要為一個給定的域名決定一個SMTP服務器,需要使用DNSMX記錄

在八十年代早期SMTP開始被廣泛地使用。當時,它只是作為UUCP的補充,UUCP更適合於處理在間歇連接的機器間傳送郵件。相反,SMTP在發送和接收的機器在持續連線的網絡情況下工作得最好。

Sendmail是最早使用SMTP的郵件傳輸代理之一。到2001年至少有50個程序將SMTP實現為一個客戶端(消息的發送者)或一個服務器(消息的接收者)。一些其他的流行的SMTP服務器程序包括了Philip Hazel的exim,IBM的Postfix, D. J. BernsteinQmail,以及Microsoft Exchange Server

由於這個協議開始是基於純ASCII文本的,它在二進制文件上處理得並不好。例如MIME的標準被開發來編碼二進制文件以使其透過SMTP來傳輸。今天,大多數SMTP服務器都支持8位MIME擴展,它使二進制文件的傳輸變得幾乎和純文本一樣簡單。

SMTP是一個「推送」協議,它不允許根據需要從遠程服務器上「拉取」消息。要拉取消息到客戶端,郵件客戶端必須使用POP3IMAP。另一個SMTP服務器可以使用ETRN在SMTP上觸發一個發送。

SMTP通信舉例

在發送方(客戶端)和接收方(服務器)間建立連接之後,會建立一個合法的SMTP會話,如下例。在下面的例子中,所有客戶端發送的都以「C:」作為前綴,所有服務器發送的都以「S:」作為前綴。在多數計算機系統上,可以在發送的機器上使用telnet命令來建立連接,比如:

telnet www.example.com 25

它建立一個從發送的機器到主機www.example.com的SMTP連接。

S: 220 smtp.example.com ESMTP Postfix
C: HELO relay.example.com
S: 250 smtp.example.com, I am glad to meet you
C: MAIL FROM:<bob@example.com>
S: 250 Ok
C: RCPT TO:<alice@example.com>
S: 250 Ok
C: RCPT TO:<theboss@example.com>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: "Bob Example" <bob@example.com>
C: To: Alice Example <alice@example.com>
C: Cc: theboss@example.com
C: Date: Tue, 15 Jan 2008 16:02:43 -0500
C: Subject: Test message
C: 
C: Hello Alice.
C: This is a test message with 5 header fields and 4 lines in the message body.
C: Your friend,
C: Bob
C: .
S: 250 Ok: queued as 12345
C: QUIT
S: 221 Bye
{The server closes the connection}

雖然是可選的,但幾乎所有的客戶端都會使用EHLO問候消息(而不是上面所示的HELO)來詢問服務器支持何種SMTP擴展,郵件的文本體(接着DATA)一般是典型的MIME格式。

SMTP安全和垃圾郵件

最初的SMTP的局限之一在於它沒有對發送方進行身份驗證的機制。因此,後來定義了SMTP-AUTH擴展。

儘管有了身份認證機制,垃圾郵件仍然是一個主要的問題。但由於龐大的SMTP安裝數量帶來的網絡效應,大刀闊斧地修改或完全替代SMTP被認為是不現實的。Internet Mail 2000就是一個替代SMTP的建議方案。

因此,出現了一些同SMTP工作的輔助協議。IRTF的反垃圾郵件研究小組正在研究一些建議方案,以提供簡單、靈活、輕量級的、可升級的源端認證。最有可能被接受的建議方案是發件人策略框架協議。

提供SSL加密的SMTP協定被稱為SMTPS

參見

相關 RFC

  • RFC 5321 - 簡單郵件傳輸協議,在最近(2008.8)代替了 RFC 2821
  • RFC 2821 - 簡單郵件傳輸協議,在最近(2001)代替了 RFC 821,RFC 1869,RFC 974
  • RFC 2822 - Internet(比如 e-mail)消息格式,代替了 RFC 822
  • RFC 3461 - SMTP的發送狀態通知(DSN)擴展,代替了 RFC 1891

參考文獻