您的位置:首页 > 运维架构

邮件传输协议(SMTP/POP3)初探

2015-08-26 12:03 549 查看

1、邮件传输协议简介

1.1、SMTP协议

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,属于TCP/IP协议簇。定义邮件发送的通讯规则,用于处理用户

smtp请求,将邮件发送到SMTP服务器。

1.2、POP3协议

POP3(Post Office Protocol - Version 3)即邮局协议版本3,属于TCP/IP协议簇。定义邮件接收的通讯规则,负责处理用户的pop3

请求,从POP3服务器接收邮件

一句话总结:smtp是用来发送邮件的,pop3是用来接收邮件的。

2、SMTP协议讲解

2.1、SMTP协议发送邮件过程

1.连接SMTP服务器

命令:telnet smtp.<服务器地址> 端口,例如:

telnet smtp.139.com 25

2.客户端向服务器发送HELO命令以标识发件人自己的身份

命令:helo  <内容>,例如:

helo hello

3.验证登录

命令:

auth login

用户名(BASE64加密,文章结尾提供该加密java帮助类)

密码(BASE64加密,文章结尾提供该加密java帮助类),

4.编辑邮件

命令:data

邮件内容格式:

from:<发送者>

to:<接收者>

subject:<主题>

<空一行>

<正文>

.(不能省略,“.”表示邮件内容结束)

5.断开连接

命令:quit

过程见下图:





现在到邮箱看看结果:





OK!发送成功!

2.2、命令

SMTP命令不区分大小写,但参数区分大小写,有关这方面的详细说明请参考RFC821。常用的命令如下:
HELO 。向服务器标识用户身份发送者能欺骗,说谎,但一般情况下服务器都能检测到。
MAIL FROM: 。为发送者地址,此命令用来初始化邮件传输,即用来对所有的状态和缓冲区进行初始化。

RCPT TO:。用来标志邮件接收者的地址,常用在MAIL FROM后,可以有多个RCPT TO。
DATA 。将之后的数据作为数据发送,以.标志数据的结尾。
REST 。重置会话,当前传输被取消。
NOOP 。要求服务器返回OK应答,一般用作测试。
QUIT 。结束会话。
VRFY 。验证指定的邮箱是否存在,由于安全方面的原因,服务器大多禁止此命令。
EXPN 。验证给定的邮箱列表是否存在,由于安全方面的原因,服务器大多禁止此命令。
HELP 。查询服务器支持什么命令。

2.3、响应码

常用的响应如下所示,数字后的说明是从英文译过来的。更详细的说明请参考RFC821。

501参数格式错误
502命令不可实现
503错误的命令序列
504命令参数不可实现
211系统状态或系统帮助响应
214帮助信息
220<domain>服务就绪
221<domain>服务关闭
421<domain>服务未就绪,关闭传输信道
250要求的邮件操作完成
251用户非本地,将转发向<forward-path>
450要求的邮件操作未完成,邮箱不可用
550要求的邮件操作未完成,邮箱不可用
451放弃要求的操作;处理过程中出错
551用户非本地,请尝试<forward-path>
452系统存储不足,要求的操作未执行
552过量的存储分配,要求的操作未执行
553邮箱名不可用,要求的操作未执行
354开始邮件输入,以"."结束
554操作失败

3、POP3协议

3.1、POP3协议接收邮件过程

1.连接POP3服务器

命令:telnet pop3.<服务器地址> 端口,例如:

telnet pop3.139.com 110

2.登录POP3服务器

命令:

user <用户名>(无须base64加密,明文)

pass <密码>(无须base64加密,明文)

3.查看邮箱的统计资料,如邮件总数和总字节数

命令:stat

4.查看参数标识的邮件的全部文本

命令:retr <邮件标识>

过程见下图:





3.2、命令

USER [username] 处理用户名

PASS [password]    处理用户密码

APOP [Name,Digest] 认可Digest是MD5消息摘要

STAT 处理请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数

UIDL [Msg#] 处理返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的

LIST [Msg#] 处理返回邮件数量和每个邮件的大小

RETR [Msg#] 处理返回由参数标识的邮件的全部文本

DELE [Msg#] 处理服务器将由参数标识的邮件标记为删除,由quit命令执行

RSET 处理服务器将重置所有标记为删除的邮件,用于撤消DELE命令

TOP [Msg# n] 处理服务器将返回由参数标识的邮件前n行内容,n必须是正整数

NOOP 处理服务器返回一个肯定的响应

QUIT 终止会话

附:BASE64加密JAVA帮助类

package util;

import java.io.IOException;
import java.nio.charset.Charset;

import Decoder.BASE64Decoder;
import Decoder.BASE64Encoder;

public class Base64Util {

public static String base64Decoder(String inputString,String charsetName) throws IOException{
BASE64Decoder decoder = new BASE64Decoder();
//base64转换成二进制
byte[] bytes = decoder.decodeBuffer(inputString);
//按照指定编码构造字符串输出
String outString = new String(bytes,charsetName);
return outString;
}

public static String base64Encoder(String inputString) throws IOException{
BASE64Encoder encoder = new BASE64Encoder();
//按照base64编码输出
String outString = encoder.encode(inputString.getBytes());
return outString;
}

public static void main(String[] args) throws IOException {
String utf = Base64Util.base64Encoder("123456789");
System.out.println(utf);
String base64 = Base64Util.base64Decoder(utf, "utf-8");
System.out.println(base64);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: