在 JavaMail 中,可以不像上面文章那样子调用 Folder.getMessages() 方法把邮件夹中的所有都返回,而是可以根据给定的一些条件过滤搜索出我们想要的邮件,之后再对进行获得的邮件进行操作。现在的邮箱大多都支持邮件搜索这一功能了。
要使用搜索过滤功能,必须用到 java.mail.search 包中的 SearchTerm 抽象类。在这个包中,我们可以使用其他具有不同组合关系的子类和具有不同搜索条件的类来进行操作。
1、逻辑组合关系的子类有:AndTerm 类、OrTerm 类、NotTerm 类、ComparisonTerm 类,它们都是 SearchTerm 抽象类的具体子类;
2、具体搜索条件的类有:DateTerm 类、BodyTerm 类、HeaderTerm 类,这几个都是抽象类,具体应用时应该由其对应的子类来实现。
看一些 JavaMail 帮助文档中关于 java.mail.search 包中的类集:
程序要求:
搜索出 testhao@126.com 邮箱中发件人地址为 test_hao@sina.cn ,主题为 “测试1”的邮件,并由用户输入是否设置删除标记,在断开网络连接(即程序运行结束)之后 POP3 服务器会将设置有删除标记的邮件删除掉。而设置删除标记,需要用到 Message.setFlag() 方法。
目前我们往 testhao@126.com 邮箱发送了 6 封邮件,如下图,其中第一封主题为“测试1”的邮件是由 test_hao@163.com 发送的,其他的 5 封由 test_hao@sina.cn 所发。
代码实现:
运行过程:
糟糕的是,不同 POP3 服务器对于邮件的访问权限的限制是不同的,在这里,pop3.126.com 服务器就不允许修改邮件了。所以,删除失败!!!
原文出处:http://haolloyin.blog.51cto.com/1177454/355075