เชิงเทคนิค · คำตอบพร้อมแหล่งอ้างอิง
MIME (Multipurpose Internet Mail Extensions) คืออะไร
MIME ย่อมาจาก Multipurpose Internet Mail Extensions เป็นมาตรฐานที่ขยาย Simple Mail Transfer Protocol (SMTP) ดั้งเดิมเพื่อให้แลกเปลี่ยนเนื้อหาที่ไม่ใช่ข้อความได้ เช่น รูปภาพ เสียง วิดีโอ และข้อมูลแอปพลิเคชัน รวมถึงรูปแบบข้อความที่หลากหลายอย่าง HTML
MIME ทำงานอย่างไร
MIME ทำงานโดยเพิ่มเฮดเดอร์เฉพาะลงในข้อความอีเมล เพื่อบอกโปรแกรมอีเมลปลายทางว่าจะจัดการเนื้อหาอย่างไร เฮดเดอร์ที่สำคัญที่สุดคือ Content-Type ซึ่งกำหนดประเภทสื่อของข้อมูล เช่น text/plain หมายถึงข้อความธรรมดา ส่วน text/html หมายถึงหน้าเว็บที่จัดรูปแบบแล้ว เมื่อส่งเนื้อหาหลายประเภทในอีเมลเดียว จะใช้ประเภท multipart/mixed หรือ multipart/alternative เพื่อจัดกลุ่มส่วนต่าง ๆ เข้าด้วยกัน
ความสำคัญต่อผู้ส่ง
MIME จำเป็นต่อความสามารถในการส่งถึงและประสบการณ์ผู้ใช้ของอีเมลสมัยใหม่ หากไม่มี อีเมลจะจำกัดอยู่ที่อักขระ ASCII 7 บิต ทำให้การรองรับหลายภาษาเป็นไปไม่ได้และใช้ไฟล์แนบไม่ได้ เมื่อใช้ MIME ผู้ส่งจัดเตรียมเวอร์ชันข้อความล้วน (plain text) เป็นตัวสำรองควบคู่กับเวอร์ชัน HTML ได้ เพื่อให้ข้อความอ่านได้ไม่ว่าโปรแกรมอีเมลของผู้รับจะมีความสามารถแค่ไหน
หมายเหตุการใช้งานจริงและข้อผิดพลาด
ข้อผิดพลาดที่พบบ่อยคือไม่ได้ตั้ง charset ที่ถูกต้องในเฮดเดอร์ Content-Type ทำให้อักขระเพี้ยนหรือเกิด mojibake อีกปัญหาคือการกำหนด boundary ในข้อความ multipart ไม่ถูกต้อง ซึ่งอาจทำให้อีเมลแสดงเป็นโค้ดดิบหรือไฟล์แนบหาย นักพัฒนาควรตรวจสอบให้ข้อมูลไบนารีถูกเข้ารหัสด้วย Base64 อย่างถูกต้อง เพื่อป้องกันข้อมูลเสียหายระหว่างผ่าน SMTP relay
ตัวอย่างที่เป็นรูปธรรม
เฮดเดอร์ MIME ทั่วไปสำหรับอีเมล HTML ที่มีไฟล์แนบมีลักษณะดังนี้ Content-Type: multipart/mixed; boundary=boundary_123 ภายในเนื้อหา ส่วนแรกระบุเป็น Content-Type: text/html; charset=UTF-8 สำหรับเนื้อหาข้อความ และส่วนที่สองระบุเป็น Content-Type: application/pdf; name=invoice.pdf สำหรับไฟล์ คุณใช้ SendHQ หรือเครื่องมือฟรี (https://sendhq.cc/tools) วิเคราะห์โครงสร้างเฮดเดอร์ของคุณได้
กลไกการเข้ารหัส
เนื่องจาก SMTP ออกแบบมาสำหรับข้อความ MIME จึงใช้รูปแบบการเข้ารหัสเพื่อส่งข้อมูลไบนารี Base64 เป็นวิธีที่พบบ่อยที่สุด โดยแปลงไฟล์ไบนารีเป็นสตริงอักขระ ASCII ส่วนการเข้ารหัส Quoted-Printable ใช้กับข้อความที่ส่วนใหญ่เป็น ASCII แต่มีอักขระที่ไม่ใช่ ASCII อยู่บ้าง ช่วยลด overhead เมื่อเทียบกับ Base64 ขณะที่ยังเข้ากันได้กับระบบอีเมลรุ่นเก่า
คำถามที่ทีมมักถาม
MIME เหมือนกับ SMTP หรือไม่
ไม่ SMTP เป็นโปรโตคอลที่ใช้ขนส่งอีเมลจากเซิร์ฟเวอร์หนึ่งไปอีกเซิร์ฟเวอร์หนึ่ง ส่วน MIME เป็นมาตรฐานที่กำหนดรูปแบบของเนื้อหาที่ถูกขนส่ง
ประเภท MIME แบบ multipart/alternative คืออะไร
ใช้เมื่อส่งเนื้อหาเดียวกันในหลายรูปแบบ เช่น ข้อความล้วนและ HTML เพื่อให้โปรแกรมอีเมลเลือกเวอร์ชันที่ดีที่สุดในการแสดงผล
ทำไม MIME จึงใช้ Base64
Base64 เข้ารหัสข้อมูลไบนารีเป็นข้อความ ASCII เพื่อให้ข้อมูลคงสภาพเมื่อผ่านเซิร์ฟเวอร์เมลที่รองรับเฉพาะข้อความ 7 บิต
ใช้ MIME กับแอปพลิเคชันที่ไม่ใช่อีเมลได้หรือไม่
ได้ ระบบประเภท MIME (ปัจจุบันเรียกว่า Media Types) ใช้ทั่วทั้งเว็บ รวมถึงในเฮดเดอร์ HTTP เพื่อระบุประเภทของไฟล์ที่ดาวน์โหลดหรืออัปโหลด