JavaMail:搜索、过滤接收邮件,删除邮件

在 JavaMail 中,可以不像上面文章那样子调用 Folder.getMessages() 方法把邮件夹中的所有都返回,而是可以根据给定的一些条件过滤搜索出我们想要的邮件,之后再对进行获得的邮件进行操作。现在的邮箱大多都支持邮件搜索这一功能了。

要使用搜索过滤功能,必须用到 java.mail.search 包中的 SearchTerm 抽象类。在这个包中,我们可以使用其他具有不同组合关系的子类和具有不同搜索条件的类来进行操作。

1、逻辑组合关系的子类有:AndTerm 类、OrTerm 类、NotTerm 类、ComparisonTerm 类,它们都是 SearchTerm 抽象类的具体子类;

2、具体搜索条件的类有:DateTerm 类、BodyTerm 类、HeaderTerm 类,这几个都是抽象类,具体应用时应该由其对应的子类来实现。

看一些 JavaMail 帮助文档中关于 java.mail.search 包中的类集:

JavaMail:搜索、过滤接收邮件,删除邮件_第1张图片

程序要求:

搜索出 [email protected] 邮箱中发件人地址为 [email protected] ,主题为 “测试1”的邮件,并由用户输入是否设置删除标记,在断开网络连接(即程序运行结束)之后 POP3 服务器会将设置有删除标记的邮件删除掉。而设置删除标记,需要用到 Message.setFlag() 方法。

目前我们往 [email protected] 邮箱发送了 6 封邮件,如下图,其中第一封主题为“测试1”的邮件是由 [email protected] 发送的,其他的 5 封由 [email protected] 所发。

JavaMail:搜索、过滤接收邮件,删除邮件_第2张图片

代码实现:

 
 
  1. importjava.io.BufferedReader;
  2. importjava.io.InputStreamReader;
  3. importjava.util.Properties;
  4. importjavax.mail.Flags;
  5. importjavax.mail.Folder;
  6. importjavax.mail.Message;
  7. importjavax.mail.Session;
  8. importjavax.mail.Store;
  9. importjavax.mail.search.AndTerm;
  10. importjavax.mail.search.FromStringTerm;
  11. importjavax.mail.search.SearchTerm;
  12. importjavax.mail.search.SubjectTerm;
  13. /**
  14. *使用java.mail.search包中的SearchTerm类
  15. *在接收邮件时进行组合搜索、过滤
  16. *@authorhaolloyin
  17. */
  18. publicclassSearchMails{
  19. publicstaticvoidmain(String[]args)throwsException{
  20. //连接pop3服务器的主机名、协议、用户名、密码
  21. Stringpop3Server="pop3.126.com";
  22. Stringprotocol="pop3";
  23. Stringuser="testhao";
  24. Stringpwd="123456";
  25. //创建一个有具体连接信息的Properties对象
  26. Propertiesprops=newProperties();
  27. props.setProperty("mail.store.protocol",protocol);
  28. props.setProperty("mail.pop3.host",pop3Server);
  29. //使用Properties对象获得Session对象
  30. Sessionsession=Session.getInstance(props);
  31. session.setDebug(true);
  32. //利用Session对象获得Store对象,并连接pop3服务器
  33. Storestore=session.getStore();
  34. store.connect(pop3Server,user,pwd);
  35. //获得邮箱内的邮件夹Folder对象,以"读-写"打开
  36. Folderfolder=store.getFolder("inbox");
  37. folder.open(Folder.READ_WRITE);
  38. //搜索发件人为[email protected]和主题为"测试1"的邮件
  39. SearchTermst=newAndTerm(
  40. newFromStringTerm("[email protected]"),
  41. newSubjectTerm("测试1"));
  42. ////获得邮件夹Folder内的所有邮件Message对象
  43. //Message[]messages=folder.getMessages();
  44. //不是像上面那样直接返回所有邮件,而是使用Folder.search()方法

你可能感兴趣的:(javamail)