SMTP命令行
2008/08/24 10:45
明确SMTP协议的过程,据此编写邮件发送程序。 1. SMTP SMTP (Simple Mail Transfer Protocol) : 电子邮件从客户机传输到服务器或从某一个服务器传输到另一个服务器使用的传输协议。 SMTP 是请求/响应协议,命令和响应都是基于 ASCII 文本,并以 CR 和 LF 符结束。响应包括一个表示返回状态的三位数字代码。SMTP 在 TCP 协议 25 端口监听连接请求。 什么是 ESMTP ESMTP (Extended SMTP),顾名思义,扩展 SMTP 就是对标准 SMTP 协议进行的扩展。它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP 发信时,服务器会要求用户提供用户名和密码以便验证身份。验证之后的邮件发送过程与 SMTP 方式没有两样。 2.ESMTP ESMTP (Extended SMTP),顾名思义,扩展 SMTP 就是对标准 SMTP 协议进行的扩展。它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP 发信时,服务器会要求用户提供用户名和密码以便验证身份。验证之后的邮件发送过程与 SMTP 方式没有两样。 3.SMTP命令 HELO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。 EHLO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。 MAIL FROM 命令中指定的地址是发件人地址 RCPT TO 标识单个的邮件接收人;可有多个 RCPT TO;常在 MAIL 命令后面。 DATA 在单个或多个 RCPT 命令后,表示所有的邮件接收人已标识,并初始化数据传输,以 CRLF.CRLF 结束 VRFY 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令 EXPN 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用 HELP 查询服务器支持什么命令 NOOP 无操作,服务器应响应 OK RSET 重置会话,当前传输被取消 QUIT 结束会话 4.命令行发信过程 Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp. C:\Documents and Settings\Administrator>telnet 欢迎使用 Microsoft Telnet Client Escape 字符是 'CTRL+]' Microsoft Telnet>open smtp.sohu.com 25 220 smtp.sohu.com ESMTP Postfix > helo 250-smtp.sohu.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN > auth login 334 VXNlcm5hbWU6 > Z2FvbWFueWlAc29odS5jb20= #Base64Encode(gaomanyi@sohu.com) = Z2FvbWFueWlAc29odS5jb20= 334 UGFzc3dvcmQ6 > **************** #Base64Encode(My Password)=This is a secret! 235 2.0.0 Authentication successful > mail from:<gaomanyi@sohu.com> 250 2.1.0 Ok rcpt to:<gamma.gao@hotmail.com> 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> date:Sun, 24 Aug 2008 11:03:27 +0800 #随便假定个时间 from:<gaomanyi@sohu.com> to:<gamma.gao@sohu.com> #故意写错 subject:Test for SMTP command This is my test! . 250 2.0.0 Ok: queued as 75F228E8774 quit 221 2.0.0 Bye ok,收到信了,情况是这样的: --- Test for SMTP command #主题正确 发件人: gaomanyi@sohu.com 发送时间:2008年8月24日 11:04:43 #时间得到更正 收件人:gamma.gao@sohu.com #收件人没更正过来,好傻x This is my test! |