การดึงข้อมูลจดหมายผ่านพิธีสาร Post Office

เบื้องหลังดูที่การเรียกดูจดหมายผ่านพิธีสาร Post Office

โพรโทคอล Post Office (POP) ที่ ใช้ในการดึงจดหมายจากเซิร์ฟเวอร์ระยะไกลเป็นโปรโตคอลที่ง่ายมาก จะกำหนดฟังก์ชันการทำงานพื้นฐานในลักษณะที่ตรงไปตรงมาและใช้งานง่าย แน่นอนว่ามันง่ายที่จะเข้าใจ

ลองหาสิ่งที่เกิดขึ้นเบื้องหลังเมื่อโปรแกรมอีเมลของคุณเรียกจดหมายในบัญชี POP ขั้นแรกต้องเชื่อมต่อกับเซิร์ฟเวอร์

สวัสดีค่ะฉัน

โดยปกติเซิร์ฟเวอร์ POP จะฟัง พอร์ต 110 สำหรับการเชื่อมต่อขาเข้า เมื่อเชื่อมต่อจากโปรแกรม POP (โปรแกรมอีเมลของคุณ) จะหวังว่าจะตอบสนองด้วย pop.philo.org หรือ พร้อมกัน หรือคล้ายกัน เครื่องหมาย + ตกลง แสดงว่าทุกอย่างเป็น "ตกลง" ค่าลบของมันคือ --ERR ซึ่งหมายความว่าบางอย่างผิดปกติ บางทีโปรแกรมรับส่งเมลของคุณได้แสดงการตอบกลับเซิร์ฟเวอร์ที่เป็นค่าลบไว้ให้คุณแล้ว

การเข้าสู่ระบบ

ขณะนี้เซิร์ฟเวอร์ได้ทักทายเราแล้วเราจำเป็นต้องเข้าสู่ระบบโดยใช้ ชื่อผู้ใช้ ของเรา (สมมติว่าชื่อผู้ใช้คือ "platoon") สิ่งที่เซิร์ฟเวอร์พิมพ์ถูกพิมพ์ด้วยตัวเอียง):

+ ตกลง pop.philo.org พร้อมแล้ว
กองทหาร USER

เนื่องจากผู้ใช้ที่มีชื่อนี้มีอยู่เซิร์ฟเวอร์ POP ตอบสนองด้วย + OK และอาจมีคำพูดผิด ๆ ที่เราไม่ค่อยใส่ใจ หากไม่มีผู้ใช้รายดังกล่าวในเซิร์ฟเวอร์ระบบจะทำให้เรารู้สึกหวาดกลัวกับ ผู้ใช้ --ERR ที่ไม่รู้จัก

เพื่อให้การตรวจสอบเสร็จสิ้นเราต้องระบุรหัสผ่านของเรา นี้จะทำกับ "ผ่าน" คำสั่ง:

+ ตกลงส่งรหัสผ่านของคุณ
ผ่าน noplato

ถ้าเราพิมพ์รหัสผ่านอย่างถูกต้องเซิร์ฟเวอร์จะตอบสนองด้วย + รหัสผ่านที่ดี หรือไม่ดีกว่าที่โปรแกรมเมอร์ของเซิร์ฟเวอร์ POP ทราบ ส่วนที่สำคัญอีกครั้งคือ + ตกลง ขออภัยรหัสผ่านยังสามารถผิดได้ เซิร์ฟเวอร์จะบันทึกข้อความนี้ด้วย ชื่อผู้ใช้และรหัสผ่านที่ แห้ง (dry -ERR) ไม่ตรงกัน (เช่นถ้าคุณใช้ชื่อผู้ใช้เป็นรหัสผ่าน)

ถ้าทุกอย่างเรียบร้อยดีแล้วเราเชื่อมต่อกับเซิร์ฟเวอร์และรู้ว่าเราเป็นใครเราจึงพร้อมที่จะมองหาจดหมายที่เพิ่งมาถึงใหม่

คุณมีจดหมายแล้ว!

หลังจากที่เราเข้าสู่บัญชี POP ของเราที่เซิร์ฟเวอร์แล้วเราอาจต้องการทราบว่ามีจดหมายใหม่อยู่หรือไม่และอาจเป็นไปได้มากน้อยเพียงใด

คำสั่งที่ใช้เรียกข้อมูลสถิติกล่องจดหมายพื้นฐานนี้คือ STAT

การตอบสนองของเซิร์ฟเวอร์ที่เป็นไปได้คือ + OK 18 67042 ในกรณีนี้จะเป็นไปตามเครื่องหมาย + ตกลง ต่อไปนี้คือจำนวนข้อความในกล่องจดหมายจากนั้นคั่นด้วยช่องว่างให้มีขนาดของกล่องจดหมายใน octets (octet คือ 8 บิต)

สถิติ
+ OK 18 67042

ถ้าไม่มีจดหมายเซิร์ฟเวอร์ตอบด้วย + OK 0 0 เนื่องจากมี 18 ข้อความใหม่บนเซิร์ฟเวอร์อย่างไรก็ตามเราสามารถแสดงรายการเหล่านี้โดยใช้คำสั่ง LIST ในการตอบสนองเซิร์ฟเวอร์จะแสดงข้อความในรูปแบบต่อไปนี้:

รายการ
+ ข้อความ 18 ข้อความ (67042 octets)
1 2552
2 3297
...
18 3270
.

ข้อความจะแสดงทีละรายการตามด้วยขนาดใน octets รายการสิ้นสุดลงด้วยช่วงเวลาที่เป็นเส้นด้วยตัวเอง

คำสั่ง LIST สามารถใช้จำนวนข้อความเป็นอาร์กิวเมนต์ที่เป็นตัวเลือกตัวอย่างเช่น LIST 2 การตอบสนองของเซิร์ฟเวอร์สำหรับคำขอนี้จะเป็น + OK 2 3297 หมายเลขข้อความตามด้วยขนาดของข้อความ ถ้าคุณพยายามที่จะแสดงรายการข้อความที่ไม่มีอยู่เช่น LIST 23 เซิร์ฟเวอร์ไม่แสดงภาพจินตนาการและพูดว่า: -ERR ไม่มีข้อความดังกล่าว

The Big Retrieve (และลบ)

ตอนนี้เรารู้ว่ามีกี่ข้อความในบัญชีของเราและมีขนาดใหญ่แค่ไหนก็ถึงเวลาที่จะดึงข้อมูลเหล่านั้นเพื่อให้เราสามารถอ่านได้มากเกินไป

ตอนนี้หลังจากค้นหาว่าเรามีจดหมายใหม่มาจริง ข้อความจะถูกดึงข้อมูลทีละหมายเลขโดยมีหมายเลขข้อความเป็นอาร์กิวเมนต์ให้กับคำสั่ง RETR

เซิร์ฟเวอร์ตอบรับด้วย + ตกลง และข้อความตามที่เป็นอยู่ในหลายบรรทัด ข้อความถูกยกเลิกโดยรอบระยะเวลาหนึ่งบรรทัด ตัวอย่างเช่น:

RETR 1
+ OK 2009 octets
Blah! <เซิร์ฟเวอร์ POP ส่งข้อความที่นี่>
.

ถ้าเราพยายามที่จะได้รับข้อความที่ไม่มีอยู่เราจะได้รับ ข้อความดังกล่าวไม่ ได้

ตอนนี้เราสามารถลบข้อความโดยใช้คำสั่ง DELE (แน่นอนว่าเราสามารถลบข้อความได้โดยไม่ต้องเรียกคืนหากเป็นวันใดวันหนึ่ง)

เป็นเรื่องน่ารู้ที่ทราบว่าเซิร์ฟเวอร์จะไม่ล้างข้อความทันที มันเป็นเพียงการทำเครื่องหมายสำหรับการลบ การลบจริงจะเกิดขึ้นเฉพาะเมื่อเรายุติการเชื่อมต่อกับเซิร์ฟเวอร์เป็นประจำ ดังนั้นจดหมายจะไม่สูญหายไปหากการเชื่อมต่อนั้นพังทลายตัวอย่างเช่น

การตอบสนองของเซิร์ฟเวอร์ต่อคำสั่ง DELE คือ + ลบข้อความ OK :

DELE 1
+ ลบข้อความ OK 1 แล้ว

หากเป็นวันที่แน่นอนและเราได้ทำเครื่องหมายข้อความเพื่อลบว่าเราไม่ต้องการลบคุณสามารถยกเลิกการลบข้อความทั้งหมดได้โดยการรีเซ็ตเครื่องหมายลบ คำสั่ง RSET ส่งคืนกล่องจดหมายไปยังสถานะที่อยู่ในก่อนที่เราจะล็อกอิน

เซิร์ฟเวอร์ตอบสนองด้วย + ตกลง และอาจเป็นจำนวนข้อความ:

rSet
+ ข้อความ 18 ข้อความตกลง

หลังจากที่เราได้เรียกค้นและลบข้อความทั้งหมดแล้วก็ถึงเวลาที่จะบอกลาโดยใช้คำสั่ง QUIT การดำเนินการนี้จะล้างข้อมูลที่ทำเครื่องหมายเพื่อลบและปิดการเชื่อมต่อ เซิร์ฟเวอร์ตอบด้วย + ตกลง และข้อความอำลา:

เลิก
+ ลาก่อนลาก่อน

เป็นไปได้ว่าเซิร์ฟเวอร์ไม่สามารถลบข้อความได้ จากนั้นจะตอบสนองด้วยข้อผิดพลาดเช่น ข้อความ -ERR 2 ไม่ถูกลบ