`

JavaMail之POP3协议判断新邮件的思路

    博客分类:
  • JAVA
阅读更多
本来准备长篇大论一番,写一些关于邮件、javaMail的基本知识,写了一些文字后才发现自己犯了个错误,因为对该题目感兴趣的人肯定已经熟知这些东西,没有必要我在这多费口舌。
也就是说POP3无法判断某一封邮件是否已读,虽然JavaMail的某些类中也有这样的方法,但是这些方法只是在使用IMAP的时候有效,为了使JavaMail针对不同协议有统一的接口,因此它包容着不同协议的功能,是一套抽象的关于邮件系统的API。举个例子,Folder类中关于新邮件的几个方法对POP3协议都是无效的。既然无效我们怎么解决在使用POP3协议的时候判断是否为新邮件的这样一个要求呢?——我们必须在客户端做点手脚。

一个邮件服务器在处理每封邮件的时候会给它分配一个独一无二的编号(UID),这个编号是一个正的长整数,一般这是一个递增的值,有关于这个UID可以参照RFC 2060的详细说明。利用这个UID我们就可以实现邮件的读状态的处理。首先我们必须在客户端保存一个一对多的关系表,也就是一个邮箱地址对应多个邮件的UID,以后在收取每封邮件的时候判断该邮件的UID是否已经在本地保存,如果已保存则该邮件已读,否则的话这是一封新邮件,并把该新邮件的UID加入本地继续保存。可能你会觉得这样的话岂不是要保存很多邮件的编号,会不会占用空间之类的怀疑,我想这应该是一个权宜之策,不过UID仅仅是一个长整数,浪费不了多大的空间。

在获取邮件UID的时候还需要有一个注意的地方不再啰嗦,请看下面程序片断中的红色粗体字。

URLName url = new URLName("pop3", host, port, "", user, passWord);
session session = Session.getInstance(System.getPRoperties(),null);
Store store = session.getStore(url);
POP3Folder inbox = null;
try {
store.connect();
inbox = (POP3Folder) store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
FetchProfile profile = new FetchProfile();
profile.add(UIDFolder.FetchProfileItem.UID);
profile.add(FetchProfile.Item.ENVELOPE);
Message[] messages = inbox.getMessages();
inbox.fetch(messages, profile);
int j = messages.length - 1;
for (int i = 0; i < messages.length; i++,j--)
System.out.println(inbox.getUID(messages[i]));
} finally {
try{
inbox.close(false);
}catch(Exception e){}
try{
store.close();
}catch(Exception e){}
}
分享到:
评论
1 楼 jj356302304 2016-05-09  
在试用联通的wo邮箱的时候,uid是null的。目前其他邮箱正常。不知道为什么?

相关推荐

    javamail接收(pop3)邮件

    NULL 博文链接:https://zhaoshijie.iteye.com/blog/804788

    javamail通过imap协议收取邮件(Exchange2007)

    Exchange 2007是微软的企业级邮件服务器,支持IMAP、POP3等多种邮件协议。 在JavaMail中使用IMAP协议来收取Exchange 2007中的邮件,首先需要理解以下几个关键概念: 1. **JavaMail API**: JavaMail API提供了一...

    使用javaMail发邮件及收取邮箱未读邮件并标记为已读

    这个库支持多种邮件协议,如 SMTP(简单邮件传输协议)用于发送邮件,POP3(邮局协议)和 IMAP(因特网消息访问协议)用于接收邮件。在这个资源中,我们将探讨如何使用 JavaMail 实现邮件的发送、接收、查看邮件数量...

    邮件服务器支持SMTP,POP3协议

    这个系统不仅提升了电子邮件处理的便捷性,也为开发者提供了一个了解和实践SMTP、POP3协议及JavaMail API的平台。通过这个项目,开发者可以深入理解邮件通信的工作原理,并能扩展到其他相关的邮件服务功能,如IMAP...

    SMTP和POP3的邮件客户端

    当用户想要查看邮件时,POP3协议允许客户端连接到邮件服务器,检索并下载新邮件。同样,JavaMail API也支持POP3协议,通过`javax.mail.Store`类和`javax.mail.Folder`类可以实现邮件的接收和管理。对于描述中提到的...

    使用Socket结合SMTP/POP3邮件协议发送和接收邮件

    当用户想要查看他们的邮件时,POP3允许客户端与服务器建立连接,检索新邮件,并可以选择性地将其从服务器删除。POP3是一种“下载后删除”的协议,意味着一旦邮件被下载,它们可能不再在服务器上可用,除非设置为保留...

    JavaMail邮件实战开发.doc

    在 JavaMail 邮件实战开发中,我们学习了电子邮件技术的基础知识,包括邮件服务器、邮件传输协议和邮件组织结构。 邮件服务器 邮件服务器是提供电子邮件功能的专门服务器,它有三个主要功能:接收用户投递的信件,...

    电子邮件接收pop3

    在这个主题中,我们将深入探讨POP3协议的工作原理、Java编程语言如何实现POP3邮件接收,以及与之相关的可视化界面设计。 POP3(Post Office Protocol version 3)是互联网标准协议之一,它允许用户从邮件服务器检索...

    javamail 回执邮件资料

    它提供了与 SMTP、POP3 和 IMAP 协议交互的接口,是开发基于 Java 的电子邮件应用的基础。回执邮件是邮件服务中的一项功能,它允许发件人在发送邮件后得知收件人是否已阅读邮件。本资料包主要涵盖了使用 JavaMail ...

    使用JAVAMail代发邮件

    使用 JavaMail 代发邮件 使用 JavaMail 库可以轻松地在...JavaMail 库提供了一个抽象层,允许开发者使用不同的电子邮件协议,例如 SMTP、POP3 和 IMAP。这使得开发者可以轻松地在不同的电子邮件服务器上发送电子邮件。

    用java实现pop3邮件服务器.rar_java pop3 server_java 邮件服务器_pop3 java_服务器 j

    Java POP3邮件服务器是用于接收电子邮件的服务器程序,它遵循POP3(Post Office Protocol version 3)协议。POP3是一种互联网标准,允许用户通过客户端软件从邮件服务器下载邮件。在这个项目中,我们将深入探讨如何...

    javamail收发邮件加密和不加密

    它支持多种协议,包括POP3、IMAP和SMTP,这些协议分别用于接收、检索和发送邮件。在使用JavaMail时,了解如何进行加密和非加密通信对于确保数据安全至关重要。 1. **POP3(Post Office Protocol version 3)**: -...

    javamail 收发电子邮件

    2. IMAP 和 POP3 协议:对于邮件接收,JavaMail 提供了 `Folder` 和 `Message` 类来处理IMAP或POP3服务器上的邮箱。IMAP 允许用户在线查看邮件,而POP3通常将邮件下载到本地存储。使用 `Store` 类连接到服务器,然后...

    POP3的java邮件接收程序

    JavaMail API 是一套用于处理邮件的Java库,提供了丰富的接口和类,支持SMTP(Simple Mail Transfer Protocol,邮件发送)和POP3(邮局协议)等邮件协议。通过这个API,开发者可以在Java程序中发送、接收和管理邮件...

    基于POP3的JAVA邮件接收程序

    Java邮件接收程序是利用POP3协议来实现的,POP3(Post Office Protocol version 3)是一种互联网标准协议,主要用于从邮件服务器检索电子邮件。在Java中,我们可以使用JavaMail API来编写这样的程序。以下是对POP3...

    POP3邮件监控Demo

    - POP3是互联网标准协议之一,主要设计用于从邮件服务器下载邮件。 - 它采用客户端/服务器模型,用户使用POP3客户端连接到邮件服务器,下载新邮件到本地设备。 - 通常,POP3在读取邮件后会将其从服务器上删除,但...

    电子邮件收发原理和实现(POP3, SMTP) [整理]

    电子邮件是互联网上最常用的信息交流方式之一,其收发原理主要依赖于两个协议:POP3(Post Office Protocol version 3)和SMTP(Simple Mail Transfer Protocol)。这篇内容将深入讲解这两个协议的工作机制,并通过...

    邮件服务器 Java写的源代码 SMTP+POP3

    当用户想要查看或管理邮件时,邮件客户端连接到POP3服务器,下载新邮件并存储在本地。POP3协议通常使用TCP端口110,但有时也会使用SSL/TLS加密的995端口。 四、Java实现邮件服务器 Java语言以其跨平台和丰富的库...

    javamail收取邮件(包括附件)

    下面我们将详细探讨如何使用JavaMail API实现邮件的收取,特别是如何通过POP3和IMAP协议获取邮件信息。 首先,确保你的项目中已经引入了JavaMail相关的依赖,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖...

Global site tag (gtag.js) - Google Analytics