POP3(邮局协议第3版)是用于接收和下载电子邮件的应用层协议。它的主要作用是:
- 邮件下载:支持客户端从POP3服务器下载邮件。
- 邮件删除:支持客户端在下载邮件后将其从POP3服务器删除。
- 邮件标记:支持客户端在POP3服务器上标记邮件为已读等状态。
- 邮件保留:支持客户端保留邮件在POP3服务器上不予下载和删除。
- 支持离线:客户端可以在断开连接的情况下访问POP3服务器上的邮件。
- 权限控制:基于用户和密码对POP3服务器的访问进行授权控制。
- 同步/异步:支持客户端同步连接POP3服务器直接接收新消息,也支持定期异步连接下载邮件。
POP3协议使用TCP连接,通过命令和应答机制工作,主要命令包含:
- USER:登录命令,用于客户端登录POP3服务器。
- PASS:密码命令,用于客户端发送登录密码。
- STAT:统计命令,用于查询POP3服务器上邮件数量和占用空间大小。
- LIST:列表命令,用于客户端获取邮件编号和大小列表。
- RETR:检索命令,用于根据邮件编号下载邮件内容。
- DELE:删除命令,用于根据邮件编号将邮件从POP3服务器删除。
- QUIT:退出命令,用于客户端退出POP3会话。
代码示例:
// POP3客户端
Socket socket = new Socket("pop3server", 110); // 连接POP3服务器
// 发送USER,PASS命令登录
OutputStream out = socket.getOutputStream();
out.write("USER pop3user\r\n".getBytes());
out.write("PASS 123456\r\n".getBytes());
// 发送STAT命令获取邮件统计信息
out.write("STAT\r\n".getBytes());
InputStream in = socket.getInputStream();
byte[] resp = new byte[1024];
in.read(resp); // +OK 2 320
// 发送LIST命令获取邮件ID和大小
out.write("LIST\r\n".getBytes());
in.read(resp); // +OK 2 messages (320 octets)
String idsize = resp.toString();
// 发送RETR命令下载邮件内容
String mailID = idsize.split("\\s+")[1];
out.write(("RETR " + mailID + "\r\n").getBytes());
byte[] mailContent = readData(in);
// 发送DELE命令删除邮件
out.write(("DELE " + mailID + "\r\n").getBytes());
// 发送QUIT命令退出
out.write("QUIT\r\n".getBytes());
POP3协议用于客户端访问和下载邮件服务器上的邮件,它简单轻量,易于实现,与SMTP协议一起构成基础的电子邮件系统。POP3S是POP3的安全版本,使用SSL/TLS为客户端和服务器通信加密。