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)等重要信息。当然这些信息需要你自己写程序进行逐行解析。

通过LISTTOP命令的结合使用,我们就可以快速的查看邮箱中所有邮件的概要信息。这样可以避免将整个邮件全部下载下来。

当我们看到感兴趣的邮件时(主题和发件人)可以决定是否使用RETR命令将整封邮件读取下来;反之,如果是垃圾邮件,则直接使用DELE命令将其删除。

UIDL命令的作用

UIDL命令用于查询某封邮件的唯一标识符。

该命令的现实意义在于:当你对邮件进行持久化,也就是下载到本地进行离线管理时,可作为识别该邮件的唯一身份ID,从而避免重复下载,并进行有效的本地化管理。

通过上面的命令我们可以看到,POP协议是以邮件编号(msgno)作为邮件标识进行在线交互操作,但邮件编号(msgno)只能保证在本次会话中保持唯一,不能保证在下次会话中不会发生变化。如果删除了第1封邮件,并退出重新登录邮箱,邮件的顺序将会打乱。

附带说明一下:DELE命令只是将邮件在本次会话中标记为删除,只有在QUIT命令发出时,也就是退出POP会话时,服务器才会进行一次真正的邮件删除操作。

 

有些人使用邮件客户端程序接收邮件后,并不会从pop服务器上删除邮件。这样可以确保在不同的终端上还能继续查看邮件,比如使用公司的Foxmail接收了邮件,如果回家或出差时,可以使用其它终端设备(笔记本或手机)的邮件客户端程序(比如Outlook)将邮件再下载一遍。这时客户端程序会通过邮件的UIDL来确定该邮件是否已下载过,比如我们可以使用UIDL来作为下载邮件的文件名,如果发现文件已存在,就不需要从POP服务器进行再次读取。

通过LISTUIDL命令的结合使用,我们可以对离线邮件(已下载邮件)进行在线比对,从而判断是否有新邮件需要接收

附: 部分常用邮箱使用的UIDL一览

qq邮箱

新浪邮箱

网易邮箱

微软邮箱

附:POP3:基于命令行的电子邮件(EMail)在线查看和批量下载工具

POP3协议(电子邮件邮局协议)中UIDL和TOP命令在实际使用中的作用的更多相关文章

  1. Linux中强大的top命令

    top命令算是最直观.好用的查看服务器负载的命令了.它实时动态刷新显示服务器状态信息,且可以通过交互式命令自定义显示内容,非常强大. 在终端中输入top,回车后会显示如下内容:   top - 21: ...

  2. 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 ...

  3. linux系统管理--top命令

    这些日子,运维公司三台服务器,一个小伙伴貌似对top命令不太感冒,我告诉他去百度(不懂谷歌百度的程序员不是好厨师),然后突然发现也许我自己该整理一下相关的东西了 top命令是Linux下常用的性能分析 ...

  4. linux ps top 命令 VSZ,RSS,TTY,STAT, VIRT,RES,SHR,DATA的含义

    VIRT:virtual memory usage 虚拟内存1.进程“需要的”虚拟内存大小,包括进程使用的库.代码.数据等2.假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而 ...

  5. ps与top命令简单介绍

    Linux中ps与top命令 这两个命令都是查看系统进程信息的命令,但是用处有点儿不同 1.ps命令--提供系统过去信息的一次性快照 也就是说ps命令能够查看刚刚系统的进程信息  命令:ps aux或 ...

  6. top命令查看进程列表

    top命令查看进程列表 top命令是linux下常用的性能分析工具,能实时显示系统中各个进程的资源占用状况.和win的资源管理器类似.top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态,如 ...

  7. Linux命令:top命令

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来不断刷新 ...

  8. 使用POP3协议接收并解析电子邮件(全)

    package org.yangxin.study.jm; import java.io.BufferedInputStream; import java.io.BufferedOutputStrea ...

  9. C#基础--基于POP3协议的邮件接收和基于STMP的邮件发送

    最近在用outlook同步邮件.对邮件协议有一点兴趣.于是就去收集了一些资料,学习了一下如何通过.net来实现邮件的收发.    一:SMTP协议  1.什么是SMTP协议:       SMTP目前 ...

随机推荐

  1. Net中委托之一

    1.委托的用法 委托是一种特殊的类型 a. 委托可以类外定义,也可以在类里面定义 b. 委托的操作步骤 1.委托的声明 2.委托的实例化 3.委托的调用 2.委托实例 amespace MyDeleg ...

  2. OpenCv基础_三

    轮廓检测 图像金字塔 上采样,图像变大一倍,矩阵用0填充 img = cv2.imread('1,jpg') cv_show('img',img) up = cv2.pyrUp(img) cv_sho ...

  3. collections 数据类型扩展模块

    在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict.namedtuple和Ord ...

  4. 通过blacklist来禁用驱动

    blacklist黑名单 我们在linux中安装驱动,有时会遇到受限或冲突,通常解决方式都是要修改blacklist.conf.对内核模块来说,黑名单是指禁止某个模块装入的机制 在 /etc/modp ...

  5. Cobalt Strike之LINK木马

    在同一目录下 新建一个exp.ps1 一个test.txt exp.ps1代码 $file = Get-Content "test.txt" $WshShell = New-Obj ...

  6. 如何解析EML(邮件)格式的文件以及一款小巧的EML邮件阅读工具

    在理解EML格式的时候,先回顾一下历史,这样有助于理解邮件的格式,比如邮件传输时为何会有多种编码方式.此外,理解EML格式也有助于理解HTTP协议. 历史溯源 由于历史原因,我们目前看到的大部分的网络 ...

  7. struts2学习二:Tomcat的部署目录和访问路径问题

    1:idea中配置tomcat后,那么最终的web工程发布到哪里去了?为什么在访问路径中不加工程名就可以访问? 1.1:因为tomcat有段时间没接触了,先回顾下tomcat的目录结构吧? 如图所示: ...

  8. homebrew 安装nginx+php+mysql

    转:https://juejin.im/post/5c8fb28a6fb9a07103548318 brew search nginxbrew install nginx /usr/local/etc ...

  9. 为什么要配置JDK环境变量?

    1. PATH环境变量.作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序.我们需要把 jdk安装目录下的bin目录增加到现有的PATH ...

  10. 学习FastDfs(一)

    一.简介 FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server).存储服务器(storage server)和客户端(client)三个部分组成 fastfds有 ...