最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年10月16日 10:10:25   作者:YSOcean  
這篇文章主要為大家詳細介紹了郵件的組織結構,郵件內容的基本格式和具體細節(jié),具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

1、RFC822 郵件格式

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

  RFC822 文檔中定義的文件格式包括兩個部分:郵件頭和郵件體。在上一篇博客,我們通過SMTP服務發(fā)送一封郵件,然后用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==?=" <1132803951@qq.com>
11 To: "=?ISO-8859-1?B?MTgyNzEyNjU3MzI=?=" <18271265732@163.com>
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 smtp.mail=1132803951@qq.com; dki
        m=pass header.i=@qq.com
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 行是郵件體(經(jīng)過base64加密過了,有興趣的大家可以解碼看看)。而郵件頭和郵件體之間以一個空行間隔,郵件頭部分是由多個頭字段和字段內容組成,分別表示收件人,發(fā)件人,發(fā)件時間,主題等信息。還有一些信息是對應的SMTP服務器在郵件傳遞過程中所加上的,我們知道現(xiàn)實生活中的郵局在處理郵件時,通常都會在信封上加上郵戳,表示這封郵件在什么時候經(jīng)過了哪個郵局哪個部門處理,我們上個例子是QQ郵箱發(fā)給163郵箱的。而SMTP服務器按從下往上的方式添加信息,即先添加的字段位于后添加字段的后面。所以qq的SMTP服務器會先添加頭字段,但是添加的字段會在163的SMTP服務器添加字段的下面,另外 POP3服務器也會自己添加一些字段。

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

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

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

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

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

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

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

  為了解決上面兩個問題,人們后來專門為此定義了MIME(Multipurpose Internet Mail Extension,多用途Internet郵件擴展)協(xié)議。 

2、MIME協(xié)議

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

  一個采用了MIME協(xié)議的電子郵件就叫做MIME郵件,MIME郵件在RFC822文檔中定義的郵件頭字段的基礎上,擴充了一些自己專用的郵件頭字段,例如,使用MIME-Version頭字段指定MIME協(xié)議的版本,使用Content-Type頭字段指定郵件體的MIME類型,使用Content-Transfer-Encoding頭字段指定編碼方法,如下所示:    

MIME-Version:1.0
 
Content-Type:multipart/mixed;boundary="----=_NextPart_000_0050_01C"

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

3、總結

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

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

相關文章

  • Java中Stringbuild,Date和Calendar類的用法詳解

    Java中Stringbuild,Date和Calendar類的用法詳解

    這篇文章主要為大家詳細介紹了Java中Stringbuild、Date和Calendar類的用法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • Java合并區(qū)間的實現(xiàn)

    Java合并區(qū)間的實現(xiàn)

    本文主要介紹了Java合并區(qū)間的實現(xiàn),通過合理使用集合類和排序算法,可以有效地解決合并區(qū)間問題,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • java中的通用權限管理設計(推薦)

    java中的通用權限管理設計(推薦)

    下面小編就為大家推薦一篇java中的通用權限管理設計,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • java由JABXContext注解讀取xml配置文件方式

    java由JABXContext注解讀取xml配置文件方式

    這篇文章主要介紹了java由JABXContext注解讀取xml配置文件方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java模式匹配之蠻力匹配

    java模式匹配之蠻力匹配

    這篇文章主要介紹了java模式匹配之蠻力匹配的相關資料和代碼,需要的朋友可以參考下
    2015-05-05
  • Spring中的@PostConstruct注解使用方法解析

    Spring中的@PostConstruct注解使用方法解析

    這篇文章主要介紹了Spring中的@PostConstruct注解使用方法解析,@PostConstruct注解是用來處理在@Autowired注入屬性后init()方法之前,對一些零散的屬性進行賦值的注解,需要的朋友可以參考下
    2023-11-11
  • mybatis-plus 處理大數(shù)據(jù)插入太慢的解決

    mybatis-plus 處理大數(shù)據(jù)插入太慢的解決

    這篇文章主要介紹了mybatis-plus 處理大數(shù)據(jù)插入太慢的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 詳解RestTemplate?用法

    詳解RestTemplate?用法

    RestTemplate?是從?Spring3.0?開始支持的一個?HTTP?請求工具,也有的稱之為網(wǎng)絡框架,說白了就是Java版本的一個postman,這篇文章主要介紹了詳解RestTemplate?用法,需要的朋友可以參考下
    2022-07-07
  • SpringBoot時間格式化的方法小結

    SpringBoot時間格式化的方法小結

    SpringBoot中的時間格式化通常指的是將Java中的日期時間類型轉換為指定格式的字符串,或者將字符串類型的時間解析為Java中的日期時間類型,本文小編將給大家詳細總結了SpringBoot時間格式化的方法,剛興趣的小伙伴跟著小編一起來看看吧
    2023-10-10
  • Java編程生產者消費者實現(xiàn)的四種方法

    Java編程生產者消費者實現(xiàn)的四種方法

    Java生產者和消費者問題是線程安全模型中的經(jīng)典問題:生產者和消費者在同一個時間段共用同一個存儲空間,生產者向存儲空間中添加產品呢,消費者取走產品,當存儲空間為空時,消費者阻塞,當存儲空間滿時,生產者阻塞
    2021-10-10

最新評論

滦南县| 镶黄旗| 南靖县| 称多县| 宣恩县| 峡江县| 聂荣县| 牟定县| 蚌埠市| 宝山区| 西乡县| 庆城县| 金堂县| 阿合奇县| 浏阳市| 泽普县| 日土县| 广水市| 弋阳县| 许昌市| 白河县| 卓资县| 阿尔山市| 宽甸| 临汾市| 军事| 项城市| 平远县| 荃湾区| 泰宁县| 库尔勒市| 南康市| 印江| 吴堡县| 湟源县| 会宁县| 辉南县| 富阳市| 米脂县| 资中县| 凤凰县|