步骤:
1、使用telnet连接smtp服务器
2、发送一个helo或者ehlo指令
3、验证用户(使用邮件名登陆)
4、使用mail命令准备发送邮件
5、使用rcpt命令指定对方邮箱地址
6、使用data命令开始输入内容
7、输入test或者hello world类似字样(即邮件内容)
8、输入邮件内容结束标志.
1. SMTP协议 1.1 SMTP简介 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,尽管邮件服务器可以用SMTP发送、接收邮件,但是邮件客户端只能用SMTP发送邮件,接收邮件一般用IMAP 或者 POP3 。邮件客户端使用TCP的25号端口与服务器通信。
SMTP在1982年首次被定义在 RFC 821 ,在2008它被更新为扩展的SMTP协议,补充在文件 RFC 5321 ,扩展的协议是目前使用最广泛的协议。
1.2 SMTP命令 EHLO(Extended hello)or HELO(hello) 这个命令用于说明自己是SMTP客户端身份,参数包含客户端的域名(domain)。其中EHLO是SMTP补充协议( RFC 5321 )中用于替换HELO命令的新命令,协议规定服务器支持EHLO命令的时候,尽量使用EHLO命令,为了兼容以前的版本,要求服务器继续支持HELO命令。如果收到回复OK,说明发送者和接收者处于初始状态,所有的状态表和缓存区都被清零。 MAIL 这个命令的参数是发送者邮箱<reverse-path>,参数中有 FROM 关键字,这个命令会清空之前的发送者邮箱(the reverse-path buffer)、接收者邮箱(forward-path buffer)和邮件数据(the mail data buffer)。 RCPT (recipient) 用于指定一个邮件接收者,参数中有TO 关键字,指定多个接收者通过重复使用这个命令。 DATA 这个命令没有参数,告诉服务器接着要发送邮件内容。 邮件内容包含邮件标题项(message header section )和邮件正文(message body), 标题项(Header Fields )是以项目名(field name)为行的起点,接着是冒号(":"),跟着是内容(field body)以回车换行结束(CRLF).邮件的标题区与正文区需要用一个空行隔开。两者共同组成DATA命令的参数,正文区用只有一个点字符“.”的单行来结束。 SEND 初始化邮件事务,邮件数据被转发到一个或多个终端。 SOML(SEND OR MAIL) 初始化邮件事务,邮件数据被转发到一个或多个终端或邮箱。 SAML(SEND AND MAIL) 初始化邮件事务,邮件数据被转发到一个或多个终端和邮箱。 RSET(RESET) 这个命令用来终止邮件事务(mail transaction),任何已经存储的发送者、接收者、邮件数据(mail data)信息都被丢弃,缓存区被清零。 VRFY(VERIFY) 验证邮箱是否存在,如果参数是用户名,则返回一个全名(如果存在)。 EXPN(EXPAND) 验证邮箱列表 HELP 返回帮助信息,带参数时候,返回指定的帮助信息。 NOOP 这个命令指示服务器收到命令后不用回复 “OK” QUIT 关闭传输通道。 TURN 交换邮件发送者和接收者的角色,这个命令用在建立连接成本高的时候,TCP连接不用这个命令。这个命令会产生安全问题,只有在服务器可以被授权作为客户端时候才能用。 1.3 SMTP步骤 第一步是MAIL命令,<reverse-path>包含发送者邮箱( <SP>是空格,<CRLF>是回车换行)
MAIL <SP> FROM:<reverse-path> <CRLF> 这个命令告诉接收者,开始一个新的邮件事务,重置所有的状态表和缓存区,包括接受者信息和邮件数据,<reverse-path>被用于报告错误,如果命令被接受,返回250 OK 第二步是 RCPT命令
RCPT <SP> TO:<forward-path> <CRLF> 这个命令提供一个接收者邮箱,如果被接受返回250 OK,如果不能被识别,返回550 Failure,这个第二步可以被重复多次。 第三步是 DATA命令
2. SMTP发送邮件实验 2.1 实验准备 准备163邮箱两个,开启SMTP:
开启服务:
2.2 实验步骤 1.使用telnet 连接smtp服务器
telnet smtp.163.com 25 //直接进入回显模式
2.查看连接是否建立
helo localhost
3.登录
auth login
输入账号和授权密码,账号和授权密码要以base64编码的形式输入,授权密码不是邮箱密码,要在163邮箱主页开启邮箱的SMTP服务后再获取
在线base64编码:网站
邮箱:######
获取授权密码:
授权密码:######
接下来输入邮件信息:
其中mail from和rcpt to必须是发送邮箱和接收邮箱的账号,否则会被认为是无效邮件无法发送:
#邮件头,必须是正确的
mail from: <aa27975599672021@163.com>
rcpt to: <aa27975599672022@163.com>
#开始输入邮件正文
data
from: <aa27975599672021@163.com>
to: <aa27975599672022@163.com>
subject:hello,aa27975599672022@163.com
#空一行
hello
#空一行,后面输入一个点后回车表示结束
.
发送成功:
在网页邮箱中查看:
接收的邮件:
3. 参考 [1] 使用telnet登陆smtp服务,使用163发邮件