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目前 ...
随机推荐
- BUU [GKCTF 2021]签到
BUU [GKCTF 2021]签到 1.题目概述 2.解题过程 追踪HTTP流 在下面发现了一串可疑字符 Base16转base64 放到010里看看 复制下来,去转字符 好像不是,再回去找找其他的 ...
- 可移植的python环境
创建可移植的python环境 工作时使用的系统不联网,而且自带的python环境库不完整,每次干活都心累,所以想要做一个可移植的精简版的python环境. 开始前的准备: Ubuntu18.04 py ...
- [SPDK/NVMe存储技术分析]013 - libibverbs API应用案例分析
本文是对论文Dissecting a Small InfiniBand Application Using the Verbs API所做的中英文对照翻译 Dissecting a Small Inf ...
- 我写的 Python 代码,同事都说好
原文链接: 我写的 Python 代码,同事都说好 人生苦短,我用 Python. 程序员的追求就是不写代码,早日财务自由.不对,一不小心把实话说出来了,应该是将代码写得简洁,优雅. Python 程 ...
- GeneralUpdate20220323里程碑版本发布
大家好我是juster,GeneralUpdate的开源项目作者.这次将发布GeneralUpdate里程碑版本,该版本发生了巨大改变历时4个月的时间终于要和大家见面了.开源不易希望大家能多多支持.可 ...
- Mac 常用
Mac下如何复制文件路径 / 文件夹路径 Rudon滨海渔村 2020-08-06 20:35:33 587 收藏分类专栏: Mac OS X 命令行 文章标签: Mac Finder版权步骤在Fin ...
- docker之间如何通讯的
Docker 查看容器 IP 地址 查看Docker的底层信息. docker inspect 会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息 docker inspect ...
- 在Spring AOP 中,关注点和横切关注的区别是什么?
关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能. 横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如日志,安全和数据传输,几乎应用的每个模块 ...
- Dubbo 必须依赖的包有哪些?
Dubbo 必须依赖 JDK,其他为可选.
- Mybatis useGeneratedKeys无法返回主键解决
1.项目环境--SpringBoot下的SSM+Maven 2.问题出现位置--Dao层和Mapper文件 错误代码如下图: dao层: mapper文件: 错误代码分析: 使用useGenerate ...
