1. 程式人生 > >讀懂郵件頭資訊

讀懂郵件頭資訊

  電子郵件也許是一個Internet上的流行最廣泛的應用。也是我們現在的大多數網路辦公流程的基礎。各種郵件伺服器很多,但都大都遵循以1982年出版的RFC822--《ARPA網路文字資訊格式標準(STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES)》為基礎的一系列郵件格式的規定。

  RFC(The Requests for Comments)是用來規定網際網路工作標準的文件。我們使用的時候並沒有注意到這些協議在我們的郵件通訊過程中默默的發揮著的作用,這絲毫也不能減低這些作用的重要性。郵件內部還有很多不為人知的祕密。

  在RFC822中規定一封信包括一個必須的多個頭部域(header fields)和一個可選的體部(body)組成。從一封信頭開始至第一個空行都是頭部。頭部定義了一個郵件的各項基本要素,路由資訊等內容。

  在Outlook Express中選定一封信看它的屬性。在詳細資料選項卡中顯示的就是這封郵件的頭部內容。也可以選定一封信,另存為一個.eml檔案。由於檔案是一個純文字檔案,用一般的編輯器開啟就可以看到郵件的內容。

  頭部有各個頭部域組成,每一個頭部域都包括域名(field-name)和域體(field-body),它們之間以":"分隔。每一個頭部域都可以看作由ASCII碼字元組成的獨立的文字。常見的頭部域包括:"Return-Path", "Received", "Date", "From", "Subject", "Sender","To", "cc","MIME-Version"等。各頭部域之間沒有規定順序。

  就像各個域的名字一樣。他們表示的具體意義也不同。

  Return-Path域表示退信的地址。

  Received域表示路由資訊。Internet上的信件可能是由多個伺服器依靠協議傳遞到達最終的目的郵箱的。每一個伺服器都會把自己的一段 Received域資訊新增近信件。所以可能有多段Received域,依傳遞次序排列。這個域的內容很有意思,我們可以根據每一段的內容來跟蹤一封信在internet上的傳遞過程。網管人員也可以根據這些資訊做出很有價值的判斷。

  例如一段程式碼中

  Received: from unknown (unknown [202.108.44.208]) by mx7.163.com (Postfix) with SMTP id 74E0E8 for<

[email protected]>; Fri, 28 Feb 2003 18:10:25 +0800 (CST)中,from 表示傳送主機,by表示接受主機,via物理路徑(本例沒有),with表示使用的協議,id表示接受訊息號,for表示目的郵件地址,分號後面表示時間。

  Date域表示建立信件的時間。

  From域表示郵件作者。

  Subject域就是郵件的主題。

  Sender域表示郵件的實際傳送者。

  To,cc域都表示接受的郵件地址。

  MIME-Version域表示MIME的版本(以後擴充的域)

  還有一個域—Content-Type。標識了一個重要的概念:郵件內容的格式。這個域的內容根據網際網路的發展產生,使郵件可以用來傳輸非文字內容,在RFC822中並沒有定義,而是在後續的RFC2045,RFC2046等文件中有定義。

  還有一些不太常見的頭部域,如"References","Message-ID"域。以及一些由不同廠家定義的自己的域(域名以"X-"開頭)。

  知道了這些知識,就可以看懂郵件頭部。瞭解到那些郵件的祕密。

  比如這是一封郵件的頭部。

Return-Path: "sea" <[email protected]>

Received: from unknown (unknown [202.108.44.208])

by mx7.163.com (Postfix) with SMTP id 74E0E8

for <[email protected]>; Fri, 28 Feb 2003 18:10:25 +0800 (CST)

Received: from smtp.netcs.com (unknown [211.150.100.6])

by 192.168.1.208 (Coremail:www.163.com) with SMTP id cAsAAJY1Xz7kAmQG.1

for <
[email protected]
>; Fri, 28 Feb 2003 18:10:30 +0800 (CST)

Received: from sea (unknown [192.168.18.160])

by smtp.netcs.com (Postfix) with ESMTP id E55D02675F

for <[email protected]>; Fri, 28 Feb 2003 18:09:58 +0800 (CST)

Message-ID: <[email protected]>

From: "sea" <[email protected]>

To: "=?gb2312?B?usK6vQ==?=" <[email protected]>

Message-ID: <[email protected]>

References: <[email protected]>

<[email protected]>

<[email protected]>

Subject: Re: hello

Date: Fri, 28 Feb 2003 18:07:22 +0800

MIME-Version: 1.0

Content-Type: multipart/alternative;

boundary="----=_NextPart_000_0006_01C2DF54.3DDEBE50"

X-Priority: 3

X-MSMail-Priority: Normal

X-Mailer: Microsoft Outlook Express 6.00.2600.0000

X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000


  通過辨認就可以知道這是一封從(From域)"sea" <[email protected]>寫給(To域)"=?gb2312?B?usK6vQ==?=" <ha[email protected]>的Id(Message-ID域)為<[email protected]>的回信。退信的地址(Return-Path域)是[email protected]可以看出(References域)這封信已經經過了連續三次回覆。主題(Subject域)是Re: hello。時間(Date域)是2003年的3月28日。郵件優先順序(X-Priority域)是普通。郵件的傳遞依次經過了三個伺服器(Received域):smtp.netcs.com;unknown;和mx7.163.com。還可以看到各伺服器的協議和到達各伺服器的時間。其中Postfix和Coremail都是常見的郵件系統。其中郵件接收地址中的內容由於包含漢字進行了編碼。

  一封郵件首先建立的是核心的幾個域:From,To,Message-Id,Subject,Date等,在傳輸過程中每通過一個伺服器再由此伺服器在郵件頭部新增一行Received資訊,最後一個伺服器新增退信地址(Return-Path)。

  郵件頭的格式制定的細節是根據資訊交流和網路傳輸的特點制定的。閱讀它們不僅可以知道郵件傳輸的祕密,還可以讓我們體會到協議制定與實現間的互相關聯的緊密關係。可以通過http://www.rfc.net/ 查詢到RFC822,同時可以查詢到其它重要的RFC文件。