Friday, January 7, 2011

SMTP Protocol


SMTP được định nghĩa trong RFC 2821, hoạt động trên tầng Application trong mô hình OSI.SMTP sẽ lắng nghe các kết nối trên cổng 25.


Client liên lạc với server bằng cách đưa ra các câu lệnh. SMTP cho phép sử dụng 5 loại câu lệnh:HELO,MAIL,RCPT,DATA,QUIT.

  • MAIL : câu lệnh này để thiết lập một địa chỉ trả lại. Thông thường địa chỉ này là địa chỉ của người gửi và thường được sử dụng trong trường hợp server “bounce” mail-gửi lại mail cho người gửi nếu ko thể chuyển mail.
  • HELO: câu lệnh này nói cho server biết rằng client muốn bắt đầu một phiên gửi mail.
  • RCPT :câu lệnh này dùng để thiết lập một địa chỉ nhận của thông điệp. Câu lệnh này có thể được sử dụng nhiều lần khi muốn gửi thông điệp đến nhiều đích.
  • DATA :câu lệnh này dùng để gửi nội dung của thông điệp.
  • QUIT : câu lệnh dùng để kết thúc việc gửi mail.
Phía server sẽ đáp trả lại các yêu cầu của client bằng việc gửi lại cho client các code. Những code này đã được định nghĩa sẵn, dùng để nói cho client biết rằng server ứng xử như thế nào trước yêu cầu của client(đồng ý hay ko, ...)
Quy ước các code:
  • 2xx: yêu cầu thành công.client có thể tiếp tục
  • 3xx:câu lệnh được chấp nhận,nhưng server muốn có thêm một vài thông tin. Client có thể sẽ phải gửi thêm một số thông tin
  • 4xx:câu lệnh không thành công, nhưng vẫn được lưu tạm lại, client có thể thử lại sau
  • 5xx: câu lệnh không thành công, client ko thể thử lại


Quá trình truyền/ gửi mail có thể được hình dung như sau:
  • Client liên lạc với server và cho biết muốn thiết lập một phiên gửi mail, khi đó client sẽ gửi câu lệnh HELO đến server.
  • Server nếu đồng ý sẽ gửi trả lại cho client một code là 250 để đồng ý
  • Khi đã được server đồng ý, client sẽ gửi tiếp câu lệnh MAIL và đưa địa chỉ của người gửi vào
  • Tiếp tục, server sẽ kiểm tra xem có đồng ý hay ko, nếu đồng ý sẽ đưa lại cho client code 250
  • Khi client đã được server đồng ý, nó sẽ sử dụng tiếp câu lệnh RCPT để thiết lập địa chỉ của người nhận
  • Server kiểm tra và trả về code mà server muốn
  • Nếu nhận được code đồng ý, client gửi câu lệnh DATA để chuẩn bị gửi nội dung thông điệp
  • Nếu server chấp nhận, nó sẽ gửi lại cho client code 354 và lúc này client có thể đưa nội dung thông điệp, sau khi hoàn tất nội dung có thể kết thúc bằng dấu chấm “.”
  • Lúc này server đã nhận được đầy đủ thông tin của bức mail và kiểm tra lại, nếu đồng ý nhận mail thì sẽ đưa lại cho client code 250 và nhận bức mail
  • Kết thúc quá trình, client đưa ra câu lệnh QUIT, đến đây việc gửi mail đã thành công, server sẽ trả lại code 221

=====End=====

1 comment:

  1. bạn ơi cho mình hỏi,mình đang tạo 1 phần mềm SMTPclient để gửi thư bằng visual c++6 sử dụng giao diện command line.Bạn chỉ dùm mình các lệnh để thao tác với command này với như là tao, bức thư,nnội dung thư, đính kèm file..thank bạn nhìu nhé

    ReplyDelete