บริการไปรษณีย์อิเล็กทรอนิก (Electronic mail) เป็นบริการที่มีใช้กันอย่างแพร่หลายในการท่องไปบน internet ในโลกปัจจุบัน โดยจะใช้โปรแกรม agent ต่างๆ ในการสร้างจดหมายขึ้นมา และทำการจ่าหน้าซอง หรือใส่ header ตาม มาตรฐาน RFC 822 แต่เนื่องด้วย RFC 822 มีข้อจำกัดในการส่งข้อมูล จึงมีการใช้มาตรฐาน MIME เข้ามาช่วยลดข้อจำกัด ในการส่งไปรษณีย์อิเล็กทรอนิกนั้นลงไป ส่วนตัวจดหมายก็สามารถส่งข้อมูลได้หลายชนิดด้วยกันรวมทั้งการเข้ารหัสต่างๆ เมื่อได้จดหมายที่จะส่งแล้วก็จะส่งต่อไปยัง SMTP Sender เพื่อทำการติดต่อด้วยคำสั่งต่างๆ แล้วก็ทำการส่งจดหมาย โดยผ่านทาง SMTP Protocol ซึ่งทำงานบนการเชื่อมต่อ TCP/IP ไปยังเครื่องปลายทาง โดยมี SMTP Receiver คอยรับจดหมายอยู่เพื่อนำจดหมายที่ได้รับมานั้น จัดเก็บใน mailbox ที่ถูกต้องต่อไป
Keyterm
SMTP - Simple Mail Transfer Protocol
เป็นมาตรฐานในการส่งจดหมายระหว่างเครื่อง host ต่างๆ บน TCP/IP protocol
MIME - Multipurpose Internet Mail Extensions
เป็นมาตรฐานใหม่ที่ออกมาเพื่อแก้ไขปัญหาที่ SMTP ไม่สามารถทำได้
การส่งจดหมาย
electronic เริ่มต้นโดยการเขียนจดหมายด้วยโปรแกรม user agent โดยในแต่ละจดหมาย
จะประกอบด้วย header ซึ่งระบุผู้รับและข้อมูลอื่นๆ ส่วนตัว body จะมีข้อความที่ต้องการส่ง
หลังจากนั้นจดหมาย จะเข้าคิวของโปรแกรม SMTP Sender ซึ่งจะเป็นโปรแกรม ที่ทำงานบนเครื่อง
Server
ถึงแม้ว่าการส่งจดหมายจะขึ้นกับ
operating system ของเครื่อง host แต่หลักการจะมี เหมือนๆกัน 2 อย่างคือ
1. ตัวจดหมาย จะประกอบด้วย
2.
รายการของที่อยู่ที่ปลายทาง โดยสร้างจาก user agent ตาม RFC 822
SMTP
sender จะนำจดหมายที่อยู่ในคิวส่งออกไปยังเครื่องปลายทาง โดยใช้ SMTP บนการเชื่อมต่อ
TCP ด้วยหมายเลข port 25 บนเครื่องปลายทาง เมื่อทำการส่งเรียบร้อยแล้ว SMTP sender
ก็จะทำการลบจดหมายออกจากคิวไป ที่สำคัญคือในระหว่างการส่ง SMTP sender ต้องสามารถจัดการกับปัญหาต่างๆที่จะเกิดขึ้นได้
เช่น host ปลายทาง unreachable, out of operation หรือ การเชื่อมต่อ TCP เกิดการล้มเหลวระหว่างทำการส่งจดหมายอยู่
เมื่อเกิดปัญหาพวกนี้ sender จะทำการ requeue ใหม่ เพื่อทำการส่งในภายหลัง แต่ถ้าทำการส่งใหม่หลายครั้งแล้วยังไม่สำเร็จ
ก็จะยกเลิกการส่ง และรายงานไปยังผู้ส่ง
SMTP protocol ใช้ในการส่งจดหมาย จาก SMTP sender ไปยัง SMTP receiver บนการเชื่อมต่อ TCP โดยไม่สามารถรับประกันได้ว่าจะแก้ไขปัญหาจดหมายหายไป, ไม่มีการส่งตอบรับเมื่อผู้รับได้รับจดหมายเรียบร้อยแล้ว และไม่มีเครื่องรับประกันว่าจะมีการรายงานความผิดพลาดกลับมา แต่อย่างไรก็ตามการส่ง จดหมายโดยใช้ SMTP ก็ถือว่ามีความ reliable
SMTP receiver จะทำการรับจดหมายและทำการจัดเก็บให้กับ mailbox ของ user แต่ละคน หรือไม่ก็ทำการ copy เก็บไว้ในกรณีที่มีการ forward จดหมายไปที่อื่น โดย receiver จะต้องมีความสามารถในการตรวจสอบว่าผู้รับอยู่ในระบบหรือไม่ รวมทั้งจัดการกับปัญหาในการติดต่อ และปัญหาเรื่องเนื้อที่ในการจัดเก็ºไม่พอ
ในระบบการจัดการจดหมาย electronic นั้นจะมีระบบย่อย 2 ส่วนด้วยกัน คือ user agents เพื่อให้ผู้ใช้สามารถทำการอ่านและส่งจดหมายได้ และ message transfer agent จะทำการเคลื่อนย้ายจดหมายจากต้นทางไปยังปลายทาง โดย user agent จะเป็นโปรแกรม local มีทั้งที่เป็น command-based, menu-based หรือ graphical เพื่อการโต้ตอบกับ email system ส่วน message transfer agent จะเป็นโปรแกรม system daemon ที่ทำงานอยู่เป็น background เพื่อส่งจดหมายในระบบ
โดยทั่วไประบบจดหมาย (email system) จะมีความสามารถทำงานพื้นฐานด้วยกัน 5 อย่าง ดังนี้
ระบบส่วนใหญ่ จะอนุญาตให้ผู้ใช้สามารถสร้าง mailbox เพื่อจัดเก็บจดหมายที่ได้รับมา โดยมีคำสั่งในการสร้าง, ลบ, เพิ่มหรือลดจดหมายจาก mailbox นั้นได้
ในการจัดการส่งจดหมาย เพื่อความสะดวกก็จะมี mailing list ซึ่งเป็นรายการของ email address โดยเมื่อส่งไปตาม mailing list ทุกคนที่อยู่ใน mailing list จะได้รับเหมือนกัน
ในปัจจุบันการส่งจดหมายมีความสับสนในเรื่องของ envelope และ content โดย envelope จะทำการบรรจุ message เช่น ปลายทาง ความสำคัญ และระดับความปลอดภัยของจดหมาย โดย message transport agents จะใช้ envelope ในการหาเส้นทางในการส่งจดหมาย
ส่วน message ใน envelope จะมีด้วยกัน 2 ส่วน คือ header และ body โดย header จะประกอบด้วยข้อมูลสำหรับ user agents ส่วน body จะเป็นข้อมูลที่ให้คนอ่าน โดยแยกให้เห็นดังนี้
Name:Mr.Daniel Dumkopf |
Envelope |
From:United Gizmo |
Message |
Dear Mr.Dumkopf, Yours truly |
E-mail ประกอบไปด้วยการจ่าหน้าซองจดหมาย ซึ่งประกอบด้วยเขตข้อมูลต่างๆ แล้วตามด้วยบรรทัดว่าง 1 บรรทัด ต่อด้วยตัวข้อความในจดหมาย โดยแต่ละเขตข้อมูลจะอยู่ในรูปของบรรทัดตัวอักษร ASCII ซึ่งขึ้นต้นด้วยชื่อเขตข้อมูล, เครื่องหมาย colon และตามด้วยค่าต่างๆ
Header |
ความหมาย |
To: |
Email address ของผู้รับหลัก |
Cc: |
Email address ของผู้รับรอง |
Bcc: |
Email address ของผู้รับอื่นๆ |
From: |
คนที่ทำการเขียนจดหมายนี้ |
Sender: |
ผู้ที่ส่งจดหมายฉบับนี้ (ในกรณีคนอื่นส่งให้) |
Received: |
transfer agent ใช้ในการส่งจดหมาย |
Return-Path: |
ระบุที่จะส่งจดหมายกลับถ้าส่งไม่ได้ |
To: ใส่ DNS address ของผู้รับจดหมายคนแรก ถ้ามีผู้รับหลายคนก็สามารถทำได้
โดยใช้
Cc: ใส่ address ของผู้รับจดหมายคนที่ 2 โดยในการส่งจดหมายด้วย Email นี้ไม่มีความแตกต่างในเรื่องข้อมูล ระหว่าง ผู้รับคนแรกกับผู้รับคนที่ 2 แต่จะมีผลในเรื่องของการให้ความสำคัญในตัวบุคคลทั้ง 2 นั้นต่างกัน (Cc ย่อมาจาก Carbon Copy)
Bcc: (Blind carbon copy) มีการทำงานเหมือน Cc แต่จะไม่ปรากฏอยู่ในการส่งของผู้รับหลักและรองเลย
From: และ Sender: บอกว่าใครเป็นผู้ส่งจดหมาย โดยปกติจะเป็นคนเดียวกัน แต่ก็สามารถเป็นคนละคนกันได้ เช่น ผู้บริหารเขียนจดหมายไว้ แล้วให้เลขาฯ ช่วยส่งจดหมายให้ ซึ่งในตัวอย่างนี้ผู้บริหารจะอยู่ใน From: ส่วนเลขาฯจะอยู่ในเขตข้อมูล Sender: การที่มี Sender ก็เพื่อในกรณีที่ไม่สามารถทำการส่งได้จะได้ส่งกลับมาให้ เลขาฯ ไม่ต้องส่งกลับไปให้ผู้บริหารอีก
Received: transfer agent จะเพิ่มเติมข้อมูลลงในเขตข้อมูลนี้ในระหว่างทางในการส่งจดหมาย โดยจะมี agent's identity และวันที่ เวลา ในการรับจดหมายเพื่อใช้ในการหาข้อผิดพลา´ในการหาเส้นทางในการส่งจดหมาย
Return-Path: เป็นเขตข้อมูลที่เพิ่มเมื่อสิ้นสุดในการส่งจดหมายแล้ว โดยมีจุดประสงค์ในการบอกว่าจะส่งกลับไปยังผู้ส่งได้อย่างไร โดยทฤษฎีแล้วข้อมูลส่วนนี้สามารถหาได้จากเขตข้อมูล Received: ซึ่งไม่มีชื่อของผู้ส่ง ดังนั้นจึงมี เขตข้อมูลเพื่อระบุผู้ส่งด้วย
Header |
ความหมาย |
Date: |
วันที่และเวลาที่ส่ง email |
Reply-To: |
Email address เมื่อผู้รับต้องการตอบ |
Message-Id: |
เลขประจำตัวของจดหมายเพื่อนำมาอ้างอิงในภายหลัง |
In-Reply-To: |
Message-Id ที่ได้ทำการตอบกลับมานี้ |
References: |
Message-Id อื่นๆที่ได้อ้างถึง |
Keywords: |
ผู้ใช้เลือก keywords |
Subject: |
สรุปจดหมาย เพื่อการแสดงผลในบรรทัดเดียว |
Reply-To: เขตข้อมูลที่ใช้ในบางครั้งเท่านั้น ยกตัวอย่างเช่น ผู้จัดการฝ่ายการตลาดต้องการส่ง email ไปยังลูกค้าในเรื่องสินค้าใหม่ แล้วจดหมายนี้จะถูกส่งโดยเลขาฯ แต่ Reply-To จะไปที่ฝ่ายขายของบริษัทเพื่อตอบจดหมายนั้น
RFC 822 สามารถให้ผู้ใช้สามารถ ทำการตั้งเขตข้อมูล ขึ้นเองได้ โดยจะขั้นต้นด้วย X- เพื่อไม่ให้ซ้ำกับเขตข้อมูลอื่นๆ ดังนั้นบางครั้งอาจจะพบกับ X-Fruit-of-the-Day หรือ X-Disease-of-the week ก็สามารถเกิดขึ้นได้หลังจาก Header ก็จะตามมาด้วยตัวจดหมาย โดยผู้ใช้สามารถทำการใส่อะไรก็ได้
MIME เป็นส่วนขยายมาจาก RFC 822 โดยจะแสดงข้อจำกัดในการใช้งาน SMTP และ RFC 822 สำหรับการส่ง Email ซึ่งมีดังนี้
MIME สามารถแก้ไขปัญหาเหล่านี้ได้ โดยสามารถเข้ากันได้กับมาตรฐานเดิม RFC 822 ซึ่งรายละเอียดจะอยู่ใน RFC 1521 และ RFC 1522
รายละเอียดของ MIME
เขตข้อมูลเหล่านี้สามารถปรากฎอยู่ในหัวจดหมายแบบ RFC 822 ได้ โดยถ้าทางฝ่ายผู้รับไม่รองรับ MIME เขตข้อมูลเหล่านี้จะเป็นเพียง optional เท่านั้น
ชนิดของข้อมูลที่อยู่ในตัวจดหมาย ซึ่งมีอยู่ 7 ชนิด ตาม RFC 1521 โดยสามารถแบ่งย่อยออกไปเป็น subtype ต่างๆ โดยทำการขั้นด้วย slash "/" ดังตัวอย่างนี้ Content-Type: video/mpeg
Type |
Subtype |
คำอธิบาย |
Text |
Plain |
ข้อความธรรมดา |
Richtext |
ข้อความที่มีคำสั่งในการจัดรูปแบบอยู่ด้วย |
|
Image |
Gif |
รูปภาพ GIF |
Jpeg |
รูปภาพ JPEG |
|
Audio |
Basic |
เสียงที่ฟังได้ |
Video |
Mpeg |
ภาพยนตร์ MPEG |
Application |
Octet-stream |
ข้อมูล binary ซึ่งประกอบด้วย 8-bit |
Postscript |
เอกสารที่พิมพ์ได้ในรูป PostScript |
|
Message |
Rfc822 |
บรรจุจดหมายที่เป็น RFC 822 อยู่ |
Partial |
จดหมายที่ถูกแยกออกเป็นหลายฉบับ |
|
External-body |
ข้อความที่ต้องไปดึงมาจากที่อื่น |
|
Multipart |
Mixed |
จดหมายที่มีหลายส่วนที่ส่งมาพร้อมกัน |
Alternative |
ข้อความเดียวกันแต่ส่งมาหลายรูปแบบ |
|
Parallel |
ส่วนต่างๆของจดหมาย สามารถดูได้พร้อมกัน |
|
Digest |
subtype default ของแต่ละส่วนจดหมาย |
Text Type เป็นข้อความธรรมดา โดยแบ่งเป็น
Image Type ใช้ในการส่งข้อมูลรูปภาพ ถึงแม้ว่าจะมีชนิดของรูปภาพเป็น จำนวนมาก ทั้งที่มีการบีบอัดรูป และทั้งแบบไม่บีบอัด ก็จะใช้รูปแบบภาพเป็นชนิด GIF และ JPEG เป็นหลัก
Audio Type และ Video Type ใช้สำหรับ เสียงและภาพเคลื่อนไหว โดย video จะมีแต่รูปโดยไม่มีเสียง โดยถ้าต้องการส่งให้มีทั้งรูปและเสียง จะต้องทำการส่งข้อมูลของทั้ง 2 แยกกัน โดยขึ้นอยู่กับการ เข้ารหัสข้อมูล โดย video จะใช้ Moving Picture Experts Group (MPEG)
Application Type เป็นชนิดข้อมูลที่จะต้องทำการ ประมวลผลก่อน
* application/octet-stream เป็นข้อมูล binary ที่เรียงต่อกันมา โดยรูปแบบนั้น จะขึ้นกับผู้ใช้เป็นหลัก
* application/postscript จะหมายถึง ภาษา PostScript ที่ผลิตโดย บริษัท Adobe Systems โดยมีการใช้กันอย่างแพร่หลาย ในการพิมพ์งาน แต่ต้องระวัง เพราะว่า มีความสามารถที่จะ เขียน C compiler หรือ database management system ลงใน PostScript ได้
Message Type มีความสามารถในการทำงานหลายอย่าง ใน MIME โดย
* message/rfc822 จะบอกว่าในตัวจดหมาย มีจดหมายอื่นอยู่ โดยมีทั้ง header และ ตัวจดหมาย
* message/partial subtype สามารถที่จะแยกจดหมายที่ มีขนาดใหญ่ให้เป็น หลายๆส่วนได้ โดยจะทำการประกอบกัน ทางฝ่ายผู้รับ โดยจำมี parameter ที่จำเป็นในการแบ่ง ดังนี้
* Id เป็นตัวเลขของจดหมาย โดยทุกส่วนที่ถูกแยกจะมี Id เหมือนกัน เพื่อทางฝ่ายรับ จะสามารถทำการรวมจดหมายได้ถูกต้อง
* Number เป็นเลขบอกตำแหน่งของการแยกส่วน ของจดหมายจากจดหมายต้นฉบับ โดยส่วนแรกจะเป็น ตัวเลข 1 และตัวเลขต่อไปตามลำดับ
* Total เป็นตัวเลขบอกจำนวนการแบ่งทั้งหมด โดยส่วนสุดท้ายของจดหมาย จะมีเลข number กับ total เท่ากัน
กฎการแบ่งจดหมายออกเป็นส่วนๆ มีดังนี้
กฎการประกอบจดหมายแยกส่วน มีดังนี้
ตัวอย่างการส่งจดหมายแบบแยกส่วน
จดหมายส่วนแรก From:Bill@host.com |
จดหมายส่วนที่ 2 From:Bill@host.com |
จดหมายหลังรวม From:Bill@host.com |
Multipart Type เป็นชนิดที่สามารถให้จดหมาย มีได้หลาย part โดยสามารถทำการประกาศ จุดเริ่มต้น และ จุดสิ้นสุดได้ โดยเส้นแบ่ง part จะเป็นบรรทัดใหม่ ที่ขึ้นต้นด้วย 2 hyphen แล้วตามด้วยค่า boundary แล้วแบ่ง part สุดท้าย จะมี hyphen อีก 2 ตัวปิดท้าย
From:Nathaniel Borenstein<nsb@bellcore.com> This is explicitly-typed plain ASCII text. It DOES end with a line
break. |
From:Nathaniel Borenstein<nsb@bellcore.com> |
มาตรฐาน MIME ได้กำหนดวิธี encode ข้อมูลไว้ โดยใช้เขตข้อมูล Content-Transfer Encoding ซึ่งจะมีค่าได้ด้วยกัน 6 แบบ ซึ่ง แบบ 7bit, 8bit และ binary จะไม่มีการ encode ข้อมูล แต่โดยปกติ SMTP จะใช้แบบ 7bit เป็นหลัก นอกจากนั้นจะมีการ encode ด้วยวิธีอื่นที่นิยามเองได้โดย จะใช้ x-token ในการแบ่งประเภทการเข้ารหัส ส่วน quoted-printable เป็นการ encode ที่ให้คนสามารถอ่านได้ และ base64 เป็นวิธี encode เพื่อเป็นความปลอดภัย กับข้อมูลทุกชนิดไว้สามารถส่งได้ถูกต้องและมีขนาดเล็ก
7bit |
บรรทัดสั้นของตัวอักษร ASCII |
8bit |
บรรทัดสั้นของตัวอักษร non-ASCII |
Binary |
ข้อมูล binary |
Quoted-printable |
รูปแบบการเข้ารหัสของ ASCII โดยยังสามารถ อ่านได้ |
base64 |
เข้ารหัส จาก 6-bit ไปยัง 8-bit ของตัวอักษร ที่พิมพ์ได้ |
x-token |
user กำหนดได้เอง |
quoted-printable จะเป็นประโยชน์กับข้อมูลที่ ASCII โดยเฉพาะตัวอักษรที่ไม่สามารถมองเห็นได้เป็นตัวอักษรควบคุมต่างๆ โดยมีกฎในการเข้ารหัสดังนี้
American Standard Code for Information Interchange (ASCII)
|
b7 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
||
b6 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
|||
b5 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
|||
b4 |
b3 |
b2 |
b1 |
||||||||
0 |
0 |
0 |
0 |
NUL |
DLE |
SP |
0 |
@ |
P |
` |
p |
0 |
0 |
0 |
1 |
SOH |
DC1 |
! |
1 |
A |
Q |
a |
q |
0 |
0 |
1 |
0 |
STX |
DC2 |
" |
2 |
B |
R |
b |
r |
0 |
0 |
1 |
1 |
ETX |
DC3 |
# |
3 |
C |
S |
c |
s |
0 |
1 |
0 |
0 |
EOT |
DC4 |
$ |
4 |
D |
T |
d |
t |
0 |
1 |
0 |
1 |
ENQ |
NAK |
% |
5 |
E |
U |
e |
u |
0 |
1 |
1 |
0 |
ACK |
SYN |
& |
6 |
F |
V |
f |
v |
0 |
1 |
1 |
1 |
DEL |
ETB |
' |
7 |
G |
W |
g |
w |
1 |
0 |
0 |
0 |
BS |
CAN |
( |
8 |
H |
X |
h |
x |
1 |
0 |
0 |
1 |
HT |
EM |
) |
9 |
I |
Y |
i |
y |
1 |
0 |
1 |
0 |
LF |
SUB |
* |
: |
J |
Z |
j |
z |
1 |
0 |
1 |
1 |
VT |
ESC |
+ |
; |
K |
[ |
k |
{ |
1 |
1 |
0 |
0 |
FF |
FS |
, |
< |
L |
\ |
l |
| |
1 |
1 |
0 |
1 |
CR |
GS |
- |
= |
M |
] |
m |
} |
1 |
1 |
1 |
0 |
SO |
RS |
. |
> |
N |
^ |
n |
~ |
1 |
1 |
1 |
1 |
SI |
US |
/ |
? |
O |
_ |
o |
DEL |
base64 หรืออีกชื่อหนึ่งว่า radix-64 เป็นวิธีเข้ารหัสที่นิยมกันในการส่งจดหมายทั้งแบบ PGP (Pretty Good Pricacy) และ PEM (Privacy Enhanced Mail) โดยมีลักษณะการเข้ารหัสดังนี้
Radix-64 encoding
6-bit value |
Character encoding |
6-bit value |
character encoding |
0 |
A |
32 |
g |
1 |
B |
33 |
h |
2 |
C |
34 |
i |
3 |
D |
35 |
j |
4 |
E |
36 |
k |
5 |
F |
37 |
l |
6 |
G |
38 |
m |
7 |
H |
39 |
n |
8 |
I |
40 |
o |
9 |
J |
41 |
p |
10 |
K |
42 |
q |
11 |
L |
43 |
r |
12 |
M |
44 |
s |
13 |
N |
45 |
t |
14 |
O |
46 |
u |
15 |
P |
47 |
v |
16 |
Q |
48 |
w |
17 |
R |
49 |
x |
18 |
S |
50 |
y |
19 |
T |
51 |
z |
20 |
U |
52 |
0 |
21 |
V |
53 |
1 |
22 |
W |
54 |
2 |
23 |
X |
55 |
3 |
24 |
Y |
56 |
4 |
25 |
Z |
57 |
5 |
26 |
a |
58 |
6 |
27 |
b |
59 |
7 |
28 |
c |
60 |
8 |
29 |
d |
61 |
9 |
30 |
e |
62 |
+ |
31 |
f |
63 |
/ |
(pad) |
= |
ตัวอย่างวิธีการเข้ารหัส โดยมี input เป็นข้อมูล binary 24-bit ซึ่งแต่ละ 6 bit จะแปลงเป็นตัวอักษร 8-bit รวมเป็น 32 bit โดย 6 bit ด้านหลังไม่ว่าจะเป็น ASCII หรือ EBCDIC ก็จะแทนตัวอักษรที่เหมือนกัน เช่น "E" มี 7-bit ASCII เป็น 0100 0101 ส่วน EBCDIC จะเป็น 8-bit 1100 0101 ดังนั้นการแปลงกลับก็สามารถทำได้สะดวก โดยดูเพียง 6 bit หลังก็พอ เช่น "H52Q" แปลงเป็น ASCII คือ
1001000 0110101 0110010 1010001
แยกเป็น 6 bit ได้ดังนี้
001000 110101 110010 010001
แปลงเป็น 24 bit คือ 235CA1
การทำงานของ SMTP จะประกอบไปด้วยชุดของคำสั่ง และการตอบรับที่ส่งกันระหว่าง SMTP sender และ SMTP receiver โดยเริ่มต้นด้วยการที่ SMTP sender จะทำการติดต่อไปยัง SMTP receiver แล้วทำการส่งคำสั่งต่างๆ ไปยัง receiver โดยทุกคำสั่งที่ส่งไปจะ มีการตอบรับจาก receiver เสมอ
SMTP commands โดยที่แต่ละคำสั่งจะเป็นข้อความหนึ่งบรรทัดซึ่งเริ่มต้นด้วยรหัสคำสั่งเป็นตัวอักษรที่มีความยาว 4 ตัวและตามด้วย argument ต่างๆ และการตอบรับจะเป็นข้อความหนึ่งบรรทัดเช่นเดียวกัน
ตารางคำสั่ง (SMTP commands)
ชื่อคำสั่ง |
รูปแบบคำสั่ง |
คำอธิบาย |
HELO |
HELO<SP><domain><CRLF> |
คำสั่งติดต่อ |
|
MAIL<SP>FROM:<reverse-path><CRLF> |
ระบุผู้ส่ง |
RCPT |
RCPT<SP>TO:<forward-path><CRLF> |
ระบุผู้รับ |
DATA |
DATA<CRLF> |
ส่งข้อความ |
RSET |
RSET<CRLF> |
ยกเลิก |
NOOP |
NOOP<CRLF> |
ไม่ทำอะไร (No Operation) |
QUIT |
QUIT<CRLF> |
ปิดการเชื่อมต่อ TCP |
SEND |
SEND<SP>FROM:<reverse-path><CRLF> |
ส่งจดหมายไปยังหน้าจอ |
SOML |
SOML<SP>FROM:<reverse-path><CRLF> |
ส่งจดหมายไปยังหน้าจอ หรือไม่ก็ mailbox |
SAML |
SAML<SP>FROM:<reverse-path><CRLF> |
ส่งจดหมายไปยังหน้าจอ และ mailbox |
VRFY |
VRFY<SP><string><CRLF> |
ยืนยัน user name |
EXPN |
EXPN<SP><string><CRLF> |
ส่งกลับรายการผู้ที่อยู่ใน mailing list |
HELP |
HELP[<SP><string>]<CRLF> |
ส่ง symtem-specific documentation |
TURN |
TURN<CRLF> |
สลับกันระหว่าง sender และ receiver |
หมายเหตุ
<CRLF> หมายถึง Carriage Return และ Line Feed
<SP> หมายถึง Space
เครื่องหมายก้ามปู '[ ]' และ ตัวอักษรตัวบาง หมายถึง ตัวเลือกซึ่งจะมีหรือไม่มีก็ได้
SMTP replies การตอบรับจะเริ่มด้วย ตัวเลขรหัส 3 ตัว และอาจตามด้วยข้อมูลเพิ่มเติม โดยการกำหนดรหัสจะใช้ตัวเลขในการแยกประเภทของการตอบรับ ดังนี้
ตารางตอบรับ (SMTP replies)
รหัส |
คำอธิบาย |
Positive Completion Reply |
|
211 |
System status,or system help reply |
214 |
Help message |
220 |
<domain> Service ready |
221 |
<domain> Service closing transmission channel |
250 |
Requested mail action okay,completed |
251 |
User not local;will forward to <forward-path> |
Positive Intermediate Reply |
|
354 |
Start mail input;end with <CRLF>.<CRLF> |
Transient Negative Completion Reply |
|
421 |
<domain> Service not available,losing transmission |
450 |
Requested mail action not taken: mailbox unavailable |
451 |
Requested action aborted: local error in processing |
452 |
Requested action not taken: insufficient system storage |
Permanent Negative Completion Reply |
|
500 |
Syntax error,command unrecognized |
501 |
Syntax error in parameter or arguments |
502 |
Command not implemented |
503 |
Bad sequence of commands |
504 |
Command parameter not implemented |
550 |
Requested action not taken: mailbox unavailable |
551 |
User not local;please try <forward-path> |
552 |
Requested mail action aborted: exceeded storage allocation |
553 |
Requested action not taken: mailbox name not allowed |
554 |
Transaction failed |
พื้นฐานการทำงานบน SMTP มีอยู่ด้วยกัน 3 ขั้นตอน ด้วยกัน โดยเริ่มต้นด้วย การเชื่อมต่อ (connection setup) , การส่งรับคำสั่งและการตอบรับของ sender และ receiver (mail transfer) และตามด้วยการปิดการเชื่อมต่อ (connection closing)
Connection Setup
SMTP sender จะเป็นผู้ที่ทำการเปิดการเชื่อมต่อ TCP กับ host ปลายทาง เมื่อมีความต้องการ จะส่งจดหมายไปยัง host นั้น โดยมีลำดับการทำงานดังนี้
ถ้าการบริการบนเครื่องปลายทางไม่สามารถทำงานได้จะมีการตอบรับ "421 Service Not Available" ในขั้นตอนลำดับที่ 2 แล้วจบการทำงาน
Mail Transfer
เมื่อทำการเชื่อมต่อในขั้นตอนแรกแล้ว
SMTP sender จะส่งจดหมายไปยัง SMTP receiver โดยมีลำดับการทำงานดังนี้
MAIL command ให้ reverse-path เพื่อใช้ในการรายงานความผิดพลาดต่างๆ โดยถ้า receiver พร้อมที่จะรับข้อความแล้ว จะส่ง "250 OK" มาให้ หรือไม่ก็จะรายงาน ความล้มเหลว ในการทำงาน กับคำสั่งมาให้ ได้แก่ รหัส 451,452,552 หรือความผิดพลาดของคำสั่ง ด้วยรหัส 421,500,501
RCRT command ใช้เพื่อระบุผู้รับจดหมาย โดยถ้าต้องการส่งให้กับหลายคน ก็สามารถทำได้ ด้วยการใช้คำสั่งนี้ กับผู้รับแต่ละคน และ receiver จะตอบรับทุกครั้ง โดยมีความเป็นได้ดังนี้
ประโยชน์ในการใช้คำส่ง RCPT แยกกัน ก็คือ sender ไม่ต้องส่งข้อความจนกว่าจะมั่นใจว่า receiver พร้อมที่จะรับข้อความไปยังผู้รับอย่างน้อยหนึ่งคน เพื่อลดการเสียเวลาในการส่ง ข้อความภายในจดหมายทั้งหมด โดยไม่มีผู้รับเลย
DATA command เป็นการเริ่มต้นในการส่งข้อความ โดยถ้า receiver ยังคงพร้อม ที่จะรับข้อความ จะส่ง 354 กลับมา หรือไม่ก็ รายงานความล้มเหลวในการทำงานตามคำสั่ง (451,554) หรือรายงาน ความผิดพลาดของคำสั่ง (421,500,501,503) ถ้ามีตอบรับ 354 SMTP sender จะดำเนินกระบวนการส่งข้อมูล ในรูปของลำดับตัวอักษร ASCII ผ่านทางการเชื่อมต่อ TCP โดยจะสิ้นสุดการส่ง ด้วยบรรทัดที่มีแต่ตัวอักษร จุด เพียงอย่างเดียว หลังจากนั้น SMTP receiver จะทำการส่ง "250 OK" กลับมารายงานถ้า ข้อความที่ส่งไป ได้รับเรียบร้อยแล้ว หรือไม่ก็รายงานความผิดพลาดด้วยรหัส (451,452,552,554)
ตัวอย่างการส่งคำส่งและการตอบรับระหว่าง sender และ receiver ตาม RFC 821
Sender: |
MAIL FROM:<loy@i.am> |
Receiver: |
250 OK |
Sender: |
RCRT TO:<billgate@microsoft.com> |
Receiver: |
250 OK |
Sender: |
RCRT TO:<surasit@microsoft.com> |
Receiver: |
550 No such user here |
Sender: |
RCRT TO:<steve@microsoft.com> |
Receiver: |
250 OK |
Sender: |
DATA |
Receiver: |
354 Start mail input; end with <CRLF>.<CRLF> |
Sender: |
Blah Blah Blash... |
Sender: |
...etc. etc. etc. |
Sender: |
<CRLF>.<CRLF> |
Receiver: |
250 OK |
SMTP sender จะทำการส่งจดหมาย จาก loy@i.am โดยจดหมายนี้จะส่งไปยัง 3 user ในเครื่องของ microsoft.com คือ billgate,surasit และ steve และ SMTP receiver ทำการตรวจสอบแล้ว ว่ามีตู้จดหมาย (mailbox) ของ billgate และ steve แต่ไม่มีตู้จดหมาย ของ user surasit เนื่องจากมีผู้รับจดหมายนี้ได้ ดังนั้น sender ก็ดำเนินการ ส่งข้อความไปยัง receiver
Connection Closing
SMTP sender จะปิดการเชื่อมต่อได้ 2 ขั้นตอนด้วยกัน
ถึงแม้ว่า SMTP จะเป็น protocol ที่ไม่สามารถรับประกันได้ว่าจดหมายที่ส่งออกไป จะไม่หาย แต่เราก็ยอมรับว่า ระบบ มีความ reliable มากพอที่จะทำงานได้ ส่วนในเรื่อง security นั้น ก็สามารถส่ง ในรูปแบบของ PGP หรือ PEM เพื่อทำการเข้ารหัสข้อมูล ป้องกัน ข้อมูลของเราได้ ดังนั้นจึงเป็นระบบที่ใช้งานอยู่ในปัจจุบัน และในอนาคตก็คงเป็นเช่นนี้ ถึงจะมีการเปลี่ยนแปลง ก็คงเป็นเรื่อง ชนิดของข้อมูล และการเข้ารหัสข้อมูลต่างๆ