日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

邮件MIME格式分析

發(fā)布時間:2025/3/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 邮件MIME格式分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://www.cnblogs.com/crystalray/articles/3302427.html

?

?

郵件mime格式

參考:

rfc4021,Registration of Mail and MIME Header Fields,

?http://www.apps.ietf.org/rfc/rfc4021.html,

總體來說,MIME消息由消息頭和消息體兩大部分組成。這里,分別稱為為郵件頭、郵件體。

郵件頭

郵件頭包含了發(fā)件人、收件人、主題、時 間、MIME版本、郵件內容的類型等重要信息。每條信息稱為一個域,由域名后加“: ”和信息內容構成,可以是一行,較長的也可以占用多行。域的首行必須“頂頭”寫,即左邊不能有空白字符(空格和制表符);續(xù)行則必須以空白字符打頭,且第 一個空白字符不是信息本身固有的,解碼時要過濾掉。

郵件頭中不允許出現(xiàn)空行。有一些郵件不能被郵件客戶端軟件識別,顯示的是原始碼,就是因為首行是空行。

例如:

Date: Mon, 29 Jun 2009 18:39:03 +0800

From: "=?gb2312?B?26zQocHB?=" <gaoxl@legendsec.com>

To: "moreorless" <moreorless@live.cn>

Cc: "gxl0620" <gxl0620@163.com>

BCC: "=?gb2312?B?26zQocHB?=" <venus.oso@gmail.com>

Subject: attach

Message-ID: <200906291839032504254@legendsec.com>

X-mailer: Foxmail 6, 15, 201, 21 [cn]

Mime-Version: 1.0

?

郵件體

在郵件體中,大致有如下一些域:

有的域除了值之外,還帶有參數(shù)。值與參數(shù)、參數(shù)與參數(shù)之間以“;”分隔。參數(shù)名與參數(shù)值之間以“=”分隔。

郵件體包含郵件的內容,它的類型由郵件頭的“Content-Type”域指出。常見的簡單類型有text/plain(純文本)和text/html(超文本)。

multipart類型,是MIME郵件的精髓。郵件體被分為多個段,每個段又包含段頭和段體兩部分,這兩部分之間也以空行分隔。常見的multipart類型有三種:multipart/mixed, multipart/related和multipart/alternative。從它們的名稱,不難推知這些類型各自的含義和用處。它們之間的層次關系可歸納為下圖所示:

?

可以看出,如果在郵件中要添加附件,必須定義multipart/mixed段;如果存在內嵌資源,至少要定義multipart/related段;如果純文本與超文本共存,至少要定義multipart/alternative段。

?

示例:

?

MIME編碼

參考rfc2047,MIME Part Three:Message Header Extensions for Non-ASCII Text

?http://tools.ietf.org/html/rfc2047

?

?MIME編碼的兩種方法:

?? ? 對郵件進行編碼最初的原因是因為Internet上的很多網(wǎng)關不能正確傳輸8bit內碼的字符,比如漢字等。編碼的原理就是把8bit的內容轉換成7bit的形式以能正確傳輸,在接收方收到之后,再將其還原成8bit的內容。???

?? ? MIME是“多用途網(wǎng)際郵件擴充協(xié)議”的縮寫,在MIME協(xié)議之前,郵件的編碼曾經有過UUENCODE等編碼方式,但是由于MIME協(xié)議算法簡單,并且易于擴展,現(xiàn)在已經成為郵件編碼方式的主流,不僅是用來傳輸8 bit的字符,也可以用來傳送二進制的文件,如郵件附件中的圖像、音頻等信息,而且擴展了很多基于MIME的應用。

?

從編碼方式來說,MIME 定義了兩種編碼方法Base64與QP(Quote-Printable):

Base64

?????? Base64是一種通用的方法,其原理很簡單,就是把三個Byte的數(shù)據(jù)用4個Byte表示,這樣,這四個Byte中,實際用到的都只有前面6 bit,這樣就不存在只能傳輸7bit的字符的問題了。Base64的縮寫一般是“B”。

Base64將輸入的字符串或一段數(shù)據(jù)編碼成只含有{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}這64個字符的串,'='用于填充。其編碼的方法是,將輸入數(shù)據(jù)流每次取6bit,用此6bit的值(0-63)作為索引去查表,輸出相應字符。這樣,每3個字節(jié)將編碼為4個字符(3×8 → 4×6);不滿4個字符的以'='填充。 Base64的算法很簡單,它將字符流順序放入一個24位的緩沖區(qū),缺字符的地方補零。?? 然后將緩沖區(qū)截斷成為4個部分,高位在先,每個部分6位,用64個字符重新表示。如果輸入只有一個或兩個字節(jié),那么輸出將用等號“=”補足。這可以隔斷附加的信息造成編碼的混亂。

QP

另一種方法是QP(Quote-Printable)方法,通常縮寫為“Q”方法,其原理是把一個8 bit?? 的字符用兩個16進制數(shù)值表示,然后在前面加“=”。所以我們看到經過QP編碼后的文件通常是這個樣子:=B3=C2=BF=A1=C7=E5=A3=AC=C4=FA=BA=C3=A3=A1。

QP編碼要求編碼后每行不能超過76個字符。當超過這個限制時,將使用軟換行,用”=”表示編碼行的斷行,后接CRLF。(76的限制包括”=”)。

“=” 等號被編碼為”=3D”。

tab和空格出現(xiàn)在行尾時,需要被編碼為”=09”(tab)? “=20”(space)

編碼格式:encoded-word = "=?" charset "?" encoding "?" encoded-text "?="

編碼信息有"=?"和"?="括起來,"=?"后是字符集名稱,再一個"?"后是編碼方式,再一個"?"后是編碼后的字符串。字符集和編碼方式都不區(qū)分大小寫。

字符集可以是任意系統(tǒng)支持的字符集(iso-8859-1、utf-8、gb2312、gbk、gb18030....)

?

編碼方式有兩種:"B"或"b"代表base64編碼;"Q"或"q"代表QP編碼。

Generally, an "encoded-word" is a sequence of printable ASCII characters that begins with "=?", ends with "?=", and has two "?"s in between. It specifies a character set and an encoding method, and also includes the original text encoded as graphic ASCII characters, according to the rules for that encoding method.

?

SMTP與MIME的關系

?

從上圖可以看出發(fā)件人、收件人地址都出現(xiàn)了兩次,一次在smtp命令中(SMTP email address),一次在郵件正文中(MIME email address)。需要注意的是:

  • 郵件正文中可以包含發(fā)件人、收件人的別名,smtp命令中不可以
  • 密送人的地址不一定會出現(xiàn)在郵件正文中。不同客戶端實現(xiàn)不同。
  • ?

    ?

    ?

    ?

    本文參考了以下資源:

    http://blog.donews.com/Shan/archive/2006/01/04/682534.aspx

    轉載于:https://www.cnblogs.com/onelikeone/p/7865596.html

    總結

    以上是生活随笔為你收集整理的邮件MIME格式分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。