本来准备长篇大论一番,写一些关于邮件、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){}
}
分享到:
相关推荐
NULL 博文链接:https://zhaoshijie.iteye.com/blog/804788
使用javamail通过imap协议收到Exchange2007中的邮件; 其他的邮箱也可以使用,但主要实现了对Exchange2007的收取。
综合使用了Socket和JavaMail实现了邮件的收发并支持SMTP,POp3协议,带有web界面,实现了邮件的收发删除查看上传下载附件。并带有搜索邮件等功能
基于SMTP协议,编写程序模拟邮件系统收发邮件的运行过程。要求具有如下功能: 1、 用户能够注册,登录; 2、 用户能够注册; 3、 用户登录后能查看并编辑用户注册信息;可以发信给其它用户;查看来信,对来信进行...
javamail 实例 获取pop3或者imap方式获取邮件信息,配置运行MailHelper即可.
资源包括邮件的发送、邮件的接收、查看邮件总数量和未读邮件数以及查看未读邮件并标记已读,还有我自己编写的简单的文档。希望能帮助需要帮助的筒子们
javamail 回执邮件资料
JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API JavaMail邮件收发实例_JavaMail_API
Apache James(Java Apache Mail Enterprise Server)是Apache组织的子项目之一,完全采用纯Java技术开发,实现了SMTP、POP3与NNTP等多种邮件相关协议。James是一个邮件应用平台,可以通过Mailet扩充其功能,如Mail...
使用JAVAMail代发邮件 资源源于不但搜索,自由源于不但努力
javamail实现的163邮箱发送到腾讯邮件的示例、 已经javamail的详细API级demo!
可以利用JavaMail收发Gmail邮件,ssl;写得比较详细,
James(Java Apache Mail Enterprise Server)是Apache组织的子项目,由Java语言编写的,整合了诸如POP3,SMTP等邮件协议的企业邮件服务器。 提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的...
基于Javamail的邮件收发系统是一款简单、方便、快捷的邮件系统。它能实现邮件的接收与发送,并能完成附件的传输,具有较好的人机交互性,易于使用。 开发环境:JDK1.6 + Windows平台 开发技术:Javamail 开发工具:...
javamail发送邮件实例 javamail 发送邮件 文本编辑器 kindeditor
基于javaMail电子邮件系统的设计(含源文件).pdf基于javaMail电子邮件系统的设计(含源文件).pdf基于javaMail电子邮件系统的设计(含源文件).pdf基于javaMail电子邮件系统的设计(含源文件).pdf基于javaMail电子邮件系统...
如何用javamail定时发送邮件
javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码 查看debug 邮件处理过程发现邮件头没有编译, 内容是base64编码,所以邮箱收不到或者收到的是base64编码后的一堆乱码,
pop3不加密方式收信、imap不加密方式收信、smtp不加密发信、smtp加密发信