search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

MIME協議在郵件中的應用詳解

全稱是多用途互聯網郵件擴展(MIME,Multipurpose Internet Mail Extensions),在MIME出台之前,使用RFC 822隻能發送基本的ASCII碼文本信息,郵件內容如果要包括二進位文件、聲音和動畫等,實現起來非常困難,最為麻煩的是多家郵件伺服器商間郵件的互發,如果沒有一種統一的格式定義,想要互發需要投入巨大的人力物力。MIME提供了一種可以在郵件中附加多種不同編碼文件的方法,彌補了原來的信息格式的不足。實際上不僅僅是郵件編碼,現在MIME經成為HTTP協議標準的一個部分。

總體來說,MIME消息由消息頭和消息體兩大部分組成。現在我們關注的是MIME郵件,因此在以下的討論中姑且稱「消息」為「郵件」。

1.郵件頭

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

域名含義添加者
Received傳輸路徑各級郵件伺服器
Return-Path回復地址目標郵件伺服器
Delivered-To發送地址目標郵件伺服器
Reply-To回復地址郵件的創建者
From發件人地址郵件的創建者
To收件人地址郵件的創建者
Cc抄送地址郵件的創建者
Bcc暗送地址郵件的創建者
Date日期和時間郵件的創建者
Subject主題郵件的創建者
Message-ID消息ID郵件的創建者
MIME-VersionMIME版本郵件的創建者
Content-Type內容的類型郵件的創建者
Content-Transfer-Encoding內容的傳輸編碼方式郵件的創建者

1.1.郵件類型(Content-Type)

content-type用來說明下面的郵件正文類型,一般以下面的形式出現。Content-Type: [type]/[subtype]; parameter。

type有以下幾種可選:

  • Text:用於標準化地表示的文本信息,文本消息可以是多種字符集和或者多種格式的;
  • Multipart:用於連接消息體的多個部分構成一個消息,這些部分可以是不同類型的數據;
  • Application:用於傳輸應用程序數據或者二進位數據;
  • Message:用於包裝一個E-mail消息;
  • Image:用於傳輸靜態圖片數據;
  • Audio:用於傳輸音頻或者音聲數據;
  • Video:用於傳輸動態影像數據,可以是與音頻編輯在一起的視頻數據格式。

subtype用於指定type的詳細形式。content-type/subtype配對的集合和與此相關的參數,將隨著時間而增長。為了確保這些值在一個有序而且公開的狀態下開發,MIME使用Internet Assigned Numbers Authority (IANA)作為中心的註冊機制來管理這些值。常用的subtype值如下所示:

  • text/plain(純文本)
  • text/html(HTML文檔)
  • application/xhtml+xml(XHTML文檔)
  • image/gif(GIF圖像)
  • image/jpeg(JPEG圖像)【PHP中為:image/pjpeg】
  • image/png(PNG圖像)【PHP中為:image/x-png】
  • video/mpeg(MPEG動畫)
  • application/octet-stream(任意的二進位數據)
  • application/pdf(PDF文檔)
  • application/msword(Microsoft Word文件)
  • message/rfc822(RFC 822形式)
  • multipart/alternative(HTML郵件的HTML形式和純文本形式,相同內容使用不同形式表示)
  • application/x-www-form-urlencoded(使用HTTP的POST方法提交的表單)
  • multipart/form-data(同上,但主要用於表單提交時伴隨文件上傳的場合)

此外,尚未被接受為正式數據類型的subtype,可以使用x-開始的獨立名稱(例如application/x-gzip)。vnd-開始的固有名稱也可以使用(例:application/vnd.ms-excel)。

parameter可以用來指定附加的信息,更多情況下是用於指定text/plain和text/htm等的文字編碼方式的charset參數。MIME根據type制定了默認的subtype,當客戶端不能確定消息的subtype的情況下,消息被看作默認的subtype進行處理。Text默認是text/plain,Application默認是application/octet-stream而Multipart默認情況下被看作multipart/mixed。

1.2內容傳輸編碼(Content-Transfer-Encoding),

這個區域使指定ASCII以外的字元編碼方式成為可能。形式如下:Content-Transfer-Encoding: [mechanism]

其中,mechanism的值可以指定為「7bit」,「8bit」,「binary」,「quoted-printable」,「base64」。

7bit這裡指的是7位的ASCII編碼方式。

8位元ASCII碼。

binary,quoted-printable,因為歐洲的一些文字和ASCII字符集中的某些字元有部分相同。如果郵件消息使用的是這些語言的話,於ASCII重疊的那些字元可以原樣使用,ASCII字符集中不存在的字元採用形如「=??」的方法編碼。這裡「??」需要用將字元編碼后的16進位數字來指定。採用quoted-printable編碼的消息,長度不會變得太長,而且大部分都是ASCII中的字元,即使不通過解碼也大致可以讀懂消息的內容。

base64是一種將二進位的01序列轉化成ASCII字元的編碼方法。編碼后的文本或者二進位消息,就可以運用SMTP等只支持ASCII字元的協議傳送了。Base64一般被認為會平均增加33%的報文長度,而且,經過編碼的消息對於人類來說是不可讀的。

x-encodingname這個值是預留的擴展。

2.郵件體

郵件內容有各種各樣的(既純文本,超文本,內嵌資源(比如內嵌在超文本中的圖片),附件的組合),伺服器如何知道該郵件是哪些的混合呢?通過第一個content-type,如果是純文本該頭為:

Content-Type: text/plain; charset=GBK 如果包含了其他內容,郵件體被分為多個段,段中可包含段,每個段又包含段頭和段體兩部分。content-type為multipart類型。multipart類型分為三種,這三種的關係如下:

可以看出,如果在郵件中要添加附件,必須定義multipart/mixed段;如果存在內嵌資源,至少要定義multipart/related段;如果純文本與超文本共存,至少要定義multipart/alternative段。什麼是「至少」?舉個例子說,如果只有純文本與超文本正文,那麼在郵件頭中將類型擴大化,定義為multipart/related,甚至multipart/mixed,都是允許的。

multipart諸類型的共同特徵是,在段頭指定「boundary」參數字元串,段體內的每個子段以此串定界。所有的子段都以「--」+boundary行開始,父段則以「--」+boundary+「--」行結束。段與段之間也以空行分隔。在郵件體是multipart類型的情況下,郵件體的開始部分(第一個「--」+boundary行之前)可以有一些附加的文本行,相當於註釋,解碼時應忽略。

1.最簡單的純文本郵件

1 Received: from 15616xxxxx$163.com ( [122.207.54.20] ) by 2 ajax-webmail-wmsvr14 (Coremail) ; Fri, 19 May 2017 19:40:51 +0800 (CST) 3 X-Originating-IP: [122.207.54.20] 4 Date: Fri, 19 May 2017 19:40:51 +0800 (CST) 5 From: 15572483149 <[email protected]> 6 To: [email protected] 7 Subject: ss 8 X-Priority: 3 9 X-Mailer: Coremail Webmail Server Version SP_ntes V3.5 build 10 20160729(86883.8884) Copyright (c) 2002-2017 www.mailtech.cn 163com 11 Content-Transfer-Encoding: 7bit 12 Content-Type: text/plain; charset=GBK 13 MIME-Version: 1.0 14 Message-ID:15 X-Coremail-Locale: zh_CN 16 17 ss

上面的郵件只包含一個文本(ss),所以第11,12行說明了正文格式和編碼,下面的就是數據內容(段頭和段體隔一行如16行)

2.包含一個文本和一個超文本(正常發送的郵件一般至少有一個正文一個超文本,除非特別指定為純文本)

1 Received: from 15616104472$163.com ( [122.207.54.20] ) by 2 ajax-webmail-wmsvr14 (Coremail) ; Fri, 19 May 2017 19:51:31 +0800 (CST) 3 X-Originating-IP: [122.207.54.20] 4 Date: Fri, 19 May 2017 19:51:31 +0800 (CST) 5 From: 15572483149 <[email protected]> 6 To: [email protected] 7 Subject: ss 8 X-Priority: 3 9 X-Mailer: Coremail Webmail Server Version SP_ntes V3.5 build 10 20160729(86883.8884) Copyright (c) 2002-2017 www.mailtech.cn 163com 11 X-CM-CTRLDATA: hN4rXGZvb3Rlcl9odG09ODU6NDI1 12 Content-Type: multipart/alternative; 13 boundary="----=_Part_214835_1240140699.1495194691872" 14 MIME-Version: 1.0 15 Message-ID: <[email protected]> 16 X-Coremail-Locale: zh_CN 17 18 ------=_Part_214835_1240140699.1495194691872 19 Content-Type: text/plain; charset=GBK 20 Content-Transfer-Encoding: base64 21 22 c3Nz 23 ------=_Part_214835_1240140699.1495194691872 24 Content-Type: text/html; charset=GBK 25 Content-Transfer-Encoding: base64 26 27 PGRpdiBzdHlsZT0ibGluZS1oZWlnaHQ6MS43O2NvbG9yOiMwMDAwMDA7Zm9udC1zaXplOjE0cHg7 28 Zm9udC1mYW1pbHk6QXJpYWwiPnNzczwvZGl2Pjxicj48YnI+PHNwYW4gdGl0bGU9Im5ldGVhc2Vm 29 b290ZXIiPjxkaXYgaWQ9Im5ldGVhc2VfbWFpbF9mb290ZXIiPjxkaXYgc3R5bGU9ImJvcmRlci10 30 b3A6I0NDQyAxcHggc29saWQ7cGFkZGluZzoxMHB4IDVweDtmb250LXNpemU6MTVweDtjb2xvcjoj 31 Nzc3O2xpbmUtaGVpZ2h0OjIycHgiPjxhIGhyZWY9Imh0dHA6Ly95b3UuMTYzLmNvbS9pdGVtL2xp 32 c3Q/Y2F0ZWdvcnlJZD0xMDEwMDAwJnN1YkNhdGVnb3J5SWQ9MTAxNTAwMSZmcm9tPXdlYl9nZ19t 33 YWlsX2ppYW9iaWFvXzgiIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6IzMzNjZGRjt0ZXh0 34 LWRlY29yYXRpb246bm9uZSI+ob7P3sqxob9NVUpJoaLArbfywM3C17XI1sbU7MnM1rG5qdDCv+60 35 us/EVND0vfYz1du826Ohz97KsTQ51KrG8KOswu3Jz8fAJmd0OyZndDsgJm5ic3A7PC9hPgogJm5i 36 c3A7ICZuYnNwOzwvZGl2PjwvZGl2Pjwvc3Bhbj4= 37 ------=_Part_214835_1240140699.1495194691872--

上面的包含一個文本和一個超文本,故12行Content-Type: multipart/alternative;接著為boundary參數。下面為兩個元素,每個元素以「--」+boundary開頭,然後是content-type。。。如18,19,20行。注意:上一個元素的數據和下一個元素的頭之間無需空行。段以「--」+boundary+「--」結束,如37行。

4.文本,超文本,附件

1 Received: from 15616104472$163.com ( [122.207.54.20] ) by 2 ajax-webmail-wmsvr14 (Coremail) ; Fri, 19 May 2017 20:24:26 +0800 (CST) 3 X-Originating-IP: [122.207.54.20] 4 Date: Fri, 19 May 2017 20:24:26 +0800 (CST) 5 From: 15572483149 <[email protected]> 6 To: [email protected] 7 Subject: ss 8 X-Priority: 3 9 X-Mailer: Coremail Webmail Server Version SP_ntes V3.5 build 10 20160729(86883.8884) Copyright (c) 2002-2017 www.mailtech.cn 163com 11 X-CM-CTRLDATA: pQoIAGZvb3Rlcl9odG09ODY6NDI1 12 Content-Type: multipart/mixed; 13 boundary="----=_Part_217443_152692695.1495196666093" 14 MIME-Version: 1.0 15 Message-ID: <[email protected]> 16 X-Coremail-Locale: zh_CN 17 18 ------=_Part_217443_152692695.1495196666093 19 Content-Type: multipart/alternative; 20 boundary="----=_Part_217445_839318381.1495196666093" 21 22 ------=_Part_217445_839318381.1495196666093 23 Content-Type: text/plain; charset=GBK 24 Content-Transfer-Encoding: base64 25 26 c2RmYQ== 27 ------=_Part_217445_839318381.1495196666093 28 Content-Type: text/html; charset=GBK 29 Content-Transfer-Encoding: base64 30 31 PGRpdiBzdHlsZT0ibGluZS1oZWlnaHQ6MS43O2NvbG9yOiMwMDAwMDA7Zm9udC1zaXplOjE0cHg7 32 Zm9udC1mYW1pbHk6QXJpYWwiPnNkZmE8L2Rpdj48YnI+PGJyPjxzcGFuIHRpdGxlPSJuZXRlYXNl 33 Zm9vdGVyIj48ZGl2IGlkPSJuZXRlYXNlX21haWxfZm9vdGVyIj48ZGl2IHN0eWxlPSJib3JkZXIt 34 dG9wOiNDQ0MgMXB4IHNvbGlkO3BhZGRpbmc6MTBweCA1cHg7Zm9udC1zaXplOjE1cHg7Y29sb3I6 35 Izc3NztsaW5lLWhlaWdodDoyMnB4Ij48YSBocmVmPSJodHRwOi8veW91LjE2My5jb20vaXRlbS9s 36 aXN0P2NhdGVnb3J5SWQ9MTAxMDAwMCZzdWJDYXRlZ29yeUlkPTEwMTUwMDEmZnJvbT13ZWJfZ2df 37 bWFpbF9qaWFvYmlhb184IiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiMzMzY2RkY7dGV4 38 dC1kZWNvcmF0aW9uOm5vbmUiPqG+z97KsaG/TVVKSaGiwK238sDNwte1yNbG1OzJzNaxuanQwr/u 39 tLrPxFTQ9L32M9XbvNujoc/eyrE0OdSqxvCjrMLtyc/HwCZndDsmZ3Q7ICZuYnNwOzwvYT4KICZu 40 YnNwOyAmbmJzcDs8L2Rpdj48L2Rpdj48L3NwYW4+ 41 ------=_Part_217445_839318381.1495196666093-- 42 43 ------=_Part_217443_152692695.1495196666093 44 Content-Type: text/plain; name="first.txt" 45 Content-Transfer-Encoding: base64 46 Content-Disposition: attachment; filename="first.txt" 47 48 MTIzNA== 49 ------=_Part_217443_152692695.1495196666093 50 Content-Type: text/plain; name="first.txt" 51 Content-Transfer-Encoding: base64 52 Content-Disposition: attachment; filename="first.txt" 53 54 MTIzNA== 55 ------=_Part_217443_152692695.1495196666093--

View Code

上面的郵件體包含了一個文本,一個超文本和兩個文本附件。注意看12行的content-type和boundary參數和19行,19行是12行的子元素的同時也是一個嵌套的段所以也有一個獨有的boundary參數,和上面的multipart參數的關係一樣,可是是一層層的嵌套關係。

5.包含所有的東西

Received: from 15616104472$163.com ( [122.207.54.20] ) by ajax-webmail-wmsvr14 (Coremail) ; Fri, 19 May 2017 20:37:12 +0800 (CST) X-Originating-IP: [122.207.54.20] Date: Fri, 19 May 2017 20:37:12 +0800 (CST) From: 15572483149 <[email protected]> To: [email protected] Subject: ss X-Priority: 3 X-Mailer: Coremail Webmail Server Version SP_ntes V3.5 build 20160729(86883.8884) Copyright (c) 2002-2017 www.mailtech.cn 163com X-CM-CTRLDATA: WqpW62Zvb3Rlcl9odG09MjUzOjM5Mg== Content-Type: multipart/mixed; boundary="----=_Part_218429_202270086.1495197432753" MIME-Version: 1.0 Message-ID: <[email protected]> X-Coremail-Locale: zh_CN ------=_Part_218429_202270086.1495197432753 Content-Type: multipart/related; boundary="----=_Part_218430_777936326.1495197432753" ------=_Part_218430_777936326.1495197432753 Content-Type: multipart/alternative; boundary="----=_Part_218431_95247708.1495197432753" ------=_Part_218431_95247708.1495197432753 Content-Type: text/plain; charset=GBK Content-Transfer-Encoding: base64 c2Rm ------=_Part_218431_95247708.1495197432753 Content-Type: text/html; charset=GBK Content-Transfer-Encoding: base64 PGRpdiBzdHlsZT0ibGluZS1oZWlnaHQ6MS43O2NvbG9yOiMwMDAwMDA7Zm9udC1zaXplOjE0cHg7 Zm9udC1mYW1pbHk6QXJpYWwiPjxkaXY+c2RmPC9kaXY+PGRpdj48aW1nIHNyYz0iY2lkOjQyZWE3 NDczJDIkMTVjMjBiNjNiYjEkQ29yZW1haWwkMTU2MTYxMDQ0NzIkMTYzLmNvbSIgb3Jnd2lkdGg9 IjQ4IiBvcmdoZWlnaHQ9IjQ4IiBkYXRhLWltYWdlPSIxIiBzdHlsZT0id2lkdGg6IDQ4cHg7IGhl aWdodDogNDhweDsiPjwvZGl2PjwvZGl2Pjxicj48YnI+PHNwYW4gdGl0bGU9Im5ldGVhc2Vmb290 ZXIiPjxkaXYgaWQ9Im5ldGVhc2VfbWFpbF9mb290ZXIiPjxkaXYgc3R5bGU9ImJvcmRlci10b3A6 I0NDQyAxcHggc29saWQ7cGFkZGluZzoxMHB4IDVweDtmb250LXNpemU6MTZweDtjb2xvcjojNzc3 O2xpbmUtaGVpZ2h0OjIycHgiPjxhIGhyZWY9Imh0dHA6Ly95b3UuMTYzLmNvbS9pdGVtL21hbnVm YWN0dXJlcj90YWdJZD0xMDAxMDAwJmZyb209d2ViX2FkX2ppYW9iaWFvMSIgdGFyZ2V0PSJfYmxh bmsiIHN0eWxlPSJjb2xvcjojMzM2NkZGO3RleHQtZGVjb3JhdGlvbjpub25lIj6hvs340tfX1NOq fDMwzOzO3tPHzcu79aG/zt7TocG8xrfWxtTsyczWsbmpu/m0obTytddU0PS1yLrDzu+jrM/eyrEy OdSqxvAmZ3Q7Jmd0OzwvYT4KICZuYnNwOyAmbmJzcDs8L2Rpdj48L2Rpdj48L3NwYW4+ ------=_Part_218431_95247708.1495197432753-- ------=_Part_218430_777936326.1495197432753 Content-Type: image/png; name="circle.png" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="circle.png" Content-ID: <42ea7473$2$15c20b63bb1$Coremail$15616104472$163.com> iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAQAAAD9CzEMAAAABGdBTUEAALGPC/xhBQAAACBjSFJN AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElN RQfaBBoAAAC1VYTSAAAEGElEQVRYw63Ye4hUZRjH8c/Mjpu6XtbcSjTZki1dK2VBCtPRIJSU2oyi gsrAzL/CEC9kaPiHVBJBBaYUSYgRlRGZFV2MaPKKmhfU1Kxlt7y73lZXXXe2P86c2XGd3XXd8/wz c2be5/d9n987c97nPTFtRvLKyy7iYtIuS+d+nGpDIXYN4l0MMNhQtytRqFC9Ov/aZ5cDzrYHibUj fptxJiiXcNxBh51DQol++uuuxhrf2qGhdUSsDfE7PW+SAmutsdURZ13ODuruRkOM8aB+1lpqQ2Ba qn1ARr7YFNPUWWGVqlzHU1euS7EHvKjcSu84mA8Ryys/zELDfGiZQ615nIMp8ohZzptr7dUjY3mS JnjLIfNtaHv5WqzVa0ZZ4DPpKzMKrhr8hPf86iV7A/FqbUW1aqVwyk96mOOsPyjNySpoIf+Qd31h rlPtzT0XUgoN1rnsFcfsyEUUtPB+qV+86vy1y+fUkbZFkRl2qmpGxHIAfSxXYLLjHRFvYXF37xvs STWhRjxnxFSDzXP8OrRlKz5vgS5mSoSuxLPsoaZabGvHzMkTVRZ5zNjwMqwgZoojVnROPpO52ibT dc8CkjBEpWVOdGbqWUS9JSqMDpTDCiqd8V2n7Qljve2eDn6hAaC3ib53NAr5TA1fut9tJMWTUG6g H6KYejZ+w8jmCu5V68+I7AlUauw2KgTEVNijNtIKGmx0lx4BoEiZXVfushHEHiVuDgDFequKWJ5q hUoCQE9dr/f+kz9SUKshBHSVaO4OIosLzukdLnKji5EDaBILAGkJPSKXT7hBfQCo16DXVV1cZ6On bk4EgDPq9YtSOwn9pR0LALUOuyNyi8qcCQEX7TZMYcSAEf5xMrwXbTDIrVGtQhL6qrBRYwjYJO2+ SOdf4abg/xZPQbVNHtUlMvmYSf6ym7CCRp8bYXgUJiWhzDgr1ZESz9w5UvaboqCziEz2c85bHbwN 9+Q6i403JhKDKjxruf+CqTc3Xj9KmatvZ2rI9HZzHPRJ+Fk88AeXLHKLGddvUyZrqrHeaG4gMs1v KRx3zGxnWjbgHZJ/2Js+8JEmGYUMINOC75Uw21E7O4pIhi+L/W6+C83bV/Z8UK2UJlsUm+m0HZpK rxmSkR9viX1ediJ3d8w54VQrpdE63czWyzYXrqWOZFB7oSnettn04CjYnJXvjJYw2Tz7LbQ27DVS eaWzUWaWSsstcrLl6NaOsSMtcLeVltmZD5IjPsBTXlDvdatcbvcYm5PcxzOm6e1nX9nsaJ6+qady E1Xq6lMfq8lfa95HCdn5DVTpcWVO2mmb/Y6pk9ZVsYGGu8cAB33ja3+3bmSrD0OykB6GGq3CIMXS LkmLizvrgO3W2x02PB18GHKV0wlFSvRSqMklp9Wq0xh+2VbL9j9IHjTiA2DrdAAAACV0RVh0ZGF0 ZTpjcmVhdGUAMjAxNi0wOS0xN1QxNToyMjo1NiswODowMJ6pg4wAAAAldEVYdGRhdGU6bW9kaWZ5 ADIwMTAtMDQtMjZUMDA6MDA6MDArMDg6MDCgVTtdAAAATXRFWHRzb2Z0d2FyZQBJbWFnZU1hZ2lj ayA3LjAuMS02IFExNiB4ODZfNjQgMjAxNi0wOS0xNyBodHRwOi8vd3d3LmltYWdlbWFnaWNrLm9y Z93ZpU4AAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAYdEVYdFRodW1iOjpJ bWFnZTo6SGVpZ2h0ADEyOEN8QYAAAAAXdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgAMTI40I0R3QAA ABl0RVh0VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAXdEVYdFRodW1iOjpNVGltZQAx MjcyMjExMjAwCSkN7wAAABJ0RVh0VGh1bWI6OlNpemUAMi4zMktCSJ1SyQAAAFt0RVh0VGh1bWI6 OlVSSQBmaWxlOi8vL2hvbWUvd3d3cm9vdC9zaXRlL3d3dy5lYXN5aWNvbi5uZXQvY2RuLWltZy5l YXN5aWNvbi5jbi9zcmMvMjk3LzI5NzEyLnBuZ5u0pR4AAAAASUVORK5CYII= ------=_Part_218430_777936326.1495197432753-- ------=_Part_218429_202270086.1495197432753 Content-Type: text/plain; name="first.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="first.txt" MTIzNA== ------=_Part_218429_202270086.1495197432753--

View Code

如有問題,歡迎在評論區交流。。



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦