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

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

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

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

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

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

0c723a108e4ee097355118f6b8a8ee89.png

程序要求:

搜索出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所发。

94fe3ded2edcab5b6c3d9c3fcd9daaba.png

代码实现: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;   /**   * 使用 java.mail.search 包中的 SearchTerm 类   * 在接收邮件时进行组合搜索、过滤   * @author haolloyin   */ 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", 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 

运行过程:

adf1c32b881e6664e44e6aa8e94f676f.png

39943799153f130d0f6580e7346e2107.png

5c63960729d702790dd2b00fae4cbb7b.png

糟糕的是,不同 POP3  服务器对于邮件的访问权限的限制是不同的,在这里,pop3.126.com 服务器就不允许修改邮件了。所以,删除失败!!!369f715f928f3fbea2491c24a2b9783e.png

我的相关文章:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值