过程:
- 客户端使用 telnet 命令连接到SMTP服务器,建立会话。
- 客户端发送一个 HELO 或 EHLO 命令。
- 客户端发送一个 AUTH 认证命令进行用户登录(使用 smtpd 方式)。
- 客户端发送一个 MAIL 命令指定发件人。
- 客户端发送一个 RCPT 命令指定收件人。
- 客户端发送一个 DATA 命令准备输入邮件正文。
- 客户端发送一个 . 命令(点命令)表示 DATA 命令结束。
- 客户端发送一个 QUIT 命令结束会话。
命令
noop :检查连接状态
实例(网易邮箱):
准备:先打开telnet服务,获取授权码并进行Base64编码。
- 打开cmd输入 telnet smpt.163.com 25 连接到网易服务器的25端口上,返回 220 163.com Anti-spam GT for Coremail System (163com[20141201])
- 发送 helo localhost 返回250 ok
- 发送 auth login 返回 334 dXNlcm5hbWU6
- 输入经过编码后的邮件地址返回334 UGFzc3dvcmQ6输入授权码235 Authentication successful
- 输入mail from:<xxx@163.com>返回250 Mail OK
- 输入rcpt to:<xxx>返回250 Rcpt OK(可以输入多个rcpt群发)
- 输入data代表邮件内容返回 354 End data with <CR><LF>.<CR><LF>
-
其中from,to,subject之外的可以省略,返回250 Data Ok: queued as freedom
Content-Type: text/plain; charset="utf-8" # 指定编码类型,防止中文乱码 Content-Transfer-Encoding: base64 # 指定数据压缩格式 From: hello@aliyun.com # 发件人 To: a1@163.com,q1@qq.com # 收件人,如果时多个收件人中间用逗号隔开 Cc: q2@qq.com # 抄送对象 Bcc: q3@qq.com # 暗送对象 Subject: =?utf-8?b?57uI56uv5L2/55SodGVsZW505Y+R6YCB6YKu5Lu2?= # 主题,如果utf-8编码,并采用base64对数据压缩,其 #格式为: =?utf-8?b?base64压缩后的数据?=, 压缩前数 #据为:终端使用telent发送邮件#此处有一个空行 5L2g5aW9dGVsbmV0LOS9oOWlvXB5dGhvbg== # 这里是正文(base64压缩后的数据,压缩前为: 你好 # telnet,你好python)#此处有一个空行 . # .表示邮件数据结束
-
输入quit退出
状态码:
220 : 服务就绪
250 :请求邮件动作正确,完成(HELO,MAIL FROM,RCPT TO,QUIT 指令执行成功会返回此信息)
235 :认证通过
221 :正在处理
354 :开始发送数据,结束以 .(DATA指令执行成功会返回此信息)
500 :语法错误,命令不能识别
550 :命令不能执行,邮箱无效
552 :中断处理:用户超出文件空间
参考文档:http://baijiahao.baidu.com/s?id=1603601217145312063&wfr=spider&for=pc