Friday, January 11, 2008

ระบบอีเมลล์ ตอนที่ 1

บทความนี้จะพูดถึงการทำงานของระบบ E-mail ตั้งแต่เบื้องต้นจนไปถึงรายละเอียดลึกๆ ลงถึงระดับคำสั่งซึ่งยาวมาก จึงได้แบ่งเป็น 2 ตอน โดยช่วงแรกของตอนที่ 1 เนื้อหาจะไกล้ตัวเข้าใจง่าย แต่ช่วงหลังของตอนที่ 1 และ ตอนที่ 2 ทั้งหมดผู้อ่านผู้อ่านอาจอ่านแล้วไม่เข้าใจเพราะจะพูดถึงการทำงานเบื้องลึกจริงๆ การทำงานทั่ว ๆ ไปของ E-mail โดยสรุปมีเพียง 2 ประเภท คือ การส่ง E-mail และการรับ E-mail โดยโปรโตคอล SMTP (Simple Mail Transfer Protocol ) จะใช้ขณะที่ User agent ส่ง E-mail มาที่ MTA(Mail Tranfer Agent) ( เฉพาะแบบ offline ) และใช้ในขณะรับและส่ง E-mail ระหว่าง MTA ด้วยกัน สำหรับการใช้ mail แบบ offline คือเครื่องที่ผู้ใช้ใช้อ่าน mail ไม่ได้ติดต่อกับเครื่องที่มี mailbox ตลอดเวลา อาจเลือกดาวน์โหลด mail มาเก็บไว้ที่เครื่องของตัวเองนั้น จะมีโปรโตคอลสำหรับรับ E-mail ที่เกี่ยวข้อง ที่ใช้งานกันแพร่หลาย มีอยู่ 2 แบบ คือ โปรโตคอล POP (Post Office Protocol) และ IMAP ( Internet Message Access Protocol) ซึ่งจะทำหน้าที่ download หรือ upload จากเครื่องของผู้ใช้ไปยังเครื่องที่มี MTA อยู่
รูปแบบของข้อมูลที่ใช้ในโปรโตคอลต่าง ๆ ของ E-mail นี่ถูกกำหนดไว้ใน RFC 822 (Request For Commments Number 822) ซึ่งแบ่งส่วนประกอบภายใน E-mail เป็น 2 ส่วน คือ ส่วนที่เป็นจ่าหน้า E-mail และข้อมูลของ E-mail ในส่วนของจ่าหน้า E-mail นี้มีไว้เป็นข้อมูล เพื่อให้ส่งไปถึงผู้รับ รูปแบบของข้อมูลจะเป็นข้อความหรือ Text นำหน้าด้วยคำสำคัญ ( Keyword ) เช่น From หมายถึง ชื่อผู้ส่ง ส่วน to หมายถึง ชื่อผู้รับ เป็นต้น ซึ่งจะคล้ายกับ การที่ต้องกำหนดเมื่อบันทึก E-mail ถัดจาก คำสำคัญ ก็จะเป็นค่าของข้อมูลในชุดนั้น ๆ เช่น From ก็จะต่อด้วยชื่อของผู้ส่ง และ Reply To ก็จะต่อด้วยชื่อของ ผู้รับ เป็นต้น โดยแต่ละบรรทัด จะปิดท้าย ด้วย Carriage Return และ/หรือ Line Feed (ขึ้นอยู่กับระบบปฏิบัติการที่ใช้ เช่น Window จะปิดท้ายด้วย Carriage Return และ Line Feed ส่วนในระบบปฏิบัติการอื่น เช่น UNIX ก็อาจจะใช้เพียง Carriage Return เท่านั้น ) เป็นเครื่องหมายของการสิ้นสุดบรรทัด จะเห็นว่าในส่วนของจ่าหน้า E-mail นี้ มีข้อความที่จำเป็น คือ รายละเอียดของผู้ส่งและผู้รับ ส่วนรายละเอียด อื่น ๆ เช่น รายชื่อผู้รับสำเนา (Cc) จะมีหรือไม่มีก็ได้
มาถึงส่วนที่เป็นข้อมูลของ E-mail ซึ่งจะแบ่งย่อยออกได้เป็น 2 ส่วน คือ ส่วนหัว (header) และส่วนเนื้อความ (body) ของ E-mail ส่วนหัวนี้จะถูกสร้างขึ้นอย่างอัตโนมัติโดย user agent ของผู้ส่ง เพื่อให้ MTA ต่าง ๆ ระหว่างทางที่ส่งผ่าน E-mail ฉบับนั้นได้อ่านไปใช้งาน ซึ่งประกอบด้วยข้อมูลต่าง ๆ หลายประเภท ตัวอย่างของข้อมูลในส่วนหัวของ E-mail ได้แก่ เลขทะเบียนของ E-mail (message header) ,วันที่และเวลาที่ส่ง เป็นต้น ส่วนที่เป็นเนื้อความของ E-mail นั้นจะเป็นบรรทัดที่แยกจากส่วนหัว โดยถูกคั่นด้วยบรรทัดว่าง ๆ (null line) และในแต่ละบรรทัดของเนื้อความจะสิ้นสุดบรรทัดด้วย Carriage Return และ/หรือ Line Feed
ตามข้อกำหนด RFC 822 ในการส่ง E-mail ผ่าน internet นั้นแต่ละบรรทัดจะมีขนาดยาวไม่เกิน 1,000 ไบต์ และขนาดของ E-mailแต่ละครั้งจะไม่เกิน 64 กิโลไบต์ ซึ่งผู้ส่งไม่จำเป็นต้องสนใจว่า E-mail ที่ส่งไปนั้น จะผ่านไปที่ MTA ใดบ้าง เนื่องจาก E-mail ถูกเข้ารหัสและส่งไปถึงยัง User agent ของผู้รับปลายทาง และผ่านการถอดรหัสได้โดยอัตโนมัติ
ตัวอย่างข้อมูลในอีเมล์ (ส่วนของ Message Header )
From: deoinbox@thai.comTo: webmaster@nextproject.netSubject: book schedule Date: Mon, 3 Jan 94 10:50:11 CSTReceived: from mail.thai.com by mailnextproject.net(5.65/1.8)Message-Id: 9401031650.AAA7058@mail.thai.com
ส่วนของ Message Body
Hi,
We need to talk about the book schedule. Let me know when you are available.
Thanks,Deo
จากองค์ประกอบของโปรโตคอลและวิธีการรับส่งอีเมล์ที่กล่าวผ่านมา ทำให้การใช้อีเมล์ในปัจจุบันซึ่งทำงานแบบ Client Server สามารถทำงานได้ 3 แบบ คือ 1. แบบ Offline หรือเรียกว่า Download and Delete ซึ่งเป็นมาตราฐานทั่วไป ในการใช้งานกับอีเมล์ของอินเตอร์เน็ต ซึ่งใช้โปรโตคอล เช่น POP โดย User Agent ของผู้รับจะ download E-mail ทั้งหมดมาจาก Mail Server และลบอีเมล์เหล่านั้นออกไป ในโปรแกรมไคล์เอนต์ของอีเมล์บางโปรแกรมสามารถให้เลือกได้ว่าต้องการลบอีเมล์ที่ download มาแล้วทางฝั่งเซิร์ฟเวอร์นั้นทิ้งหรือไม่ ) ทำให้ผู้ใช้สามารถอีเมล์นั้นได้ตลอดเวลา โดยไม่จำเป็นต้องติดต่อ Mail Server อีก แต่ User Agent จะไม่รู้ว่ามีอีเมล์เข้ามาใหม่จนกว่าจะติดต่อเข้าไปยังเมล์เซิร์ฟเวอร์และ download อีเมล์เข้ามาใหม่ 2. แบบ Online เป็นแบบที่อีเมล์ด้าน User Agent ของผู้รับจะต้องติดต่อกับเมล์เซิร์ฟเวอร์ของผู้รับเองตลอดเวลาที่ใช้อีเมล์ ซึ่งระบบที่ให้บริการอีเมล์แบบนี้จะสามารถเปิดแชร์ mailbox ที่ เซิร์ฟเวอร์ได้ตลอดเวลา เช่น NFS (Network File System) หรือ CIFS (Common Internet File System) เป็นต้น 3. แบบ Disconnected เป็นแบบผสมผสานระหว่างแบบ Offline และ Online โดยอาศัย mail server ของผู้รับเป็นที่หลักในการจัดเก็บข้อมูลของอีเมล์ และในส่วนเนื้อที่ของ User Agent นี้ จะเป็นที่เก็บอีเมล์สำรอง โดยเมื่อมีการ download อีเมล์มาก็จะทำงานในแบบของ Offline เพื่อลดภาระในการติดต่อกับ mail server ตลอดเวลา แต่ข้อมูลอีเมล์จะต้องไม่ถูกลบออกจากเมล์เซิร์ฟเวอร์ ผู้ใช้สามารถโหลดอีเมล์ที่แก้ไขแล้ว กลับไปยัง mail server ในภายหลังได้ เช่น การแก้ไขหรือตอบกลับอีเมล์ (Reply to) ที่ส่งมา เป็นต้น
POP3 สำหรับผู้ที่ใช้งาน E-mail บน internet มาแล้ว คงจะคุ้นเคยกับโปรโตคอลที่เรียกว่า POP กันเป็นอย่างดี เพราะเป็นโปรโตคอลที่ทำหน้าที่โหลด E-mail มาจาก MTA ไปยัง User Agent ซึ่งในปัจจุบันได้พัฒนามาจนถึง version 3 แล้ว หรือเรียกย่อ ๆ ว่า POP3 (Post Office Protocol version 3) โปรโตคอลนี้เป็นตัวแรกที่ถูกออกแบบมาเพื่อใช้รับ E-mail และเพื่อให้สนับสนุนการทำงานแบบ offline ซึ่งกลไกของ POP3 นี้จะทำงานในแบบ Offline โดยติดต่อเข้าไปยัง mail server แล้ว download E-mail ทั้งหมดมาไว้ที่ User Agent จากนั้นจะลบ E-mail ที่ server นั้น ทิ้งไป เพื่อป้องกันการ download ซ้ำ แต่ผู้ใช้จะทำงานแบบ online กับ server ไม่ได้ เนื่องจากการอ่าน E-mail จะดึง E-mail ที่เก็บไว้ใน User Agent ขึ้นมาให้อ่านหลังจากที่ download มาเก็บไว้ ซึ่งในขณะนั้น อาจไม่ได้ online อยู่กับ network ก็ได้ โปรโตคอลของ POP3 นี้จะทำงานในแบบของไคลเอนต์เซิร์ฟเวอร์ คือ มีโปรแกรม POP Server ใน mail server และ POP Client ในเครื่องของผู้รับ ซึ่งปกติจะฝังอยู่ในโปรแกรมที่เป็น User Agent เลย โปรแกรมทั้ง2 จะติดต่อกันโดยใช้คำสั่งที่เป็นรหัส ASCII คือเมื่อด้านที่รับทำคำสั่งก็จะทำงานตามคำสั่งนั้น แล้วตอบกลับมามีค่าเป็น ( +OK ) หมายถึง ทำงานได้เรียบร้อย หรือ (-ERR) หมายถึง เกิดปัญหาขึ้นทำงานไม่ได้ ซึ่งในคำสั่งที่ต้องมีการตอบกลับและส่งข้อมูลกลับมา โดยประกอบด้วยข้อมูลหลาย ๆ บรรทัดนั้น POP3 จะให้บรรทัดสุดท้ายเป็นเครื่องหมาย (.) ตามด้วย Carriage Return และ Line Feed หมายถึงการสิ้นสุดชุดข้อมูล แต่ในกรณีที่ข้อมูลบรรทัดสุดท้าย มีข้อมูลที่เป็นจุดด้วย จะใช้เทคนิคที่เรียกว่า Character Stuffing เพื่อแก้ปัญหา โดยจะเติมจุดลงไปอีก 1 ตัว เพื่อเป็นตัวบ่งชี้ ว่าข้อมูลนั้นเป็นจุด ซึ่งจะแตกต่างจากสัญลักษณ์แสดงการสิ้นสุดของข้อมูล การทำงานของ POP3 จะทำงานร่วมกับโปรโตคอล TCP(Transmission Control Protocol ) โดยทั่วไป จะใช้ port 110 ในการติดต่อ ขั้นตอนการทำงานของ POP3 จะประกอบด้วย 3 สถานะ คือ สถานะขออนุมัติ,สถานะรับส่งรายการ และสถานะปรับปรุงข้อมูล ซึ่งในแต่ละสถานะจะรับรู้คำสั่งต่าง ๆ ของโปรโตคอลที่แตกต่างกัน ดังนี้ 1.สถานะขออนุมัติ ( Authorization State ) เมื่อเริ่มต้นติดต่อกับเซิร์ฟเวอร์จะเป็นการ เข้าสู่สถานะการขออนุมัติ โดยไคลเอนต์จะต้องแจ้งชื่อผู้ใช้ และรหัสผ่าน ( password ) เพื่อขออนุมัติจากเซิร์ฟเวอร์ก่อน โดยไคลเอนต์จะใช้คำสั่ง USER เพื่อระบุชื่อผู้ใช้ หรือคำสั่ง PASS เพื่อกำหนด Password แต่ในกรณีที่ชื่อ Password ถูกเข้ารหัสไว้ และไม่ได้เป็นค่า ASCII ทั่วไป ไคลเอนต์จะใช้คำสั่ง APOP ทำงานแทนคำสั่ง USER และ PASS 2. สถานะรับส่งรายการ ( Transaction State ) หลังจากที่ได้รับอนุมัติจากเซิร์ฟเวอร์แล้ว ก็จะเข้าสู่สถานะที่ใช้คำสั่งในการทำงานต่าง ๆ 3.สถานะปรับปรุงข้อมูล ( Update State ) เมื่อ User Agent เลิกใช้งานด้วยคำสั่ง QUIT ของ POP3 เซิร์ฟเวอร์ก็จะเข้าสู่สถานะปรับปรุงข้อมูล เพื่อลบอีเมล์ที่ดาวน์โหลดเรียบร้อยแล้วออกไป จากนั้นก็จะเข้าสู่สถานะขออนุมัติใหม่โดยอัตโนมัติ เพื่อรอรับการทำงานครั้งต่อไป สถานะขออนุมัติ ( Authorization State ) เมื่อ POP3 Client ติดต่อกับ POP3 Server ก็จะแสดงบรรทัดติดต่อขึ้นมาบรรทัดหนึ่ง และบอกจุดสิ้นสุดด้วย CRLF (Carriage Return Line Feed ) ตัวอย่างเช่น s :+OK POP3 server read เป็นการตอบรับของ POP3 ซึ่ง POP3 server จะแสดงเครื่องหมาย + บอกการตอบรับว่าในขณะนั้นสามารถให้บริการแก่ Client ตามที่ร้องขอ เมื่อ POP3 อยู่ในฐานะ Authorization State แล้วก็จะทำการยืนยันแก่ POP3 server โดยมีวิธีการยืนยันอยู่สองวิธี คือ- คำสั่ง USER รวมกับคำสั่ง PASS - คำสั่ง APOP การใช้คำสั่ง USER และคำสั่ง PASS ในขั้นแรก Client ต้องใช้คำสั่ง USER ก่อนถ้า POP3 Server ตอบมาด้วยสถานะบ่งชี้ว่าเป็นเครื่องหมาย + ("+OK") เครื่อง client ก็จะใส่คำสั่ง PASS เข้าไปในการทำงานหรือคำสั่ง QUIT เพื่อบอกสถานะว่าหยุดการทำงานถ้าหากสถานะบ่งชี้เป็นเครื่องหมาย - ("ERR") เครื่อง Client ต้องส่งคำสั่งไปใหม่หรือยกเลิกโดยใช้คำสั่ง Quit ไปเลยก็ได้ เมื่อเครื่อง Client ส่งคำสั่ง Pass แล้ว POP3 Server จะใช้ทั้งคำสั่ง USER และ PASS เพื่อพิจารณาว่าเครื่อง Client ใดสามารถเข้าไปใช้งานภายใน maildrop ได้ POP3 Server ได้มีการจำกัดการเข้าถึงใน Maildrop เพื่อป้องกันไม่ให้ผู้ที่ไม่มีสิทธิ์เข้าไปทำการเปลี่ยนแปลงหรือลบข้อมูลใน Maildrop ก่อนจะเข้าสู่ช่วง Update State ถ้าการ lock สำเร็จ POP3 Server ก็จะตอบสนองด้วยสถานะการบ่งชี้ เป็น + ขณะนี้ POP3 ก็จะเข้าสู่ช่วง Transaction State ซึ่งไม่มี Message ที่ถูกทำเครื่องหมาย Delete ถ้าไม่สามารถเปิด maildrop เนื่องจากเหตุผลบางประการ เช่น lock ไม่ได้ , Client ปฏิเสธการเข้าถึง Maildrop ที่เหมาะสม หรือ maildrop ไม่สามารถกระจายข้อมูลได้ , Mail Server จะแสดงสถานะบ่งชี้เป็นเครื่องหมาย - ถ้ามีการ lock แต่ POP3 Server ยังแสดงสถานะบ่งชี้เป็นเครื่องหมายลบอยู่ จะต้องดูที่สำดับการ LOCK ในการปฏิเสธคำสั่ง หลังจากได้รับตัวบ่งชี้สถานะเป็นเครื่องหมายลบ Server ก็จะปิดการติดต่อถ้า Server ยังไม่ปิดการติดต่อเครื่อง Client ก็จะส่งคำสั่งมาอีก หรือไม่ก็ใช้คำสั่ง Quit ออกไปเลยเมื่อ POP3 Server ได้เปิด Maildrop ก็จะส่งหมายเลข Message ไปยังแต่ละ Message ซึ่งขนาดของแต่ละ Messagee จะอยู่ในรูปของเลขฐาน 8 ข้อความแรกใน Maildrop จะได้รับหมายเลข Message เป็น 1ลำดับที่สอง ก็เป็น 2 ตามลำดับไปเรื่อยๆ คำสั่ง POP3 และหมายเลขจะเป็นเลขฐาน 10 ตัวอย่าง USER name Arguments: String ที่ระบุใน mailbox ที่เจาะจงจะส่งไปให้ Server Restriction: จะถูกใช้ในช่วง Authorization State หลังจากมีการตอบรับจาก POP3 หรือหลังจากใช้คำสั่ง USER และ PASS ไม่สำเร็จ Possible Response: +OK มีชื่อที่ระบุไว้ใน mail box -ERR ไม่มีชื่อที่ระบุไว้ใน mail box Examples: C: USER mroseS: +OK mrose is a real hoopy frood......................................................C: USER fratedS: -ERR sorry, no mailbox for frated here PASS StringArguments: ระบุ Password ของ Server หรือ MailboxRestriction: เข้าสู่ช่วง Authorization State หลังจากคำสั่ง USER สำเร็จ Discussion: ต้องมีการใส่ Password ทุกครั้งซึ่ง POP3 Server จะถือว่าช่องว่างที่ใส่ลงไปนั้นเป็นPassword Possible Responses: +OK คือ มีการ lock maildrop และพร้อมที่จะใช้งานแล้ว -ERR Password ไม่ถูกต้อง-ERR ไม่สามารถ Lock Maildrop ได้ Examples: C: USER mroseS: +OK mrose is a real hoopy froodC: PASS secretS: +OK mrose's maildrop has 2 messages (320 octets) ...C: USER mroseS: +OK mrose is a real hoopy froodC: PASS secretS: -ERR maildrop already lockedQUIT Arguments: none Restrictions: nonePossible Responses: +OKExamples: C: QUITS: +OK dewey POP3 server signing off Transaction State เมื่อเครื่อง Client ได้แสดงการติดต่อไปยังเครื่อง POP3 Server แล้ว POP3 Server จะทำการ Lock และเปิด Maildropที่ต้องการซึ่งตอนนี้ก็จะเป็นการเข้าสู่ Transaction State หลังจากที่ได้รับอนุมัติจาก Server ก็จะเข้าสู่สถานะในการทำงานต่าง ๆ และเมือเครื่อง Client ใช้คำสั่ง QUIT ก็จะเข้าสู่ช่วง Update StateSTATArguments : None Restrictions: ถูกกำหนดในช่วง Transaction State Discussion: POP3 Server ที่มีการตอบรับจะใช้เครื่องหมาย + ในบรรทัดที่มีข้อมูลต่าง ๆ ใน Maildrop บรรทัดนี้เรียกว่า Drop Listing ของ Maildrop นั้น เพื่อให้การทำงานง่ายขึ้น POP3 Server ทั้งหมดต้องใช้รูปแบบที่แน่นอนของ Drop Listing นั้น กรณีตอบรับจะขึ้นคำสั่ง +OK และตามด้วย Single Space และขนาดของ maildrop ในรูปของเลขฐาน 8 การนำไปใช้ขั้นพื้นฐานก็สิ้นสุดบรรทัดด้วย CRLF Pair แต่ขั้นประยุกต์อาจจะมีข้อมูลอื่น ๆ รวมอยู่ด้วย Examples: C: STAT S: +OK 2 320List ( msg )Arguments : message number ที่มีอยู่ซึ่งไม่ได้หมายถึง Message ที่ถูก Mark ว่า Delete Restriction: ใช้เฉพาะในช่วง Transaction State vDiscussion: ถ้ามีการใส่ Argument และสถานะของ Server เป็นเครื่องหมาย + ตามด้วยบรรทัดซึ่งบรรจุข้อมูลใน Message นั้น บรรทัดนี้เรียกว่า Scan Listing แต่ถ้าไม่มีการให้ Argument และ POP3 Server ไม่แสดงเครื่องหมาย + ก็จะมีการตอบรับเป็น Multiline หลังจากกำหนด + OK ของแต่ละ Message ใน Maildrop POP3 Server จะตอบรับด้วยบรรทัดที่บรรจุข้อมูลในข้อความนั้น ซึ่ง บรรทัดนี้เรียกว่า Scan Listing Scan Listing ประกอบด้วย Message ตามด้วย single space และขนาดที่แท้จริง ของ Messageในรูปของเลขฐาน 8 การใช้งานพื้นฐานก็เพียงแค่จบด้วย CRLF แต่ขั้นสูงอาจจะต้องมีการใช้ข้อมูลอื่น ๆ สำหรับ Message Possible Responses: +OK scan listing follows-ERR no such messageExamples: C: LISTS: +OK 2 messages (320 octets)S: 1 120S: 2 200S: ....C: LIST 2S: +OK 2 200...C: LIST 3S: -ERR no such message, only 2 messages in maildropRETR msg Arguments: ต้องมีหมายเลข Message ซึ่งจะไม่ได้หมายถึง Message ที่ถูก Mark ว่าจะ DeleteRestrictions:ใช้เฉพาะในช่วง Transaction State Discussion: ถ้า POP3 Server แสดงการตอบรับเป็นเครื่องหมาย + และการตอบรับเป็นแบบ Multiline หลังจากเริ่มว่า +OK แล้ว POP3 Server จะส่งข ้อความตอบรับเพื่อให้หมายเลข Message และใส่ Byte Stuff แสดงจุดสิ้นสุดของตัวอักษร Possible Responses:+OK message follows-ERR no such message Examples:C: RETR 1S: +OK 120 octetsS: (the POP3 server sends the entire message here)S: . DELE msgArguments:ต้องมีหมายเลข Message ซึ่งจะไม่ได้หมายถึง Message ที่ถูก Mark ว่าจะ DeleteRestrictions:ใช้เฉพาะในช่วง Transaction State Discussions: POP3 Server จะ Mark ข้อความที่ Delete เมื่อมีการอ้างถึงหมายเลข message ที่ติดต่อกับ message ที่ Error ซึ่ง POP3 Server จะไม่ลบข้อความไปจริงๆจนกว่าจะเข้าสู่ช่วง Update State Possible Responses :+OK message deleted-ERR no such messageExamples: C: DELE 1S: +OK message 1 deleted...C: DELE 2S: -ERR message 2 already deleted NOOP Arguments: noneRestrictions: POP3 Server ไม่ทำอะไรจะตอบรับสถานภาพเป็นเครื่องหมาย + เท่านั้นPossible Responses:+OKExamples:C: NOOPS: +OK RSETArguments : none Restrictions: ใช้ในช่วง Transactions StateDiscussions: ถ้า POP3 Server มีข้อความที่ถูก Mark ว่า Delete ถ้าใช้คำสั่งนี้จะทำการยกเลิกการ Mark ซึ่งจะทำให้ POP3 Server จะแสดงสถานะเป็นเครื่องหมาย +Possible Responses:+OK Examples:C: RSETS: +OK maildrop has 2 messages (320 octets) The Update State เมื่อ Client ได้รับคำสั่ง Quit จาก Transaction State แล้วก็จะเข้าสู๋ช่วง Update State (กรณีที่ Client ใช้คำสั่ง Quit ในช่วง Authorization State POP3 Session จะสิ้นสุดแต่ไม่ได้ถือว่าเข้าช่วง Update State ถ้าในช่วงของ POP3 สิ้นสุดลงด้วยเหตุผลบางประการที่ไม่ใช่เฉพาะคำสั่ง Quit POP3 Session จะไม่เข้าสู่ช่วง Update State และต้องไม่กำจัดข้อความใด ๆ ออกจาก Maildrop QUIT Arguments: noneRestrictions : noneDiscussions: POP3 Server จะกำจัดข้อความทั้งหมดที่ถูก mark ว่าจะให้ลบจาก maildrop ซึ่งมันจะถูกลบจาก maildrop ในขั้นตอนนี้Possible Responses:+OK Examples:C: QUITS: +OK dewey POP3 server signing off (maildrop empty)...C: QUITS: +OK dewey POP3 server signing off (2 messages left)
คำสั่ง POP3 ข้างต้นเป็นเพียงคำสั่งพื้นฐานทั่วไปที่ใช้งานอย่างง่ายเท่านั้นคำสั่งข้างล่างนี้จะอธิบายเกี่ยวกับการอนุญาตให้ POP3 Client มีอิสระในการจัดการข้อความขณะที่ใช้ POP3 Server ทั่ว ๆ ไป คำสั่งเหล่านี้จะสนับสนุนการนำไปใช้จะถูกนำไปใช้ในตำแหน่งของ Drop Listing และ Scan Listing ที่มีการพัฒนาเพิ่มขึ้น ซึ่งจะถูกใส่ลงไปในส่วนของ POP3 Client ไม่ใช่ส่วนของ POP3 Server เช่น Arguments: ต้องมีหมายเลข Message ซึ่งไม่ใช่ข้อความที่ถูก mark ให้ทำการลบและมีหมายเลข Non-negativeRestrictions:ใช้เฉพาะในช่วง Transections State เท่านั้นDiscussions: ถ้า POP3 แสดงสถานะเป็นเครื่องหมาย + และมีการตอบรับเป็นแบบ Multiline หลังจากขึ้นว่า +OK แล้ว POP3 Server ก็จะส่ง Header ของข้อความและช่องว่างที่แยก Header ออกจาก Body ซึ่งหมายเลขบรรทัดจะเป็นตัวบ่งชี้ Body ของ Message และมีการใส่ Byte Stuff บอกจุดสิ้นสุดของตัวอักษร หมายเหตุ ถ้าจำนวนบรรทัดที่มีการร้องขอจาก POP3 Client มีค่ามากกว่าจำนวนบรรทัดในส่วนของ Body แล้ว POP3 Server ก็จะทำการส่ง message ทั้งหมดไปให้ Possible Responses:+OK top of message follows-ERR no such messageExamples:C: TOP 1 10S: +OKS: (the POP3 server sends the headers o message, a blank line, and the first 10 linesof the body of the message)S: ....C: TOP 100 3S: -ERR no such message UIDL (msg)Arguments: หมายเลขข้อความ (สามารถเลือกหมายเลขได้) ถ้ามีการกำหนดหมายเลข message จะไม่ใช่หมายเลขที่ถูก mark ว่าให้ลบRestrictions: ใช้เฉพาะในช่วง Transactions State Discussions: ถ้ามีการกำหนด Argument และ POP3 Server มีการแสดงสถานะเป็นเครื่องหมาย + พร้อมด้วยบรรทัดที่บรรจุข้อมูลสำหรับ ข้อความนั้นบรรทัดนี้จะเรียกว่า "unique-id listing" ถ้าไม่มี Argument ที่กำหนดให้และ POP3 Server ไม่แสดงสถานะเป็นเครื่องหมาย + ซึ่งการตอบรับก็จะเป็น multiline หลังจากขึ้น + OK ในแต่ละ Message ใน maildrop POP3 Server ก็จะตอบรับด้วยบรรทัดที่บรรจุข้อมูลสำหรับข้อความซึ่งบรรทัด นี้เรียกว่า "unique-id listing" POP3 Server ต้องใช้รูปแบบสำหรับ unique-id listing ซึ่ง unique-id listing จะประกอบด้วย หมายเลขข้อความตามด้วยช่องว่างและ unique-id listing ซึ่ง message จะไม่มีข้อมูลตาม unique-id ของ unique-id listing unique-id ของ message เป็นตัวพิจารณา String ซึ่งประกอบด้วยตัวอักษรในช่วง 0x21-0x7e และระบุข้อความภายใน maildrop ที่ต่างกันไปและจะข้ามไป session ต่อไป Server จะไม่นำเอา unique-id ที่ให้ใน maildrop มาใช้อีกจนกว่าจะมีการยกเลิก หมายเหตุ message ที่ถูก mark ว่าจะ delete APOP name digest Arguments:ต้องมีการใช้ String เพื่อระบุ mailbox และมี MD5 เป็นตัวแยก String Restrictions : ใช้ในช่วง AUtolization State หลังจากมีการตอบรับแบบ POP3 Discussions : โดยปกติแต่ละ POP3 Session จะเริ่มต้นด้วยการใส่ User/Password ผลก็คือ ใน Server หรือ Password ของ User id ที่แน่นอนจะถูกส่งไปในแต่ละช่วงที่ใช้ POP3 ซึ่งไม่ขอแนะนำให้ใช้เนื่องจากมีอัตราความเสี่ยงสูง อย่างไรก็ตาม การใช้ POP3 Client หลายๆเครื่องในการติดต่อกับ POP3 Server ก็เป็นกฎมาตรฐานในการเช็ค mail ใหม่ระหว่างที่เป็นช่วงเริ่มต้นจะใช้เวลาประมาณ 5 นาที ดังนั้นความเสี่ยงในการจับ Password ก็จะเพิ่มขึ้นวิธีหนึ่งที่เชื่อถือได้จะต้องมีการจัดหาที่มาที่เชื่อถือได้และมีระบบ การป้องกันแต่ไม่ได้เกี่ยวกับการส่ง Password ซึ่งคำสั่ง APOP ก็จะมีหน้าที่นี้ POP3 Server ซึ่งใช้คำสั่ง APOP ซึ่งมีการใช้ Syntax ของ Timestamp โต้ตอบเรียกว่า msg-id และต้องและจะต้องแตกต่างกัน ตัวอย่างเช่น ในการใช้บน UNIX จะแยก UNIX Process ที่ถูกใช้ในแต่ละ Instance ใน POP3 Server Syntax ของ Timestamp มีดังนี้ (process-ID.clock@hostname) Process-id เป็นค่าเลขฐาน 10 ของ PID Process Clock เป็นค่าเลขฐาน 10 ของระบบ ClockHostname เป็น Domain name ไปยัง Host ที่ POP3 Server Run อยู่ POP3 Client จะทำ Note ใน Timestamp นี้ เมื่อใช้คำสั่ง APOP แล้ว name ซึ่งเป็น Parameter ของคำสั่ง USER Digest Parameter ซึ่งถูกคำนวณโดยการใช้ MD5 Algorithm String จะประกอบ Timestamp ตามด้วย Share secret ซึ่ง Share secret จะเป็น String ที่รู้จักเฉพาะใน POP3 Server และ Client ควรมีการดูแลเพื่อป้องกันความปลอดภัยของข้อมูลที่เป็นความลับเพราะข้อมูลนี้จะเข้าไปใน Entity ใดก็ได้โดยใช้ชื่อ User name คนใดก็ได้ Digest Parameter เป็นเลขฐาน 16 และส่งข้อมูลในรูปเลขฐาน 16 และใช้รหัส ASCII เมื่อ POP3 ได้รับคำสั่ง APOP มันจะตรวจสอบความถูกต้องที่ Digest Provided ถ้า Digest ถูกต้อง POP3 Server ก็จะแสดงเครื่องหมาย + และ POP3 Session ก็จะเข้าสู่ช่วง Transaction State ดังนั้นถ้าเป็นเครื่องหมาย - ก็แสดงว่าอยู่ในช่วง Autherization state หมายเหตุ ความยาวของ Share secret ที่เพิ่มขึ้นยากที่จะลดลงมาเช่น Share secret ควรจะเป็น Long String (ควรมีความยาวมากกว่า 8 character)Possible Responses:+OK maildrop locked and ready-ERR permission deniedExamples:S: +OK POP3 server ready <1896 .697170952="" dbc.mtview.ca.us="">C: APOP mrose c4c9334bac560ecc979e58001b3e22fbS: +OK maildrop has 1 message (369 octets)( สรุปคำสั่งในโปรโตคอล POP3) POP3 Command Summary Minimal POP3 Commands:USER name valid in the AUTHORIZATION state PASS stringQUITSTAT valid in the TRANSACTION state LIST [msg]RETR msgDELE msgNOOPRSETQUIT -ERR valid in the UPDATE state Optional POP3 Commands:APOP name digest valid in the AUTHORIZATION stateTOP msg n valid in the TRANSACTION stateUIDL [msg]POP3 Replies:+OK-ERR Example POP3 Session S: (wait for connection on TCP port 110 )C: (open connection) S: +OK POP3 server ready <1896 .697170952="" dbc.mtview.ca.us="">C: APOP mrose c4c9334bac560ecc979e58001b3e22fbS: +OK mrose's maildrop has 2 messages (320 octets)C: STATS: +OK 2 320C: LISTS: +OK 2 messages (320 octets)S: 1 120S: 2 200S: .C: RETR 1S: +OK 120 octetsS: (the POP3 server sends message 1) S: .C: DELE 1 S: +OK message 1 deletedC: RETR 2S: +OK 200 octetsS: (the POP3 server sends message 2)S: . C: DELE 2S: +OK message 2 deletedC: QUITS: +OK dewey POP3 server signing off (maildrop empty)C: (close connection)S: (wait for next connection)
สรุปรายละเอียดของคำสั่งต่างๆใน POP3
คำสั่ง
พารามิเตอร ์
สถานะ
รายละเอียด
USER
ชื่อผู้ใช้งาน
ขออนุมัติ
แจ้งชื่อผู้ใช้และระบุ Mailbox ที่จะใช้
PASS
Password
ขออนุมัติ
เป็นคำสั่งที่ใช้ระบุ Password โดยจะใช้ต่อจากคำสั่ง USER
APOP
ชื่อ, Password
ขออนุมัติ
ทำหน้าที่เหมือนคำสั่ง USER และ PASS รวมกันแต่ข้อมูลจะถูกเข้ารหัสก่อนส่งไป
STAT
ไม่ระบ ุ
รับส่งรายการ
เป็นคำสั่งตรวจสอบสภาพเซิร์ฟเวอร์,ขนาดของอีเมล์ที่จะดาวน์โหลด
UIDL
หมายเลขข้อความ
รับส่งรายการ
ใช้ตรวจสอบหมายเลขประจำของอีเมล์
LIST
หมายเลขข้อความ
รับส่งรายการ
ใช้ตรวจสอบหมายเลขของอีเมล์ และขนาดของอีเมล์
RETR
ข้อความ
รับส่งรายการ
เป็นคำสั่งทีใช้ส่งข้อมูลของอีเมล์
DELE
ข้อความ
รับส่งรายการ
เป็นการระบุเครื่องหมายการลบลงในอีเมล์ที่จะลบ และอีเมล์เหล่านั้นจะถูกลบออกจากเมล์บ็อกซ์เมื่อใช้คำสั่ง QUIT เมื่อสิ้นสุดการทำงาน
RSET
ไม่ระบุ
รับส่งรายการ
คำสั่งนี้จะยกเลิกเครื่องหมายการลบอีเมล์ ที่เคยกำหนดไว้ด้วยคำสั่ง DELE ออกไปทุก ๆ อีเมล์
TOP
หมายเลขข้อความ,จำนวนบรรทัด
รับส่งรายการ
เซิร์ฟเวอร์จะส่งข้อมูลย้อนกลับไปเท่ากับจำนวนบรรทัดที่ระบุ
NOOP
ไม่ระบ ุ
รับส่งรายการ
เป็นคำสั่ง No Operation
QUIT
ไม่ระบุ
รับส่งรายการและขออนุมัต

ใช้เมื่อจบการทำงาน หากมีอีเมล์ซึ่งทำเครื่องหมายว่าจะลบไว้ อีเมล์เหล่านั้นจะถูกลบจากเมล์บ็อกซ์ในขั้นตอนนี้
SMTP โปรโตคอลที่คู่กับ POP3 คือ SMTP เพราะเป็นโปรโตคอลที่ใช้ส่งอีเมล์จาก User agent ของผู้ส่งไปยัง MTA ของผู้ส่ง และส่งต่อไปยัง MTA เครื่องอื่น ๆ ที่เป็นจุดผ่านในการเชื่อมต่อไปยังเครื่องของผู้รับ โปรโตคอล SMTP จะทำงานร่วมกับโปรโตคอล TCP โดยใช้พอร์ต 25 ซึ่งคำสั่งต่าง ๆ ของ SMTP จะเป็นลักษณะเดียวกับ POP3 คือเป็น ASCII ลงท้ายด้วย Carrige Return และ Line Feed ส่วนข้อความที่ตอบกลับมาจะนำหน้าด้วยเลข 3 หลัก เป็นสัญลักษณ์แสดงลักษณะการทำงานของคำสั่งที่ได้รับ เมื่อเริ่มต้นการติดต่อ SMTP จะกำหนดให้ User Agent ของผู้ส่งต้องส่งคำสั่ง HELLO พร้อมกับรายละเอียดด้านผู้ส่งออกไป จากนั้นจะส่งคำสั่ง MAIL เพื่อแจ้งให้เซิร์ฟเวอร์เตรียมรับอีเมล์ ในส่วนของเซิร์ฟเวอร์เมื่อพร้อมที่จะรับอีเมล์ก็ตอบรับอีเมล์ก็รับอีเมล์ก็ตอบรับกลับมาด้วย คำสั่ง OK จากนั้นที่ด้านส่งก็จะเริ่มส่งโดยใช้คำสั่ง RCPT เพื่อกำหนดอีเมล์แต่ละฉบับไปที่ส่งไป ซึ่งการส่งข้อมูลของอีเมล์ก็จะระบุด้วยคำสั่ง DATA การส่งอีเมล์ของโปรโตคอล SMTP ได้จัดเตรียมคำสั่งอื่น ๆ ไว้เพื่ออำนวยความสะดวกและคล่องตัวในการทำงาน ซึ่งประกอบด้วย คำสั่ง VRFY เพื่อให้ด้านที่ส่งตรวจสอบรายชื่อว่าผู้ใช้รายนี้มีสิทธิ์ใช้งาน E-mailbox นั้น ๆ หรือไม่ , คำสั่ง EXPN ใช้จัดการและตรวจสอบรายชื่อจากลิสต์รายชื่อ และคำสั่ง TURN ใช้สลับให้ Client ของผู้ส่งทำหน้าที่รับข้อมูลจากเซิร์ฟเวอร์แทน เมื่อได้รับคำสั่งต่างๆ ของผู้ส่งแล้ว เซิร์ฟเวอร์จะมีหน้าที่ตรวจสอบความถูกต้องของคำสั่ง จากนั้นจึงทำงานตามคำสั่งแล้วส่งผลตอบกลับมา ส่วนลักษณะของข้อมูลที่ตอบกลับ ( Reply Message ) นั้นจะเป็นข้อมูลที่อยู่ในรูปของ Text ที่เป็น ASCII โดยจะประกอบด้วยตัวเลข นำหน้าข้อความสามหลัก ทำหน้าที่แสดงสถานะการทำงานของเซิร์ฟเวอร์ และเปลี่ยนสถานะการทำงานของโปรโตคอล SMTP ด้วย ถัดจากตัวเลขจะคั่นด้วยช่องว่างแล้วตามด้วยเครื่องหมาย Carriage Return และ Line Feed ตัวอย่างเช่น 500 Syntax error, command unreconized หมายถึงคำสั่งที่ส่งไปไม่ถูกต้อง หรือ 503 Bad sequence of commands หมายถึง ลำดับการส่งคำสั่งไม่ถูกต้อง เหล่านี้เป็นต้น ในการส่งอีเมล์ของโปรโตคอล SMTP นั้น จะใช้วิธีอ้างถึงเซิร์ฟเวอร์อื่น ๆ ตามแบบ DNS (Domain Name System) เช่นเดียวกับระบบอื่น ๆ ในอินเทอร์เนต และยังสามารถส่งอีเมล์ๆไปยังผู้รับคนเดียวหรือหลาย ๆ คนพร้อมกันได้ด้วย
ตารางแสดงรายละเอียดในคำสั่งต่าง ๆ ของ SMTP ที่ใช้งานอยู่
คำสั่ง
รายละเอียด
HELLO
ใช้เมื่อไคลเอนต์ของอีเมล์ต้องการเริ่มติดต่อกับเซิร์ฟเวอร์
MAIL
เริ่มเข้าสู่สถานะการส่งอีเมล์
RCPT
เป็นคำสั่งเพื่อระบุอีเมล์ที่จะส่งทีละฉบับ โดยเป็นคำสั่งที่ใช้ต่อจาก MAIL
DATA
จะเป็นคำสั่งที่ใช้ต่อจาก RCPT เพื่อส่งข้อมูลของอีเมล์
SEND
ทำหน้าที่เหมือนคำสั่ง DATA แต่ไม่ค่อยมีผู้ใช้งาน
SOML
ทำหน้าที่เหมือนคำสั่ง DATA แต่ไม่ค่อยมีผู้ใช้งาน
SAML
ทำหน้าที่เหมือนคำสั่ง DATA แต่ไม่ค่อยมีผู้ใช้งาน
VRFY
เป็นคำสั่งที่ใช้เพื่อตรวจสอบความถูกต้องของชื่อและเมล์บ็อกซ์
EXPN
เป็นคำสั่งเพื่อตรวจสอบรายละเอียดของลิสต์รายชื่อ
HELP
ใช้ตรวจสอบคำสั่งที่สามารถใช้งานได้กับเซิร์ฟเวอร์
NOOP
เป็นคำสั่ง No Operation เมื่อเซิร์ฟเวอร์ได้รับคำสั่งนี้จะตอบ OK กลับมา
QUIT
สิ้นสุดการติดต่อ
RSET
ยกเลิกการส่งข้อมูลในขณะนี้
TURN
เป็นคำสั่งที่สลับหน้าที่ของผู้ส่งข้อมูลมาทำหน้าที่รับข้อมูลแทน
SMTP Reply Codes ( ตัวเลขแสดงสถานะของคำสั่ง ) 211 System status, or system help reply214 Help message220 Service ready221 Service closing transmission channel250 Requested mail action okay ,completed251 User not local ; will forward to 354 Start mail input ; end with . 421 Service not available, closing transmission channel 450 Request mail action not taken : mailbox unavailable451 Request action aborted : local error in processing452 Requested action not taken : insufficient system storage500 Syntax error in parameters or arguments501 Syntax error in parameters or arguments 502 Command not implemented503 Bad sequence of commands504 Command parameter not implemented550 Requested action not taken : mailbox unavailable551 User not local ; please try 552 Requested mail action aborted : exceeded storage allocation553 Requested action not taken : mailbox name not allowed554 Transaction failed อีกโปรโตคอลหนึ่งที่ใช้ส่งอีเมล์ ซึ่งมีประสิทธิภาพและสามารถใช้งานได้หลากหลายแบบมากกว่า POP คือโปรโตคอล IMAP ซึ่งถูกพัฒนาโดยมหาวิทยาลัย Standford เมื่อปี ค.ศ. 1986 IMAP ได้รับการพัฒนามาหลายเวอร์ชัน จนถึงปัจจุบันเป็นเวอร์ชัน 4 หรือเรียกกันทั่วไปว่า IMAP 4 จุดเด่นของโปรโตคอล IMAP ก็คือ ผู้ใช้สามารถเลือกดาวน์โหลดเฉพาะอีเมล์ที่ต้องการได้ โดยไม่จำเป็นต้องโหลดมาทั้งหมดเหมือนโปรโตคอล POP3 นอกจากนี้ IMAP ยังสามารถรองรับการทำงานได้ทั้งแบบ Offline, Online และแบบ Disconnected อีกด้วย ดังนั้นประโยชน์ที่ได้จาก IMAP ก็คือ หากผู้ใช้มีอีเมล์แอดเดรสเพียงชื่อเดียว แต่มีเครื่องที่ใช้งานอยู่หลายเครื่องก็จะสามารถเลือกดาวน์โหลดเฉพาะอีเมล์ที่ต้องการมาเก็บไว้ที่เครื่องใดก็ได้ แต่ถ้าเป็น POP3 การดาวน์โหลดจะต้องทำพร้อมกันหมดทุกอีเมล์ ดังนั้น IMAP จึงเป็นโปรโตคอลที่สามารถทำงานกับสายสื่อสารที่มีความเร็วต่ำได้เป็นอย่างดี การทำงานของ IMAP นี้เหมือนกับโปรโตคอลอื่น ๆ โดยทำงานร่วมกับ TCP ใช้พอร์ตหมายเลข 143 และแบ่งเป็นสถานะต่าง ๆ ออกเป็น 4 สถานะ โดยในแต่ละสถานะมีวัตถุประสงค์และคำสั่งที่ใช้งานแตกต่างกัน มีรายละเอียดต่าง ๆ ดังนี้ 1. สถานะก่อนอนุมัติ (Non-authenticated State) เป็นสถานะที่กำลังรอให้ไคลเอนต์ติดต่อเข้ามาเพื่อขออนุมัติใช้ ดังนั้นในด้านไคล์เอนต์จะต้องแจ้งชื่อ Login ของ Mail Server นั้นและ password ด้วยคำสั่ง LOGIN หรือ AUTHENTICATE ก่อนจึงจะเริ่มใช้งานได้ จากนั้นจึงเปลี่ยนไปเป็นสถานะได้รับการอนุมัติ 2. สถานะได้รับการอนุมัติ (Authenticated State) เป็นสถานะที่สามารถใช้คำสั่งต่าง ๆ ที่เกี่ยวกับการเลือกและใช้งานเมล์บอกซ์ เช่น คำสั่ง SELECT เพื่อเลือกเมล์บอกซ์ หรือคำสั่ง CREATE เพื่อสร้างเมล์บอกซ์ เป็นต้น ในการเลือกเมล์บอกซ์ด้วยคำสั่ง SELECT หรือ EXAMINE นี้จะเปลี่ยนไปเป็นสถานะการเลือกเมล์บอกซ์ 3. สถานะการเลือกเมล์บอกซ์ (Selected State) เป็นสถานะที่จะเข้าใช้งานอีเมล์ในแต่ละเมล์บอกซ์ หลังจากที่เลือกเมล์บอกซ์ไว้แล้วในสถานะก่อนหน้านี้ 4. สถานะเลิกใช้งาน (Logout State) เมื่อต้องการเลิกใช้งาน หรือสิ้นสุดการทำงานของ IMAP จะเข้าสู่สถานะเลิกใช้งานโดยใช้คำสั่ง LOGOUTจากสถานะทั้ง 4 นี้ไม่จำเป็นต้องทำงานเรียงต่อกันเสมอไปบางครั้งอาจจะมีการทำงาน ข้ามจากสถานะหนึ่งไปยังอีกสถานะหนึ่งได้ ตัวอย่างเช่น เมื่อเข้าสู่สถานะที่ได้รับการอนุมัติ (Authenticate State) และลบอีเมล์ที่ไม่ต้องการใช้งานทิ้งไปด้วยคำสั่ง DELETE แล้วและไม่ต้องการทำงานอื่น ๆ ต่อก็สามารถใช้คำสั่ง LOGOUT เพื่อเปลี่ยนสถานะเป็นเลิกการใช้งาน (Logout State) ได้โดยไม่จำเป็นต้องเข้าสู่สถานะการเลือกเมล์บอกซ์ (Selected State) ก่อน ซึ่งจะเรียกว่า Untagged response หรือ Asterisk tag (*) ส่วนคำตอบของเซิร์ฟเวอร์ที่เป็นผลการทำงานตามคำสั่งต่าง ๆ ของไคลเอนต์นั้น จะประกอบด้วยคำสั่งทั้งหมด 5 แบบ คือOK แสดงว่าผลการทำงานของคำสั่งนั้น ๆสำเร็จและเรียบร้อยแล้วNO แสดงว่าการทำงานตามคำสั่งนั้นไม่สำเร็จBAD แสดงว่าคำสั่งที่ส่งไปไม่ถูกต้อง หรือมีพารามิเตอร์ไม่ถูกต้องPREAUTH แสดงว่าไม่จำเป็นต้องใช้คำสั่ง LOGIN เพราะเคยมีการสถานะที่ได้รับการอนุมัติ(Authenticated State) แล้วBYE แสดงว่าเซิร์ฟเวอร์ได้จบการทำงานไปแล้วMIMEการเข้ารหัสและ MIME ( Multipurpost InternetMail Extension )การรับส่ง E-mail ผ่านเครือข่ายนั้น คอมพิวเตอร์ที่เชื่อต่ออยู่ในเครือข่ายมักจะมีหลากหลายชนิด ดังนั้น ข้อมูลที่ส่งผ่านจึงจะต้องเป็นข้อมูลที่อยู่ในรูปแบบกลาง ๆ ซึ่ง คอมพิวเตอร์จะรับรู้และเข้าใจได้เหมือนกัน เพื่อไม่ให้ข้อมูลที่รับหรือส่งเหล่านั้นผิดเพี้ยนไปจากความเป็นจริงและสามารถส่งข้อมูลทั้งที่เป็นข้อความและไม่เป็นข้อความ (เช่น ข้อมูลที่เป็นรูปภาพและเสียง ) รวมกันไปในอีเมล์ฉบับเดียวกันได้ ดังนั้นจึงได้นำเทคนิคการเข้ารหัสที่เรียกว่า MIME มาใช้เพื่อเข้ารหัสและถอดรหัสในการรับส่งอีเมล์โดยทั่วไป เทคนิคของ MIME ( Multipurpose Internet Mail Extensions ) นี้เป็นเทคนิคที่แปลงรหัสแอสกี้ทั่วไปซึ่งมี 8 บิตให้เป็นค่า 7 บิต(ให้บิตที่ 0 มีค่าเป็น 0 เสมอ) โดยที่เทคนิคของ MIME นี้จะสามารถใช้รับส่งข้อมูลได้ทุก ๆ รูปแบบ ไม่ว่าจะเป็นข้อมูลของอีเมล์หรือ ไฟล์ประเภทต่างๆ ที่แนบไปกับอีเมล์ ซึ่งอีเมล์บนอินเตอร์เน็ตในยุคแรก ๆ ในกรณีที่ต้องการรับส่งข้อมูลที่มีรูปแบบไฟล์แตกต่างไปจากค่าแอสกี โดยทั่วไปผู้ส่งจะต้องแปลงรหัสข้อมูลก่อนส่งด้วยคำสั่ง UUENCODE เพื่อแปลงข้อมูลให้อยู่ในรูปแบบของ MIME ในด้านผู้รับก็จะต้องถอดรหัสข้อมูลกลับมาอยู่ในรูปแบบเดิมโดยใช้คำสั่ง UUDECOCE ซึ่งทั้ง 2 คำสั่งนี้เริ่มพัฒนาขึ้นมาพร้อมกับระบบปฏิบัติการ UNIX และภายหลังจึงมีการให้ใช้แพร่หลาย ในระบบปฏิบัติการอื่น ๆ แต่ในปัจจุบัน โปรแกรมที่ทำหน้าที่รับส่งอีเมล์จะทำหน้าที่แปลงและถอดรหัสข้อมูลให้อัตโนมัติ โดยไม่จำเป็นต้องอาศัยคำสั่ง UUENCODE และ UUDECODE อีกต่อไปแล้ว ลักษณะข้อมูลของ MIME ประกอบด้วย 2 ส่วน คือ ส่วนหัว หรือเรียกว่า Content Transfer Encode ซึ่งจะเก็บรายละเอียดของไฟล์ที่เข้ารหัสไว้ เช่น ประเภทของไฟล์เป็นต้น ส่วนที่ 2 เป็นส่วนของข้อมูลที่เข้ารหัสแล้ว การเข้ารหัสและการถอดรหัสของ MIME นี้จะถูกระบุ ไว้ในส่วนหัว เพื่อให้ผู้รับและผู้ส่งเข้าใจตรงกันว่า อีเมล์นี้เข้ารหัสและถอดรหัสด้วยวิธีใด ซึ่งมีอยู่ด้วยกัน 6 วิธี คือ
วิธีเข้ารหัสแบบ Quoted-Printable เทคนิคการเข้ารหัสวิธีนี้จะแปลงข้อมูลให้อยู่ในลักษณะที่อ่านได้เสมอ ซึ่งหากข้อมูลเป็น ASCII 7 bit อยู่แล้วก็จะไม่มีการแปลงข้อมูล แต่ถ้าเป็นค่าบิตที่ศูนย์มีค่าเป็น 1 จะถูกแปลงให้มาอยู่ในรูปค่าของเลขฐาน 16 (01234567890ABCDEF) และนำหน้าด้วยเครื่องหมายเท่ากับ (=) ตัวอย่างเช่น ข้อมูลที่เขารหัสแล้วมีค่าเป็น =A1 หมายถึงข้อมูลที่ค่า ASCII เป็น 161 (ในภาษาไทยคือ ค่า 'ก') หรือค่า Hex เป็น A1 เป็นต้น
วิธีเข้ารหัสแบบ Base64 เป็นเทคนิคการเข้ารหัสโดยจะแปลงข้อมูลจำนวน 24 bit (ข้อมูล 8 บิตจำนวน 3 ไบต์ ) ออกเป็นข้อมูล 6 บิตจำนวน 4 ชุด โดยหลังจากที่เข้ารหัสแล้ว ข้อมูลจะถูกแปลงให้อยู่ในรูปของตัวอักษร 64 ตัว มีค่าตามตาราง Base64 Alphabet แต่ข้อมูลดังกล่าวจะไม่เปลี่ยนแปลงค่าของ Carriage Return และ Line Feed และปิดท้ายข้อมูลด้วยเครื่องหมาย = ซึ่งเรียกว่า PAD Binary เป็นข้อมูลที่ต่อเนื่องกันเป็นค่าไบนารี ไม่แบ่งออกเป็นบรรทัด ซึ่งข้อมูลประเภทนี้จะส่งโดยไม่มีการเข้ารหัสข้อมูล
วิธีเข้ารหัสแบบ Seven-Bit เป็นข้อมูลที่มีค่า ASCII 7 บิต ซึ่งข้อมูลประเภทนี้จะส่งโดยไม่มีการเข้ารหัสข้อมูล
วิธีเข้ารหัสแบบ Eight-Bit เป็นข้อมูลที่มีค่า ASCII 8 บิต ซึ่งข้อมูลประเภทนี้จะส่งโดยไม่มีการเข้ารหัสข้อมูล
วิธีเข้ารหัสแบบ X-Token เป็นเทคนิคการเข้ารหัสที่ต้องมีการติดต่อและตกลงกันระหว่างด้านผู้ส่งและผู้รับของ SMTP Server ก่อนเป็นเทคนิคการเข้ารหัสที่ต้องมีการติดต่อและตกลงกันระหว่างด้านผู้ส่งและผู้รับของ SMTP Server ก่อน
การรักษาความปลอดภัยและการเข้ารหัสอีเมล์ การที่ต้องให้อีเมล์มีความปลอดภัยในการรับส่งข้อมูลมากขึ้น ก็เพื่อป้องกันไม่ให้ผู้อื่นลักลอบอ่านข้อความได้ และในการแปลงรหัสตามวิธีของ MIME เน้นได้มีข้อกำหนดเพิ่มเติมเรียกว่า S/MIME ซึ่งพัฒนาขึ้นโดย RSA Data Security Inc. โดยเพิ่มเติมในส่วนของระบบรักษาความ ปลอดภัยขึ้นจากมาตรฐานของ MIME แบบเดิม กระบวนการของ S/MIME ที่ได้เพิ่มในส่วนการทำหน้าที่เข้ารหัสข้อมูล (Encryption) และการส่งลายเซ็นดิจิตอล (Digital Signature) เข้าไปในข้อมูลอีเมล์ การเข้ารหัสข้อมูลนั้น S/MIME จะใช้วิธีการ Public-Key โดยใช้คีย์ที่มีความยาวได้สูงสุด 2,048 บิต และวิธีการเข้ารหัสข้อมูลนั้นมีใช้ทั้งวิธีการเข้ารหัสข้อมูลนั้นมีใช้ทั้งวิธีของ DES (Data Encryption Standard) และ Triple DES ในกรณีการเข้ารหัสของลายเซ็นดิจิตอล นั้น RSA ได้พัฒนาไลบรารีภาษา C ที่เรียกว่า TIPEM เพื่อให้ผู้พัฒนา Software ต่าง ๆ นำไปพัฒนาตามมาตรฐานของ S/MIME
ในปัจจุบันถึงแม้ว่าS/MIMEจะยังไม่ถูกกำหนดให้เป็นโปรโตคอลมาตรฐานในการรักษาความปลอดภัยของอีเมล์ แต่ก็ถือว่าได้รับการยอมรับเป็นมาตรฐานไปโดยปริยายเพราะมีการใช้งานมาก (De facto Standard) เนื่องจากบริษัทพัฒนา Software ชั้นนำหลายแห่ง ไม่ว่าจะเป็น Microsoft,Nescape.Lotus,Verisgnหรือ Novell ก็ตาม ได้นำเอาโปรโตคอล S/MIME นี้ไปใช้งานแล้ว ในขณะที่โปรโตคอล S/MIME กำลังรอการรับรองมาตรฐานอยู่นี้ การเข้ารหัสแบบ MOSS หรือ MIME Object Security Services หรือที่เรียกอีกอย่างหนึ่งว่า PEM-MIME (Privacy Enhanced Mail MIME) ก็กำลังมีการพัฒนาตาม RFC 1848 อยู่ โดย MOSS ได้พยายามแก้ไขจุดอ่อนของ S/MIME จากการที่โปรโตคอล S/MIME จะใช้มาตรฐานการเข้ารหัสแบบเดียวในทุก ๆ ส่วนของอีเมล์ แต่ MOSS จะแบ่งอีเมล์ออกเป็นส่วน ๆ แต่ละส่วนจะใช้วิธีการเข้ารหัสและคีย์ที่แตกต่างกันไป ซึ่งจะช่วยให้อีเมล์มีความปลอดภัยมากยิ่งขึ้น แต่อย่างไรก็ดี ความซับซ้อนของโปรโตคอล MOSS ก็ทำให้การกำหนดมาตรฐานและการพัฒนาผลิตภัณฑ์ออกมามีความยุ่งยากมากขึ้นตามไปด้วย
เรียนรู้คำสั่ง POP3 โดยใช้ Telnet –


บทความนี้เขียนขึ้นเพราะมีผู้อ่านหลายท่านที่ได้อ่าน ระบบอีเมลล์ ตอนที่ 1 และ ระบบอีเมลล์ ตอนที่ 2 แล้วเกิดสงสัยว่าจะทดลองคำสั่งของ POP3 อย่างไร เพื่อจะได้เรียนรู้การทำงานได้ดีขึ้น เพราะคำสั่งเหล่านี้ถ้าคุณใช้ Outlook หรือ โปรแกรมอีเมลล์ ไคลเอ้นอื่นคุณจะไม่ได้เห็นเลย แต่มันจะจัดการให้เป็น background ให้ทั้งหมด วิธีที่จะลองเล่นกับ POP3 แบบนึงที่ผมว่าค่อนข้าง Classic ก็คือ ใช้ Telnet โดยหลัก ๆก็คือ Telnet ไปที่ POP3 Server แล้วก็ป้อน คำสั่งและตัวแปรต่าง ๆตาม บทความ ระบบอีเมลล์ ตอนที่ 1 และ ระบบอีเมลล์ ตอนที่ 2 มาทดลองกันเลยดีกว่านะครับ1. คลิ๊กปุ่ม Start แล้วคลิ๊กเมนู Run หรือเมนู Accessories >> Command Prompt ก็ได้ 2. พิมพ์ Telnet [POP3-Server-Name] [port] แล้วก็คลิ๊ก OK / Enter
[POP3-Server-Name]
ชื่อ POP3 Server ที่เปิดบริการอยู่เช่น mail.yourcompany.com,pop.mail.yahoo.com เป็นต้น ซึ่งค่าตรงนี้จะเป็นค่าเดียวกันกับการตั้งค่า POP3 Server ของ Outlook ที่คุณใช้
[port]
พอร์ต หรือช่องทางติดต่อ ซึ่ง POP3 Server โดยทั่วไป จะมีค่าพอร์ต คือ 110 (well known port)
ให้คุณพิมคำสั่งต่างตามต้องการ โดยคำสั่งแรกที่ต้องใช้คือUSER name Arguments : String ที่ระบุใน mailbox ที่เจาะจงจะส่งไปให้ Server Restriction : จะถูกใช้ในช่วง Authorization State หลังจากมีการตอบรับจาก POP3 หรือหลังจากใช้คำสั่ง USER และ PASS ไม่สำเร็จ Possible Response : +OK มีชื่อที่ระบุไว้ใน mail box -ERR ไม่มีชื่อที่ระบุไว้ใน mail box
Examples : C: USER webmaster@nextproject.net S: +OK mrose is a real hoopy frood
PASS StringArguments : ระบุ Password ของ Server หรือ MailboxRestriction : เข้าสู่ช่วง Authorization State หลังจากคำสั่ง USER สำเร็จ Discussion : ต้องมีการใส่ Password ทุกครั้งซึ่ง POP3 Server จะถือว่าช่องว่างที่ใส่ลงไปนั้นเป็นPassword Possible Responses: +OK คือ มีการ lock maildrop และพร้อมที่จะใช้งานแล้ว -ERR Password ไม่ถูกต้อง -ERR ไม่สามารถ Lock Maildrop ได้
หลังจากผ่านขั้นตอน Authorization เรียบร้อยแล้ว ก็ลองใช้คำสั่งตามต้องการ คำสั่งที่ใช้บ่อยก็เช่น STAT ,LIST [msg],RETR msg,DELE msg,NOOP,RSET,QUIT


ทำไมต้อง MIME
ถ้าพูดถึงแนวความคิด 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
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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: webmaster@nectproject.netSubject: Hello WorldDate: 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 จะเห็น อักขระแปลก ๆเต็มไปหมด