SMTP is short for Simple Mail Transfer Protocol.
 Email is an indispensable tool in daily work and life. Below is the process of sending and receiving emails.
 
Simple Application Server
 USD1.00 New User Coupon
 * Only 3,000 coupons available.
 * Each new user can only get one coupon(except users from distributors).
 * The coupon is valid for 30 days from the date of receipt.
 
 The sending of mail is mainly realized through the SMTP protocol. The SMTP protocol was first defined in RFC 821 (1982), and the last update was in RFC 5321 (2008), which included extended SMTP (ESMTP).
 
 In ordinary program development, there is often such a need to send mail, so it is inevitable to test the availability of the mail sending 
server. The following are the sorted commands, which are used to test the SMTP server under the command line and perform operations such as mail sending. I believe that it can play a role in enhancing the understanding of SMTP.
 
 SMTP uses port 25 by default, we can use the telnet tool to test.
 
 
1. Connect to the SMTP server and check if it is alive.
 
      >telnet smtp.sina.com 25
 
      >Connected to mail.sina.com.
 
      >Escape character is'^]'.
 
      >220 smtp ready
 
      The escape character under telnet is Ctrol+]. If you want to exit, press the escape character and enter quit to return to the command line.
 
 
2. User login
 
      After connecting to the 
server, use the AUTH LOGIN command for user login (SMTP commands are not case sensitive)
 
      >auth login
 
      >334 VXNlcm5hbWU6
 
      >c2VydmljZUBoZWVwLmNx
 
      >334 UGFzc3dvcmQ6
 
      >xxxxxxxx
 
      >235 go ahead
 
      The 235 return code indicates that the login verification is successful and the user can proceed with subsequent operations. The user mailbox and password are Base64 encoded. This is related to the security features of the 
server and is a configurable item.
 
 
3. Send the email.
 
      After the user is authenticated, execute the following command to send the email.
 
      >235 #2.0.0 OK Authenticated
 
      >MAIL FROM: yunpan001@sina.com
 
      >250 sender <yunpan001@sina.com> ok
 
      >RCPT to: cocowool@gmail.com
 
      >250 recipient <cocowool@gmail.com> ok
 
      >DATA
 
      >354 go ahead
 
      >Subject: Hi smtp mail
 
      >hello mail
 
      >.
 
      >250 ok: Message 1763097690 accepted
 
 
SMTP command list
 
 HELO
 
 The command sent by the client to identify itself (usually with a domain name)
 
 EHLO
 
 Allows the server to indicate that it supports Extended Simple Mail Transfer Protocol (ESMTP) commands.
 
 MAIL FROM
 
 Identifies the sender of the message; used in the form of MAIL FROM:.
 
 RCPT TO
 
 Identifies the recipient of the message; used in the form of RCPT TO:.
 
 TURN
 
 Allows the client and server to exchange roles and send mail in the opposite direction without having to establish a new connection.
 
 ATRN
 
 ATRN (Authenticated TURN) command can choose one or more domains as parameters. If the session is authenticated, the ATRN command must be rejected.
 
 SIZE
 
 Provide a mechanism for the SMTP server to indicate the maximum message size supported. Compatible 
servers must provide a size range to indicate the maximum message size that can be accepted. The mail sent by the client should not be larger than the size indicated by the server.
 
 ETRN
 
 SMTP extension. The SMTP 
server can send ETRN to request another server to send any email it owns.
 
 PIPELINING
 
 Provides the ability to send a command stream without waiting for a response after each command.
 
 CHUNKING
 
 ESMTP command to replace DATA command. This command saves the SMTP host from continuously scanning the end of the data. It sends the BDAT command with parameters, which contains the total number of bytes of the mail. The receiving server calculates the number of bytes of the mail. If the mail size is equal to the value sent by the BDAT command, the 
server assumes that it has received all the mail data.
 
 DATA
 
 The command sent by the client to start the transmission of the mail content.
 
 DSN
 
 ESMTP command to enable notification of delivery status.
 
 RSET
 
 Invalidate the processing of the entire message and reset the buffer.
 
 VRFY
 
 Confirm that the mailbox can be used during mail delivery; for example, vrfy ted confirms that Ted's mailbox resides on the local server. This command is turned off by default in the Exchange implementation.
 
 HELP
 
 Returns the list of commands supported by the SMTP service.
 
 QUIT
 
 Terminate the session.
 
 SMTP command response code
 
 211 System status, or system help reply
 214 Help message (Information on how to use the receiver or the meaning of a particular non-standard command; this reply is useful only to the human user)
 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> (See Section 3.4)
 252 Cannot VRFY user, but will accept message and attempt delivery (See Section 3.5.3)
 354 Start mail input; end with <CRLF>.<CRLF>
 421 <domain> Service not available, closing transmission channel (This may be a reply to any command if the service knows it must shut down)
 450 Requested mail action not taken: mailbox unavailable (e.g., mailbox busy or temporarily blocked for policy reasons)
 451 Requested action aborted: local error in processing
 452 Requested action not taken: insufficient system storage
 455 Server unable to accommodate parameters
 500 Syntax error, command unrecognized (This may include errors such as command line too long)
 501 Syntax error in parameters or arguments502 Command not implemented (see Section 4.2.4)
 
 503 Bad sequence of commands
 504 Command parameter not implemented
 550 Requested action not taken: mailbox unavailable (e.g., mailbox not found, no access, or command rejected for policy reasons)
 
 551 User not local; please try <forward-path> (See Section 3.4)
 552 Requested mail action aborted: exceeded storage allocation
 553 Requested action not taken: mailbox name not allowed (e.g.,mailbox syntax incorrect)
 554 Transaction failed (Or, in the case of a connection-opening response, "No SMTP service here")
 555 MAIL FROM/RCPT TO parameters not recognized or not implemente