MIME กับ อีเมล คู่หูที่ขาดกันมิได้


อัปเดท : 7 กรกฎาคม พ.ศ.2547 , แสดง : 23,032 , ความคิดเห็น : 5

ถ้าพูดถึงแนวความคิด MINE ผมจะยกตัวอย่างระบบ Mail เพื่อให้คุณเห็นแนวความคิดนี้ได้ชันเจนขึ้น คุณคงทราบแล้วว่าข้อมูล ASCII Code นั้นจะใช้ 7 Bit แต่การส่งข้อมูลจริงในระบบเครือข่ายจะใช้ 2n (สองกำลังเอ็น) ซึ่งก็คือ 8 Bit เป็นส่วนใหญ่ ระบบ Mail ก็เช่นกันเมื่อส่งข้อมูล มันจะใช้ ASCII Code เป็นหลักในการรับส่ง แม้ว่าคุณจะ Attached ไฟล์ที่เป็น Binary File (Binary Code) * เช่น .doc, .xls,.exe เป็นต้น ระบบ Mail มันก็จะแปลง ให้เป็น ASCII Code ก่อนที่จะส่ง

ตัวอย่างหนึ่งที่ใช้ในการแปลง Attached ไฟล์ที่เป็น Binary File (Binary Code) ไปเป็น ASCII Code ก็คือ uuencode เป็นโปรแกรมที่เป็น Command Line ใช้หลักการว่า นำข้อมูล (Binary) จำนวน 3 Byte(24 Bits) มาแปลงเป็น ASCII จำนวน 4 Bytes โดยที่ ASCII จะใช้ 6 Bits ล่าง ส่วน 2 Bits บนจะถูก Filter ให้เป็น 0 (ไม่ผิดกฎของ ASCII ที่ Bits บนสุดเป็น 0) uuencode จึงนำข้อมูล (Binary) จำนวน 3 Byte(24 Bits) มากระจายบน ASCII จำนวน 4 Bytes (32 Bit) เพื่อใช้ส่งได้ และไนการแปลงก็จะมีการส่ง Filename,Protection หรือ ข้อมูลอื่นๆเกี่ยวกับไฟล์ลงไปด้วย

1
2
3
4
5
6
7
8
9
1
0
1
1
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
2
0
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
3
0
3
1
3
2
Binary(24Bits)
 
0
0
Binary
0
0
Binary
0
0
Binary
0
0
Binary


ขนาดของไฟล์ที่แปลง จาก Binary File (Binary Code) ไปเป็น ASCII Code จะโตกว่าต้นฉบับขึ้นอยู่กับเทคนิคที่ใช้ เช่นถ้าเป็น uuencode ดังตัวอย่าง ไฟล์จะโตกว่าเดิมประมาณ 33%

การใช้ uuencode เมื่อก่อน เมื่อต้นทางที่ส่งแปลง Binary File (Binary Code) ไปเป็น ASCII Code แล้ว ปลายทางที่รับก็ต้องใช้ uuencode(Decode Function) แปลงกลับเป็น Binary File (Binary Code) เหมือนเดิม

แต่ปัจจุบันการทำขั้นตอนข้างต้นเป็นไปอย่างอัตโนมัติ โดยใช้โปรโตคอลที่ชื่อว่า MIME (Multipart Internet Mail Extensions) มันจะทำหน้าที่แปลงข้อมูลไปมา ระหว่าง Binary File (Binary Code) กับ ASCII Code ดังนั้นเมื่อเมื่อมี MIME ทำให้ Mail สามารถ Attached โปรแกรม,ภาพ,เสียง,ไฟล์ หรือ Binary File อื่นๆได้โดยอัตโนมัติ

ในระบบ Mail ถ้ามอง MIME ตามโปรโตคอล SMTP(Simple Mail Tranfer Protocol) ตัว MIME เองจะเป็นส่วนต่อยอดของ SMTP ขึ้นไป โดยวิธีการทำงานถ้า SMTP มันไม่รู้จัก Keyword นั้น ๆมันก็จะข้ามไป MIME มันก็จะสร้าง Keyword ของมันเองเช่น Mime-Version, Content-Type เพื่อเป็นข้อมูลที่จะบอกปลายทางให้รู้ว่าต้นทางทำอะไรกับข้อมูลบ้าง

ตัวอย่าง Mail Header

Return-Path:
Delivered-To: /usr/local/vpopmail/domains/NextProject.net.com/M/l/deoinbox/Maildir/
Received: (qmail 82729 invoked by uid 0); 6 Jul 2004 16:31:26 -0000
Received: from unknown (HELO assografici.it) (210.96.72.253) by webmail.thai.com with SMTP; 6 Jul 2004 16:31:26 -0000
Message-Id:
From: "who name"
To: [email protected]
Subject: Hello World
Date: Mon, 05 Apr 2004 17:26:35 +0000
Mime-Version: 1.0
Content-Type: text/html
Content-Transfer-Encoding: base64


ปัญหาหนึ่ง ที่เคยเกิดขึ้นในยุคการเปลี่ยนมาใช้ MIME แรกๆ และยังคงมีอยู่บ้างก็คือ MIME ปลายทางเป็นเวอร์ชั่นเก่ากว่า หรือมันไม่รู้จัก Encoding ที่ต้นทางใช้ มันแลย Decode ไปเป็น Binary Code ไม่ได้ เช่นต้นทางใช้ Content-Transfer-Encoding: XuuEncode ปลายทาง ไม่รู้จัก XuuEncode ก็ไม่สามารถอ่านได้

ตัวอย่าง เพื่อนส่งไฟล์ Zip ซึ่งเป็น Binary มา แต่ MIME ของระบบ Mail ปลายทาง Decode ไม่ได้อาจเป็นเพราะไม่รู้จัก Encoding ที่ต้นทางใช้ เมื่อถึงปลายทาง ไฟล์ Zip ที่ Encoding เป็น ASCII แล้วจะต้องเปลี่ยน เป็น Binary ก่อน มันก็ทำไม่ได้ เป็นไปได้ที่มันก็เอา ASCII นั้นมาแสดงผล ผลที่ได้ก็คือจะมีอักขระแปลกๆเต็มหน้าจอ ทั้งนี้เพราะข้อมูลใน ASCII นั้นๆอาจเป็น Binary ที่ต่อๆ กันอยู่ (ทั้งนี้ขึ้นอยุ่กับ Encoding Technic ที่ใช้)

* ถ้าอยากรู้ว่า Binary File เป็นอย่างไรให้ลองเอา ไฟล์อะไรก็ได้เช่น .doc,.zip,.jpg เปิดด้วย notepad จะเห็น อักขระแปลก ๆเต็มไปหมด


ผู้เขียน/อ้างอิง : จักรกฤษณ์ แร่ทอง

ระบบเครือข่ายและความมั่นคง

ความคิดเห็น/แนะนำ/ติชม/อื่นๆ

  • c=o [22 Dec 2004 , 10:05 PM]

    ได้ความรู้มากๆครับ

  • Jhon [05 May 2005 , 03:27 PM]

    โห เห็นทางสว่างแล้วครับ ขอบคุณมาก

  • ann [27 ส.ค. 2551 , 09:08 AM]

    พี่ค่ะ ขอบคุณมากนะค่ะ หนูหาตั้งนานแน่ะกว่าจะเจอเรื่องนี้ คราบพระคุณมากค่ะ ^^

  • jump [02 ก.พ. 2552 , 11:34 AM]

    ขอบคุณค้าบ

  • yada [21 ส.ค. 2553 , 12:22 AM]

    ช่วยสอนวิธีการทำให้อ่านได้หน่อยได้หรือเปล่าค่ะ หามาเป็นอาทิตย์แล้วค่ะยังงมอยู่ที่เดิมเลย