SMTP Inside Out

อีเมลอินเทอร์เน็ตทำงานได้ดีเพียงใด

คุณเคยสงสัยหรือไม่ว่าจะเกิดอะไรขึ้นเมื่อคุณกดปุ่ม Send ในโปรแกรมอีเมลของคุณ? อาจไม่ฉันเดา - ตราบเท่าที่มันทำงาน นี่คือเหตุผลว่าทำไมคุณถึงสงสัยว่า ในกรณีที่บางสิ่งบางอย่างไม่ได้ผลดีต่อการรู้ว่าอะไรไม่ได้ผล โดยปกติแล้วนั่นคือครึ่งโซลูชัน

เมื่อคุณ ส่งอีเมล SMTP เข้ามาเล่น SMTP ย่อมาจาก Simple Mail Transfer Protocol ตามที่กำหนดใน RFC 5321: Simple Mail Transfer Protocol ไคลเอ็นต์อีเมล ของคุณ พูด กับ เซิร์ฟเวอร์ SMTP โดยใช้ ขั้นตอนที่สะอาดและเรียบง่ายนี้เพื่อรับ อีเมลจากที่ หนึ่งไปยังอีกที่หนึ่ง

เจ้าชู้

โปรแกรมอีเมลของคุณจะกลายเป็น ไคลเอ็นต์ SMTP เชื่อมต่อกับ พอร์ต 25 ของ เซิร์ฟเวอร์อีเมล ของคุณ (โดยปกติจะเป็น พอร์ต SMTP ) และ - EHLO กล่าว คอมพิวเตอร์ในท้ายที่สุดเป็นเพียงมนุษย์และสิ่งที่มีค่าเป็นที่ต้องการสุภาพ ที่จริงแล้วมันไม่ได้เป็นความสุภาพ แต่ต้องใช้ SMTP เพิ่มเติมในภายหลังซึ่งทำให้ทั้งสองรสชาติของคำสั่ง HELO ใน ภายหลัง (คำสั่ง SMTP โดยทั่วไปประกอบด้วยสี่ตัวอักษร)

สองรสชาติของ HELO

EHLO ซึ่งเป็นเซิร์ฟเวอร์ที่ล่าสุดทำให้เซิร์ฟเวอร์โฆษณาคุณลักษณะเพิ่มเติมทั้งหมด (เช่นการแจ้งเตือนสถานะการจัดส่งหรือความสามารถในการขนส่งข้อความที่มีอักขระอื่นนอกเหนือจากอักขระ ASCII ที่ปลอดภัย) สนับสนุน

ไม่ใช่เซิร์ฟเวอร์ทุกเครื่องจะให้คำอวยพรนี้ แต่จำเป็นต้องยอมรับ HELO แบบธรรมดาซึ่งโดยปกติถือว่าไม่มีคุณลักษณะเพิ่มเติม ทั้งสองคำสั่ง hello ต้องการให้ลูกค้าระบุโดเมนหลังจาก ** LO อย่างไรก็ตาม ในทางปฏิบัติดูเหมือนว่า:

220 mail.domain.net ESMTP Server
HELO
501 HELO ต้องการที่อยู่โดเมน
HELO localhost
250 mail.domain.net สวัสดี localhost [127.0.0.1] ยินดีที่ได้พบคุณ

(การป้อนข้อมูลของฉันเป็น ตัวเอียง เอาต์พุตเซิร์ฟเวอร์เป็นสีดำบรรทัดที่ขึ้นต้นด้วยตัวเลข 5 ระบุ ข้อผิดพลาด )

ผู้ส่ง

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

MAIL FROM:
250 sender@example.com ... ผู้ส่งตกลง

ผู้รับ

หลังจากที่เซิร์ฟเวอร์ยอมรับที่อยู่ของผู้ส่งลูกค้าสามารถระบุที่อยู่ของผู้รับได้ คำสั่งสำหรับการกระทำนี้ RCPT TO: อีกครั้งเป็นคำแนะนำค่อนข้าง ฉันต้องการส่งจดหมาย ถึงฉัน :

RCPT TO: recipient@example.com
250 support@lifewireguide.com ... โอเคผู้รับ (จะรอ)

เซิร์ฟเวอร์จะคิวหมายความว่า: จะจัดเก็บจดหมายไว้ในเครื่องและส่งไปพร้อมกับจดหมายที่เข้าคิวอื่น ๆ ในช่วงเวลา (เช่นทุกๆ 30 นาที) ลักษณะการทำงานนี้ขึ้นอยู่กับการกำหนดค่าและเซิร์ฟเวอร์อาจส่งอีเมลได้ทันที

เกือบเสร็จแล้ว สิ่งที่ยังขาดอยู่คือส่วนสำคัญ: ข้อความจริง

ข้อความ

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

คำสั่งเพื่อเริ่มต้นสถานะที่ทำให้เซิร์ฟเวอร์ยอมรับข้อความคือ DATA ต่อไปนี้คือฟิลด์ส่วนหัวทั้งหมดของข้อความอีเมลและเนื้อหาทั้งสองแบบสำหรับการสร้างข้อความ (หรือข้อมูล) เพียงชุดเดียว เมื่อต้องการบอกเซิร์ฟเวอร์ว่าการป้อนข้อมูลเสร็จสิ้นแล้วจุดบนเส้นด้วยตัวเองจะถูกใช้ (\ r \ n. \ r \ n) ดังนั้นฉันจึงส่งข้อความของฉัน:

ข้อมูล
354 ใส่จดหมายลงท้ายด้วย "." บนเส้นด้วยตัวเอง
Message-ID:
วันที่: วันอาทิตย์ที่ 17 สิงหาคม 2540 18:48:15 +0200
จาก: Heinz Tschabitscher
ถึง: Heinz Tschabitscher
เรื่อง: สำหรับการประกวด Summarize-Proust

ไปที่ Swan's World!
.
250 SAA19153 ข้อความที่ยอมรับสำหรับการจัดส่ง

ใช่นั่นหมายความว่าคุณสามารถระบุชื่อที่แตกต่างจากอีเมลที่ส่งไปในฟิลด์ To: ได้อย่างสมบูรณ์ ตัวอย่างเช่นคุณสามารถใช้ " รายชื่อผู้รับที่ ถูกระงับ"

ตอนจบ

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

เลิก
221 ลาก่อน

ฉันจะทำเช่นนี้ได้อย่างไร?

ทางออกที่ไม่สำคัญคือการ telnet ไปยัง เซิร์ฟเวอร์จดหมายขาออก ของคุณ (คุณสามารถหาที่อยู่ใน การตั้งค่าบัญชีลูกค้าอีเมล ) ที่พอร์ต 25

วิธีง่ายๆคือการใช้ แอปเพล็ต Java นี้ ซึ่งพยายามเลียนแบบโปรโตคอล SMTP และแนะนำให้คุณทราบผ่านกล่องโต้ตอบ