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目前 ...
随机推荐
- Objects.equals有坑
前言 最近review别人代码的时候,发现有个同事,在某个业务场景下,使用Objects.equals方法判断两个值相等时,返回了跟预期不一致的结果,引起了我的兴趣. 原本以为判断结果会返回true的 ...
- 对 Kubernetes 部署进行故障排除的视觉指南
链接:https://learnk8s.io/troubleshooting-deployments
- virtualenv和virtualenvwrapper pipenv安装
virtualenv和virtualenvwrapper pipenv安装 virtualenvwrapper工具 virtualenvwrapper是用来管理virtualenv的扩展包,用着很方便 ...
- iscsi挂载
iscsi挂载 1.server端: (1) yum -y ...
- 关于如何让写自然溢出hash的无辜孩子见祖宗这件事
关于如何让写自然溢出hash的无辜孩子见祖宗这件事 来源博客 这几天考试连着好几次被卡hash卡到死. 我谔谔,为什么连hash都要卡. 码力弱鸡什么时候才能站起来. 只需要任意两种字符,比如噫呜呜噫 ...
- Linux源码安装RabbitMQ高可用集群
1.环境说明 linux版本:CentOS Linux release 7.9.2009 erlang版本:erlang-24.0 rabbitmq版本:rabbitmq_server-3.9.13 ...
- docker专题 从入门到放弃
1.docker是什么 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚 ...
- lombok的@builder 不能新建DO对象 Lombok存在的一些问题
1. 实体类加上 lombok的@builder之后 就不能新建对象了,,,构造函数被覆盖了? 加上两个标签之后解决 2.Lombok存在的一些问题 lombok问题 @Builder和@NoArg ...
- 使用Spring通过什么方式访问Hibernate?
在Spring中有两种方式访问Hibernate: 控制反转 Hibernate Template和 Callback. 继承 HibernateDAOSupport提供一个AOP 拦截器.
- java中线程池创建的几种方式
java中创建线程池的方式一般有两种: 通过Executors工厂方法创建 通过new ThreadPoolExecutor(int corePoolSize, int maximumPoolSize ...
