第六讲:使用Store查看邮件(2)

来源:互联网 发布:黑马软件科技有限公司 编辑:程序博客网 时间:2024/05/16 04:42
第六讲:使用Store查看邮件(2)
一、邮件接收程序编程实例
编程实例1:
功能:接收指定邮件账户中的电子邮件,并且打印出邮件的主题和发件人供用户浏览,由用户决定是否阅读。
public static void main(String[] args) throws Exception{//定义连接pop3服务器的信息String pop3Server = "pop3.163.com";String protocol = "pop3";String username ="XXX";String password ="XXX";Properties props = new Properties();props.setProperty("mail.store.protocol", protocol);props.setProperty("mail.pop3.host", pop3Server);Session session = Session.getDefaultInstance(props);//session.setDebug(true);Store store = session.getStore(protocol);store.connect(pop3Server,username, password);  //pop3服务器登陆认证Folder folder = store.getFolder("inbox");  //获取用户的邮件夹folder.open(Folder.READ_WRITE);           //设置对邮件账户的访问权限Message[] msgs = folder.getMessages();   //获得邮件账户中的所有邮件for(int i=0; i< msgs.length; i++){String subject = msgs[i].getSubject();String from     = String.valueOf(msgs[i].getFrom()[0]);System.out.println("第"+(i+1)+"封邮件的主题是:"+subject+"\t 发件人为:"+from);System.out.println("你想阅读此邮件吗?(yes/no)");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String inputString = br.readLine();if("yes".equalsIgnoreCase(inputString)){msgs[i].writeTo(System.out);   //输出邮件内容}}folder.close(false);       //关闭邮件夹对象,若为ture则会删除哪些标记为删除的邮件store.close();}}

二、搜索邮件
JavaMail在javax.mail.search包中定义了一个用于创建搜索条件的SearchTerm类,应用程序创建SearchTerm类的实例对象后,就可以调用Folder.search(SearchTerm st)方法搜索邮件夹中符合搜索条件的所有邮件。SearchTerm是一个抽象类,JavaMail提供了22个实现子类以帮助应用程序创建不同的搜索条件,这22个类大致可以分为两大类型,如下:
1. 用于创建逻辑组合关系的类
AND条件(AndTerm类)
OR条件(OrTerm类)
NOT条件(NotTerm类)
Comparison条件(ComparisonTerm类)
2. 用于创建具体搜索条件的类
DATE条件(SentDateTerm类,ReceivedDateTerm类)
CONTENT条件(BodyTerm类)
HEADER条件(FromStringTerm类,RecipientStringTerm类,SubjectTerm类等)
例如:
搜索邮件中所有从"it315_test@sohu.com"或"it315_test@sina.com"发送过来的邮件,如下所示:
SearchTerm st = new OrTerm(
    new FromStringTerm("it315_test@sohu.com"),
    new FromStringTerm("it315_test@sohu.com")
           );
Message[] msgs = folder.search(st);
搜索邮件夹中今天收到的并且是"it315_test@sina.com"这个邮箱地址发送过来的所有邮件
SearchTerm st = new AndTerm(
   new FromStringTerm("it315_test@sina.com"),
   new ReceivedDateTerm(ComparisonTerm.EQ , new Date())
          );
Message[] msgs = folder.search(st);
ComparisonTerm类常用于日期类的比较中,它使用六个常量EQ(=)、GE(>=)、GT(>)、LE(<=)、LT(<)、NE(!=)

编程实例2
功能:搜搜并删除符合条件的邮件
public static void main(String[] args) throws Exception {if(args.length != 2){System.out.println("Wrong Input Parameter");System.exit(1);}String fromTerm =args[0];String subjectTerm = args[1];//System.out.println(args[0] + " "+args[1]);String pop3Server  = "pop3.163.com";String protocol      = "pop3";String usernmae = "XXX";String password ="XXX";Properties props = new Properties();props.setProperty("mail.pop3.host", pop3Server);props.setProperty("mail.store.protocol", protocol);Session session = Session.getDefaultInstance(props);session.setDebug(true);Store store = session.getStore(protocol);store.connect(pop3Server, usernmae, password);  //连接接收邮件服务器Folder folder = store.getFolder("inbox");folder.open(Folder.READ_WRITE);//创建搜索对象SearchTerm st = new OrTerm(new FromStringTerm(fromTerm),new SubjectTerm(subjectTerm));Message[] msgs = folder.search(st);System.out.println("找到"+msgs.length+"封符合搜索条件的邮件");if(msgs.length ==0){System.exit(1);}for(int i=0; i< msgs.length; i++){String from = msgs[i].getFrom()[0].toString();String subject = msgs[i].getSubject();System.out.println("发件人:"+from+"; 主题:"+subject);System.out.println("你想要删除这封邮件吗?(yes/no)");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String input = br.readLine();if("yes".equalsIgnoreCase(input)){msgs[i].setFlag(Flags.Flag.DELETED, true);       //标记为删除}}folder.close(true);    //退出邮件夹后删除标记为“删除“的邮件store.close();}


0 0
原创粉丝点击