Tag Archive: smtp


หากเราใช้ Android เชื่อมต่อกับเมล์เซิร์ฟเวอร์แล้วได้ error message ว่า “ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ (500 #5.5.1 command not recognized)”

เมื่อทดสอบด้วยคำสั่ง EHLO จะไม่ผ่าน แต่หากใช้ HELO สามารถทำงานได้

S: 220 ************************
C: EHLO www.google.com
S: 500 #5.5.1 command not recognized
C: HELO www.google.com
S: 250 smtp01.modplusplus.com

ขออธิบายดังนี้ การทำงานของ SMTP จะทำงานได้อยู่ 2 โหมดคือ
1) โหมดดังเดิม (HELO)
2) โหมดเพื่อประสิทธิภาพ (EHLO หรือ Enhanced HELO) โดยโหมดนี้จะเพิ่มความสามารถในเรื่องการเข้ารหัสลับ TLS, การพิสูจน์ตน, และอื่นๆ

ปัญหานี้เกิดจาก 2 ปัจจัยคือ
1) มีอุปกรณ์เน็ตเวิร์คบางตัวไม่ยอมให้ใช้ EHLO เพราะจะไม่สามารถตรวจสอบข้อมูลได้หากเปิดการใช้งานเข้ารหัสลับ TLS ซึ่งอุปกรณ์เน็ตเวิร์คดังกล่าวคือยี่ห้อ Cisco ไม่ว่าจะเป็น PIX, ASA, หรือแม้แต่ firewall service module หากเปิดใช้งานฟีเจอร์ inspect esmtp มันจะแก้ return code ปกติที่เป็น 250 จากเมล์เซิร์ฟเวอร์เป็น 5xx แทนครับ
2) mail client เจ้าอื่นๆ หากใช้ EHLO ไม่ได้มันยอมกลับไปใช้ HELO แต่ว่า Android มันไม่ยอม ต้องใช้ EHLO เท่านั้น

ดังนั้นวิธีแก้ง่ายมากครับ ปิดฟีเจอร์นี้ที่อุปกรณ์ Cisco วิธีการสามารถอ่านเพิ่มเติมจากคู่มือของ Cisco หน้า 14-10 http://www.cisco.com/en/US/docs/security/asa/asa83/command/reference/cmdref.pdf

หมายเหตุ: ในบางอุปกรณ์ Cisco บางเวอร์ชั่นจะสามารถใช้ EHLO ได้ แต่เมื่อมีการใช้งานคำสั่ง STARTTLS อุปกรณ์ Cisco ที่เปิดฟีเจอร์ดังกล่าว จะแก้ไข STARTTLS เป็น ******** เพื่อไม่ให้ใช้งานเข้ารหัสลับ TLS ได้เหมือนกันครับ

Simple Mail Transfer Protocol (SMTP) เป็นโพรโทคอลหรือกฏเกณฑ์ที่ใช้ในการส่งอีเมล์ โดยหากใช้ในอินเทอร์เน็ตจะทำงานอยู่บนพอร์ต TCP 25 และจะใช้ร่วมกับ DNS MX record เพื่อค้นหาเมล์เกตเวย์ของปลายทาง แต่หากใช้ส่งกันระหว่างเซิร์ฟเวอร์ภายในองค์กร อาจเปลี่ยนไปใช้พอร์ตอื่นนอกเหนือจาก TCP 25 ก็ได้เช่นกัน

เมล์เซิร์ฟเวอร์ที่กันในปัจจุบันสนับสนุนโพรโทคอล SMTP กันหมด แม้แต่ของซื้อของขายอย่าง Microsoft Exchange และ IBM Lotus Domino ซึ่งเวลาคุยกันภายในองค์กรจะใช้โพรโทคอลของตัวเอง แต่ถ้าต้องวิ่งออกอินเทอร์เน็ตก็ใช้ SMTP ซึ่งเป็นมาตรฐานกลางได้เหมือนกับค่ายโอเพ่นซอร์ส

เนื่องจากอายุอานามของ SMTP พอๆ กับอินเทอร์เน็ต ซึ่งเลยหลักสี่มานานแล้ว เลยทำให้ SMTP มีปัญหาสำคัญคือเรื่องความปลอดภัยที่ไม่ค่อยจะสู้ดีนัก เพราะข้อมูลที่ส่งกันด้วย SMTP จะเป็นตัวอักษรล้วน (plain text) ใครส่งจดหมายรักถึงใคร คนที่อยู่กลางทางอ่านได้หมด ดังนั้นจึงมีการปรับปรุงเป็น ESMTP โดยตัว E นั้นก็คือ Extended หรือ Enhanced หมายถึง SMTP เวอร์ชั่นปรับปรุงนั่นเอง โดยความสามารถที่เพิ่มเด่นๆ ก็จะเป็นการพิสูจน์ตนก่อนส่ง (user authentication) และการเข้ารหัสลับระหว่างที่ส่ง (SMTP over TLS)

หากใครจะลองส่งเมล์จาก telnet โดยใช้ SMTP ก็สามารถลองทำตามได้นะครับ

Telnet mailgateway.xyz.com 25

รอเซิร์ฟเวอร์ปลายตอบรับ จากนั้นก็ลองทำตามครับ S: หมายถึงเซิร์ฟเวอร์ปลายทาง C: หมายถึงไคลเอนท์ของเรา

S: 220 mailgateway.xyz.com
C: HELO mypc.abc.com
S: 250 Hello mypc.abc.com
C: MAIL FROM: <modplusplus@abc.com>
S: 250 Ok
C: RCPT TO: <somchai@xyz.com>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: "Mod++" <somchai@xyz.com>
C: To: "Somchai Saetung" <somchai@xyz.com>
C: Subject: Test
C:
C: Hello World
C: .
S: 250 Ok: queued as 123
C: QUIT
S: 221 Bye

เพียงเท่านี้เราก็สามารถส่งเมล์ได้โดยไม่ต้องง้อ Outlook แล้วครับ 😀