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. 两个宝藏|关于我在github上冲浪时的一个小技巧。

    你好呀,我是歪歪. 前几天在 github 上冲浪的时候,发现了两个宝藏东西. 我也不藏着掖着了,拿出来给大家分享一下. 这两个宝藏是关于 arthas 和 SOFARegistry 的,这两个东西都 ...

  2. vue2.x版本中computed和watch的使用入门详解-computed篇

    前言 在基于vue框架的前端项目开发过程中,只要涉及到稍微复杂一点的业务,我们都会用到computed计算属性这个钩子函数,可以用于一些状态的结合处理和缓存的操作. 基础使用 在computed中,声 ...

  3. 4月8日 python学习总结 模块与包

    一.包 #官网解释 Packages are a way of structuring Python's module namespace by using "dotted module n ...

  4. async-validator 源码学习笔记(四):validator

    系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...

  5. 数据类型 Java day7

    数据类型 数据类型包含:引用数据类型和基本数据类型 引用数据类型:出去基本数据类型,其他的类型,如String 基本数据类型:总共分四大类有八种 四大类:整数,浮点数.字符.布尔 一.整数包含以下 数 ...

  6. 四旋翼中的PID调节方法 | betaflight固件如何调节PID

    roll横滚,pitch俯仰,yaw航向 一.PID的作用概述 1.P产生响应速度和力度,是I和D的基础 过小响应慢(虽然无震荡) 过大会产生振荡且不断发散 2.D抑制过冲和振荡,抵抗外界的突发干扰, ...

  7. BUAA 2021-2022毛概复习资料

    2021-2022年毛概期末主观题复习范围,参考2022版教材和课程组官方PPT,原文太过敏感,所以贴出代码大家自己run #include <stdio.h> unsigned arti ...

  8. ShellExecuteA加载exe文件指定工作目录找不到文件的问题

    使用ShellExecuteA调用exe文件时,指定工作目录需要注意 函数原型为: HINSTANCE ShellExecuteA( HWND hwnd, LPCTSTR lpOperation, L ...

  9. Ajax的乱码解决问题?

    Javascript是使用UTF-8国际编码,即每个汉字用4个字节来存储,这就造成了用AJAX来send数据的时候出现会乱码. Ajax乱码产生主要有2个原因 1. XMLHttpRequest返回的 ...

  10. Mybatis框架基础入门(四)--SqlMapConfig.xml配置文件简介

    SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandlers(类型处理器) o ...