POP3协议(电子邮件邮局协议)中UIDL和TOP命令在实际使用中的作用
POP3是电子邮件协议中用于接收邮件的协议,相较于发送邮件的SMTP协议,POP3的命令要多一些。主要的命令有LIST、STAT、RETR、DELE、UIDL、TOP、QUIT,以及用于登录邮箱的USER和PASS命令。
介绍POP3命令的文章有很多,这里重点介绍UIDL和TOP在实际使用中的现实意义。
使用这些命令非常简单,可以用telnet命令进行模拟交互。下面以pop.yeah.net邮箱服务器为例,在命令行模式下输入:
telnet pop.yeah.net 110
当用户连接上POP邮件服务器时,会收到服务器返回的欢迎语,接着使用USER和PASS命令登录邮箱,登录成功后,就可以使用其它命令与POP服务器进行在线交互了。
其中,STAT命令显示邮箱中的邮件数量和所有邮件的大小(以字节为单位)。
LIST命令用于列出邮箱中的所有邮件信息,确切的说是消息摘要,因为这里的邮件信息并不是指邮件的主题、发件人、收件人等信息,而只是简单的邮件编号(msgno)和邮件大小。
这里显示的有8封邮件,由于可能存在多条(多行)消息,因此POP协议中以"."加回车换行("\r\n")作为整个LIST响应消息的结束,此外接收邮件的RETR命令也是以“.\r\n”作为整个邮件的结束。
显然我们无法通过LIST命令看到邮件具体的摘要信息,比如最重要的邮件主题和发件人。
TOP命令的作用
此时TOP命令就发挥了作用,该命令用于获取某封邮件的邮件头和邮件体中的前N行内容(TOP msgno N)。使用如下命令可以获取邮件头。
TOP 1 0
注意这里的N是指邮件体中的前N行内容,如果N为0,则表示不返回内容,仅返回邮件头(这里获取邮件编号为1的邮件头)。

邮件头中包含了主题(Subject)、发件人(From)、收件人(To)、抄送人(Cc)等重要信息。当然这些信息需要你自己写程序进行逐行解析。
通过LIST和TOP命令的结合使用,我们就可以快速的查看邮箱中所有邮件的概要信息。这样可以避免将整个邮件全部下载下来。
当我们看到感兴趣的邮件时(主题和发件人)可以决定是否使用RETR命令将整封邮件读取下来;反之,如果是垃圾邮件,则直接使用DELE命令将其删除。
UIDL命令的作用
UIDL命令用于查询某封邮件的唯一标识符。
该命令的现实意义在于:当你对邮件进行持久化,也就是下载到本地进行离线管理时,可作为识别该邮件的唯一身份ID,从而避免重复下载,并进行有效的本地化管理。
通过上面的命令我们可以看到,POP协议是以邮件编号(msgno)作为邮件标识进行在线交互操作,但邮件编号(msgno)只能保证在本次会话中保持唯一,不能保证在下次会话中不会发生变化。如果删除了第1封邮件,并退出重新登录邮箱,邮件的顺序将会打乱。
附带说明一下:DELE命令只是将邮件在本次会话中标记为删除,只有在QUIT命令发出时,也就是退出POP会话时,服务器才会进行一次真正的邮件删除操作。
有些人使用邮件客户端程序接收邮件后,并不会从pop服务器上删除邮件。这样可以确保在不同的终端上还能继续查看邮件,比如使用公司的Foxmail接收了邮件,如果回家或出差时,可以使用其它终端设备(笔记本或手机)的邮件客户端程序(比如Outlook)将邮件再下载一遍。这时客户端程序会通过邮件的UIDL来确定该邮件是否已下载过,比如我们可以使用UIDL来作为下载邮件的文件名,如果发现文件已存在,就不需要从POP服务器进行再次读取。
通过LIST和UIDL命令的结合使用,我们可以对离线邮件(已下载邮件)进行在线比对,从而判断是否有新邮件需要接收。
附: 部分常用邮箱使用的UIDL一览
qq邮箱

新浪邮箱

网易邮箱

微软邮箱

附:《POP3:基于命令行的电子邮件(EMail)在线查看和批量下载工具》
POP3协议(电子邮件邮局协议)中UIDL和TOP命令在实际使用中的作用的更多相关文章
- Linux中强大的top命令
top命令算是最直观.好用的查看服务器负载的命令了.它实时动态刷新显示服务器状态信息,且可以通过交互式命令自定义显示内容,非常强大. 在终端中输入top,回车后会显示如下内容: top - 21: ...
- linux ps top 命令 VSZ,RSS,TTY,STAT, VIRT,RES,SHR,DATA的含义【转】
转自:http://blog.csdn.net/zjc156m/article/details/38920321 http://javawind.net/p131 VIRT:virtual memor ...
- linux系统管理--top命令
这些日子,运维公司三台服务器,一个小伙伴貌似对top命令不太感冒,我告诉他去百度(不懂谷歌百度的程序员不是好厨师),然后突然发现也许我自己该整理一下相关的东西了 top命令是Linux下常用的性能分析 ...
- linux ps top 命令 VSZ,RSS,TTY,STAT, VIRT,RES,SHR,DATA的含义
VIRT:virtual memory usage 虚拟内存1.进程“需要的”虚拟内存大小,包括进程使用的库.代码.数据等2.假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而 ...
- ps与top命令简单介绍
Linux中ps与top命令 这两个命令都是查看系统进程信息的命令,但是用处有点儿不同 1.ps命令--提供系统过去信息的一次性快照 也就是说ps命令能够查看刚刚系统的进程信息 命令:ps aux或 ...
- top命令查看进程列表
top命令查看进程列表 top命令是linux下常用的性能分析工具,能实时显示系统中各个进程的资源占用状况.和win的资源管理器类似.top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态,如 ...
- Linux命令:top命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来不断刷新 ...
- 使用POP3协议接收并解析电子邮件(全)
package org.yangxin.study.jm; import java.io.BufferedInputStream; import java.io.BufferedOutputStrea ...
- C#基础--基于POP3协议的邮件接收和基于STMP的邮件发送
最近在用outlook同步邮件.对邮件协议有一点兴趣.于是就去收集了一些资料,学习了一下如何通过.net来实现邮件的收发. 一:SMTP协议 1.什么是SMTP协议: SMTP目前 ...
随机推荐
- Intel Quartus Prime Pro Edition 权限提升漏洞
受影响系统:Intel Quartus Prime Pro Edition < 19.3描述:CVE(CAN) ID: CVE-2019-14603 Intel Quartus Prime Pr ...
- 记mysql5.7错误only_full_group_by
错误截图为上 mysql版本:5.7.35-0ubuntu0.18.04.1 "this is incompatible with sql_mode=only_full_group_by&q ...
- python轻松入门——爬取豆瓣Top250时出现403报错
关于爬虫程序的418+403报错. 1.按F12打开"开发者调试页面"如下图所示:按步骤,选中Network,找到使用的接口,获取到浏览器访问的信息. 我们需要把自己的python ...
- python获取本地时间,时间戳与日期格式相互转换
附上代码与运行结果截图: import time # 获取当前时间 now = time.localtime() # 格式化日期 now_ = time.strftime('%Y-%m-%d %H:% ...
- Mac安装和配置Maven 及其第二次启动报错问题解决
1.下载安装 下载地址: https://maven.apache.org/download.cgi 下载后解压下来重名名为ApacheMaven,并放入到/usr/local/下 2.配置环境变 ...
- 面试官:说一下Synchronized底层实现,锁升级的具体过程?
面试官:说一下Synchronized底层实现,锁升级的具体过程? 这是我去年7,8月份面试的时候被问的一个面试题,说实话被问到这个问题还是很意外的,感觉这个东西没啥用啊,直到后面被问了一波new O ...
- zookeeper 是如何保证事务的顺序一致性的?
zookeeper 采用了全局递增的事务 Id 来标识,所有的 proposal(提议)都在被 提出的时候加上了 zxid,zxid 实际上是一个 64 位的数字,高 32 位是 epoch(时 期; ...
- 模糊查询like语句该怎么写?
第1种:在Java代码中添加sql通配符. string wildcardname = "%smi%"; list<name> names = mapper.selec ...
- Redis Set Type
集合中的元素个数最多为2的32次方-1个,集合中的元素师没有顺序的. Redis集合的操作命令和对应的api如下: smembers [set] JedisAPI:public Set<Stri ...
- 在多线程环境下,SimpleDateFormat 是线程安全的吗?
不是,非常不幸,DateFormat 的所有实现,包括 SimpleDateFormat 都不是 线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中 使用,如 将 SimpleDa ...
