5. 基于 SMTP 方式 参考 RFC821 规范 SMTP 命令不区分大小写,但参数区分大小写 常用的 SMTP 命令 HELO <domain> <CRLF> 。向服务器标识用户身份发送者能欺骗,说谎,但一般情况下服务器都能检测到。 MAIL FROM: <reverse-path> <CRLF> 。 <reverse-path> 为发送者地址,此命令用来初始化邮件传输,即用来对所有的状态和缓冲区进行初始化。 RCPT TO : <forward-path> <CRLF> 。 <forward-path> 用来标志邮件接收者的地址,常用在 MAIL FROM 后,可以有多个 RCPT TO 。 DATA <CRLF> 。将之后的数据作为数据发送,以 <CRLF>.<CRLF> 标志数据的结尾。 REST <CRLF> 。重置会话,当前传输被取消。 NOOP <CRLF> 。要求服务器返回 OK 应答,一般用作测试。 QUIT <CRLF> 。结束会话
6. 通信过程分析 Send: Try to connect smtp.qiye.163.com, Port 25 Return: 220 qiye.163.com Anti-spam GT for Coremail System (163-hosting[20090619]) Return: Connected to mail host smtp.qiye.163.com Send: HELO abc.com Return: 250 OK Send: AUTH LOGIN // 请求认证 Return: 334 dXNlcm5hbWU6 // 服务器的响应——经过 base64 编码了的“ Username” Send: bm8tamVwbHlAbWJha2Jhby5jb20= Return: 334 UGFzc3dvcmQ6 // 经过 BASE64 编码了的 "Password:" Send: SkR1TWo3c0xabW5kcmJDUA== Return: 235 Authentication successful Send: MAIL FROM: <no-reply@abc.com> Return: 250 Mail OK Send: RCPT TO: <abc@163.com> Return: 250 Mail OK Send: DATA Return: 354 End data with <CR><LF>.<CR><LF> Send: 邮件头和邮件内容 Send: . Return: 250 Mail OK queued as smtp3,PdOowKBbJAKbs4FMk5IEAA--.2984S2 1283568539 Send: QUIT Return: 221 Bye