在 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 所发。
代码告终:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Properties; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Message; import javax.mail.Session; import javax.mail.Store; import javax.mail.search.AndTerm; import javax.mail.search.FromStringTerm; import javax.mail.search.SearchTerm; import javax.mail.search.SubjectTerm; public class SearchMails { public static void main(String[] args) throws Exception { // 连接pop3服务器的主机名、协议、用户名、密码 String pop3Server = "pop3.126.com"; String protocol = "pop3"; String user = "testhao"; String pwd = "123456"; // 创立一个有翔实连接消息的Properties对象 Properties props = new Properties(); props.setProperty("mail.store.protocol",ka.kangweibao.com protocol); props.setProperty("mail.pop3.host", pop3Server); // 利用Properties对象获得Session对象 Session session = Session.getInstance(props); session.setDebug(true); // 利用Session对象获得Store对象,并连接pop3服务器 Store store = session.getStore(); store.connect(pop3Server, user, pwd); // 获得邮箱内的邮件夹Folder对象,以"读-写"敞开 Folder folder = store.getFolder("inbox"); folder.open(Folder.READ_WRITE); // 搜查发件人为 test_hao@sina.cn 和主题为"测验1"的邮件 SearchTerm st = new AndTerm( new FromStringTerm("test_hao@sina.cn"), new SubjectTerm("测验1")); // // 获得邮件夹Folder内的所有邮件Message对象 // Message [] messages = folder.getMessages(); // 不是像上面那样直接归来所有邮件,而是利用Folder.search()措施 Message [] messages = folder.search(st); int mailCounts = messages.length; System.out.println("搜查过滤到" + mailCounts + " 封相称条件的邮件!"); for(int i = 0; i < mailCounts; i++) { String subject = messages[i].getSubject(); String from = (messages[i].getFrom()[0]).toString(); System.out.println("第 " + (i+1) + "封邮件的主题:" + subject); System.out.println("第 " + (i+1) + "封邮件的发件人地址:" + from); System.out.println("是否剔除该邮件(yes/no)?:"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); if("yes".equalsIgnoreCase(input)) { // 直接输出到扼制台中 // messages[i].writeTo(System.out); // 设置剔除符号,定然要记得调用saveChanges()措施 messages[i].setFlag(Flags.Flag.DELETED, true); messages[i].saveChanges(); System.out.println("获胜设置了剔除符号!"); } } // 关闭连接时设置了剔除符号的邮件才会被恳挚剔除,相当于"QUIT"号召 folder.close(false); store.close(); } }
运征途序:
低劣的是,不同 POP3 服务器对于邮件的拜会权限的局限是不同的,在这里,pop3.126.com
服务器就不批准修正邮件了。因而,剔除失利!!!
原文出处:http://haolloyin.blog.51cto.com/1177454/355075
values should never*be negative.*/ public class
Example{