MIME協議(一) -- RFC822郵件格式


MIME協議(一) -- RFC822郵件格式 .

 

如同其他各種電子文檔一樣,電子郵件內容也必須遵循一定的格式要求,各種郵件處理程序才能從中分析和提取出發件人、收件人、主題和附件等信息。郵件內容的基本格式和具體細節分別由RFC822文檔和MIME協議定義。

1  RFC822郵件格式

郵件內容的格式在RFC822文檔中定義,它包括兩個主要的組成部分:郵件頭和郵件體。在第2章的SMTP協議的實驗中,it315_test @sohu.com郵箱中接收到的it315_test@sina.com發送來的郵件的最終內容如例程3-1所示,其中的行號不屬於郵件內容,是作者為了便於講解而加上的。

例程1  test.eml

1.Return-Path: <it315_test@sina.com>

2.Delivered-To: it315_test@mx72.mail.sohu.com

3.Received: from smtp.sina.com.cn (unknown [202.108.3.177])

4. by sohumx139.sohu.com (Postfix) with SMTP id E4F9802C1249

5. for <it315_test@sohu.com>; Thu, 10 Nov 2005 16:39:50 +0800 (CST)

6.Received: (qmail 49221 invoked from network); 10 Nov 2005 08:39: 33 -0000

7.Received: from unknown (HELO it315?test) (218.246.5.151)

8.   by smtp.sina.com.cn with SMTP; 10 Nov 2005 08:39:33 -0000

9. From: it315_test@sina.com

10.To: it315_test@sohu.com

11.subject:test

12.Message-Id: <20051110083950.E4F9802C1249@sohumx139.sohu.com>

13.Date: Thu, 10 Nov 2005 16:39:50 +0800 (CST)

14.Status: RO

15.X-UIDL: 1131611863.21509_77.mx72

16.

17.test!!!

例程1中的第1~15行是郵件的郵件頭,第17行是郵件的郵件體,郵件頭和郵件體之間以一個空行進行分隔。這封郵件的郵件體內容非常少,只有一行“test!!!”文本。郵件頭部分由多個頭字段和字段內容組成,各種頭字段分別用於表示郵件的發件人、收件人、發件時間和主題等信息。細心的讀者可能已經看到,例程1中的郵件頭部分比在第2章的SMTP協議的實驗中實際發送的郵件頭多出了一些頭字段,這些頭字段是各個SMTP服務器在傳遞郵件的過程加上的。SMTP服務器在傳遞郵件時,會把一些相關信息增加到郵件的郵件頭中,這種情況有點類似於現實生活中的郵局在處理郵件時,通常都會在信封上加蓋郵戳一樣,表示這封郵件在什么時候經過了哪個郵局和由哪個工作人員經手處理。SMTP服務器按從下往上的方式添加各個字段,即先添加的字段位於后添加的字段的下面,例如,例程1中的郵件是由sina發送給sohu的,它首先經過sina的SMTP服務器,然后經過sohu的SMTP服務器,所以,sohu的SMTP服務器添加的頭字段(1~5行)位於sina的SMTP服務器添加的頭字段(6~8行)的上面。另外,POP3服務器也會在郵件頭中增加一些頭字段,例如,例程1中的12~15行。

每一個郵件頭以“字段名:字段值”的格式出現,即每一行郵件頭的內容依次由字段名、冒號、空格、字段值、回車換行符組成。RFC822文檔中定義了多個標准的郵件頭字段,每一個郵件頭字段表示一種特定的信息。郵件頭中也可以包含自定義的頭字段,這種自定義的頭字段通常是某個組織或機構內部專用的。下面是對例程1中出現的一些主要的郵件頭字段的解釋:

—  Return-Path  該字段代表郵件的回復地址,該字段內容由接收郵件的SMTP服務器填寫,接收郵件的SMTP服務器從郵件發送程序發出的mail form命令中獲得該字段內容。

 

—  Received  該字段的基本格式為Received from A by B for C,其中A為發送方,B為接收方,C為收件人的郵箱地址。該字段的內容由接收郵件的SMTP服務器填寫,常常被用來追蹤郵件傳輸的路線和分析郵件的來源,例如,從例程1中的各個Received字段中,可以知道這封郵件的傳輸路徑:從IP地址為【218.246.5.151】的機器上發出→【smtp.sina.com.cn】→【sohumx139.sohu.com】→【it315_test@sohu.com】。例程1中的第6行的“Received: (qmail 49221 invoked from network)”是sina的SMTP服務器內部調用的一個郵件發送模塊添加的,它說明sina的SMTP服務器接收到郵件后再通過這個郵件發送模塊將郵件轉發出去。顯然,通過分析一封郵件的源內容,是可以知道發件人的IP地址的。

 

—  From  該字段用於指定的發件人地址,郵件閱讀程序顯示的發件人地址就來源於這個字段。From字段中指定的發件人地址可以隨意亂寫,甚至不寫,所以,郵件閱讀程序顯示的發件人地址不一定是真實的,這通常可以通過查看郵件頭中的Return-Path字段來判斷發件人的真實性。注意,SMTP協議中mail from命令中指定的發件人地址也可以偽造,所以,郵件頭中的Return-Path字段也不是可以完全信賴的,對於比較重要的郵件,最好還是通過電話確認一下。

 

—  to  該字段用於指定收件人地址。

 

—  subject  該字段用於指定郵件的主題,如果主題內容中包含有ASCII碼以外的字符,通常要對其內容進行編碼。

 

—  date  該字段用於指定郵件的發送時間。

     郵件頭中除了包含上面的這些字段外,還有另外兩個比較常用的字段:

 

—  cc  該字段用於指定郵件的抄送地址。

 

—  bcc  該字段用於指定郵件的暗送地址。

     抄送地址和暗送地址的區別在於,郵件閱讀程序通常都不顯示暗送地址,而會顯示抄送地址。

 

郵件閱讀程序在顯示郵件信息時,所顯示出來的發件人、收件人和主題等信息就是從相應的郵件頭字段中提取出來的.

 

轉自:http://blog.csdn.net/reallyioio/article/details/5627378


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM