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

第六讲:使用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();
	}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值