激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - Java教程 - 郵件的組織結構介紹 郵件實現詳解(三)

郵件的組織結構介紹 郵件實現詳解(三)

2021-01-19 10:42YSOcean Java教程

這篇文章主要為大家詳細介紹了郵件的組織結構,郵件內容的基本格式和具體細節,具有一定的參考價值,感興趣的小伙伴們可以參考一下

要想各種郵件處理程序能識別我們所寫的電子郵件,能從我們所書寫的電子郵件中分析和提取出發件人,收件人,郵件主題和郵件內容以及附件等信息,那么我們所寫的電子郵件必須要遵循一定的格式要求,正如我們上一篇博客 手工體驗smtp和pop3協議,我們在發送郵件時有固定的寫法。而這種郵件內容的基本格式和具體細節分別是由 rfc822 文檔和 mime 協議定義的。 

1、rfc822 郵件格式

  英文參考文檔如下:https://tools.ietf.org/html/rfc822

  rfc822 文檔中定義的文件格式包括兩個部分:郵件頭和郵件體。在上一篇博客,我們通過smtp服務發送一封郵件,然后用pop3服務器接收。郵件接收內容如下圖紅色框所顯示:

郵件的組織結構介紹 郵件實現詳解(三)

  這上面顯示的不全,我這里將其內容整理出來,并在每行左邊加上標號:

1 received: from smtpbg5.qq.com (unknown [183.60.61.230])
        by mx6 (coremail) with smtp id omcowacxv+ssf99zd5fqag--.5570s3;
        thu, 12 oct 2017 22:41:48 +0800 (cst)
2 dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512;
        t=1507819308; bh=n2xk6iu/bt0tcntodutsq3tkyxbttoi08rt+hjuxmbc=;
        h=from:to:subject:mime-version:content-type:content-transfer-encoding:date:message-id;
        b=lzbtxaww0+hb1bglkkcqlueu4bvvomxdp3uztkq3ycijt5ypu4fke0m5rrrpcxf0d
         w0/pqajrqtughltmpjoudi5adwjfrfkoc1z0+ltaaraozfde5hmnq0hxqstna+ibjc
         gmvezcomikvm5qklycz/1lwd5mbj90ykkns3sl08=
3 x-qq-feat: gf8h89u9tnwrjwdyipphyegibbvtgumwr4i/ntv6mwr6yoyfiwpupvj+bcsjz
        taz24njms/p1d8bxg7lyvzrcpmpqv7jdw3akjtclrss9xe29fxwsejyk5qld1cmiuhhf9po
        1hmwwkizx8q6smehiwr+t/du8sprvhvue4ty5kmpeww967qaazgta5hcnrtgajhzrciumvx
        r+k4/ny7i+wwnenotfht4ly4k1ne+vd7vnjblhh674hej2csoseebw7x/leesq6m=
4 x-qq-ssf: 0001000000000010000000000000007
5 x-has-attach: no
6 x-qq-business-origin: 2
7 x-originating-ip: 113.57.253.69
8 x-qq-style:
9 x-qq-mid: webmail4t1507819307t4823829
 
10 from: "=?iso-8859-1?b?mtezmjgwmzk1mq==?=" <>
11 to: "=?iso-8859-1?b?mtgynzeynju3mzi=?=" <>
12 subject: hello world
13 mime-version: 1.0
14 content-type: multipart/alternative;
        boundary="----=_nextpart_59df7f2b_08cb07d0_339f08f2"
15 content-transfer-encoding: 8bit
16 date: thu, 12 oct 2017 22:41:47 +0800
17 x-priority: 3
18 message-id: <tencent_9efed46440a5bad43e6bc680fac8a58e460a@qq.com>
19 x-qq-mime: tcmime 1.0 by tencent
20 x-mailer: qqmail 2.x
21 x-qq-mailer: qqmail 2.x
22 x-qq-sendsize: 520
23 received: from qq.com (unknown [10.137.130.92])
        by smtp.qq.com (esmtp) with smtp
        id ; thu, 12 oct 2017 22:41:47 +0800 (cst)
24 feedback-id: webmail:qq.com:bgweb:bgweb4
25 x-cm-transid:omcowacxv+ssf99zd5fqag--.5570s3
26 authentication-results: mx6; spf=pass ; dki
        m=pass
27 x-coremail-antispam: 1uf129kbjdun29kb7zkaujuuuuu529edanixcx71uuuuu7v73
        vfw2agmfu7bjvjm3aalaj3ubiyctniwievja73ujifytuyvj4rwlvtduuuu
 
28 this is a multi-part message in mime format.
 
29 content-type: text/plain;
        charset="iso-8859-1"
30 content-transfer-encoding: base64
 
31 pgrpdj48c3bhbibzdhlszt0izm9udc1myw1pbhk6icdsdwnpzgegr3jhbmrljywgvmvyzgfu
yswgj01py3jvc29mdcbzyuhlasc7igxpbmutagvpz2h0oiaymy44chg7ij5uaglziglzihro
zsbmaxjzdcblbwfpbcbzzw50igj5ighhbmqgdxnpbmcgdghlifnnvfagchjvdg9jb2w8l3nw
yw4+pc9kaxy+

  上面便是 rfc822 所定義的郵件格式,從第 1 行到第 30 行都是郵件頭,第 31 行是郵件體(經過base64加密過了,有興趣的大家可以解碼看看)。而郵件頭和郵件體之間以一個空行間隔,郵件頭部分是由多個頭字段和字段內容組成,分別表示收件人,發件人,發件時間,主題等信息。還有一些信息是對應的smtp服務器在郵件傳遞過程中所加上的,我們知道現實生活中的郵局在處理郵件時,通常都會在信封上加上郵戳,表示這封郵件在什么時候經過了哪個郵局哪個部門處理,我們上個例子是qq郵箱發給163郵箱的。而smtp服務器按從下往上的方式添加信息,即先添加的字段位于后添加字段的后面。所以qq的smtp服務器會先添加頭字段,但是添加的字段會在163的smtp服務器添加字段的下面,另外 pop3服務器也會自己添加一些字段。

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

郵件的組織結構介紹 郵件實現詳解(三)

  我們從上可以知道,rfc822文檔存在兩個問題:

  ①、定義了郵件內容的主體結構和各種郵件頭字段的詳細細節,但是,它沒有定義郵件體的格式,rfc822文檔定義的郵件體部分通常都只能用于表述一段普通的文本,而無法表達出圖片、聲音等二進制數據。

 ?、?、smtp服務器在接收郵件內容時,當接收到只有一個“.”字符的單獨行時,就會認為郵件內容已經結束,如果一封郵件正文中正好有內容僅為一個“.”字符的單獨行,smtp服務器就會丟棄掉該行后面的內容,從而導致信息丟失。

  上面兩個問題是致命的,當今的電子郵件,人們希望在電子郵件中嵌入圖片、聲音、動畫和附件。但是,由于圖片和聲音等內容是非ascii碼的二進制數據,而rfc822郵件格式只適合用來表達純文本的郵件內容,所以,要使用rfc822郵件格式發送這些非ascii碼的二進制數據時,必須先采用某種編碼方式將它們“編碼”成可打印的ascii字符后再作為rfc822郵件格式的內容。郵件閱讀程序在讀取到這種經過編碼處理的郵件后,再按照相應的解碼方式解碼出原始的二進制數據,這樣就可以借助rfc822郵件格式來傳遞多媒體數據了。這種做法需要解決一下兩個技術問題:

  一、郵件閱讀程序如何知道郵件中嵌入的原始二進制數據所采用的編碼方式;

  二、郵件閱讀程序如何知道每個嵌入的圖像或其他資源在整個郵件內容中的起止位置。

  為了解決上面兩個問題,人們后來專門為此定義了mime(multipurpose internet mail extension,多用途internet郵件擴展)協議。 

2、mime協議

  mime協議用于定義復雜郵件體的格式,它可以表達多段平行的文本內容和非文本的郵件內容,例如,在郵件體中內嵌的圖像數據和郵件附件等。另外,mime協議的數據格式也可以避免郵件內容在傳輸過程中發生信息丟失。mime協議不是對rfc822郵件格式的升級和替代,而是基于rfc822郵件格式的擴展應用。一言以蔽之,rfc822定義了郵件內容的格式和郵件頭字段的詳細細節,mime協議則是定義了如何在郵件體部分表達出的豐富多樣的數據內容。

  一個采用了mime協議的電子郵件就叫做mime郵件,mime郵件在rfc822文檔中定義的郵件頭字段的基礎上,擴充了一些自己專用的郵件頭字段,例如,使用mime-version頭字段指定mime協議的版本,使用content-type頭字段指定郵件體的mime類型,使用content-transfer-encoding頭字段指定編碼方法,如下所示:    

?
1
2
3
mime-version:1.0
 
content-type:multipart/mixed;boundary="----=_nextpart_000_0050_01c"

  其中,“multipart/mixed”部分說明郵件體中包含有多段數據,每段數據之間使用boundary屬性中指定的字符文本作為分隔標識符。另外,mime郵件也擴展了rfc822文檔中已經定義了的郵件頭字段的內涵,例如,定義了subject頭字段中的值內容的格式,以便通過編碼的方式讓郵件主題中也可以使用非ascii碼的字符。subject頭字段中的值嵌套在一對“=?”和“?=”標記符之間,標記符之間的內容由三部分組成:郵件主題的原始內容的字符集、當前采用的編碼方式、編碼后的結果,這三部分之間使用“?”進行分隔。

3、總結

  這篇博客,帶上前面兩篇博客,我們就將郵件的收發基本原理講了一下。那么有人會問,實際項目中我們也需要考慮郵件的底層實現協議嗎?答案是不用的,比如 sun 公司(現在已經被orcal收購了)開發的javamail api 就是為方便java開發人員在應用程序中實現郵件接收和發送功能而提供的一套標準開發包,屏蔽了底層的郵件實現協議,那么下一篇博客我們就來用javamail 實現郵件收發功能

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/ysocean/p/7663695.html

延伸 · 閱讀

精彩推薦
1051
主站蜘蛛池模板: 在线a亚洲视频播放在线观看 | 国产一区免费观看 | 在线高清中文字幕 | 神马福利电影 | 一边吃奶一边插下面 | 欧美另类69xxxxx 视频 | 亚洲3atv精品一区二区三区 | 黄色一级毛片免费看 | 国产91亚洲精品久久久 | 国产小视频在线 | 欧美一级一片 | 激情久久免费视频 | 国产日本欧美在线观看 | 国产视频在线观看免费 | 激情夜色 | 精品一区二区亚洲 | 斗破苍穹在线观看免费完整观看 | 国产精品美女久久久免费 | 97中文| 精品国产亚洲人成在线 | 欧美日韩精品一区二区三区不卡 | 毛片免费视频播放 | 在线视频国产一区 | xxxxxx中国 | 精品一区二区在线播放 | 久久91久久久久麻豆精品 | 精品一区二区三区电影 | 爱爱插插视频 | 97久久人人超碰caoprom | 国产99视频在线观看 | 色奇米| 最新av在线播放 | 国产九色视频在线观看 | 国产精品久久久久久久久粉嫩 | 美女视频在线观看黄 | 中国fx性欧美xxxx | 国产高潮失禁喷水爽到抽搐视频 | 国产女厕一区二区三区在线视 | 一级毛片特黄 | 国产免费视频一区二区裸体 | 婷婷亚洲一区二区三区 |