天天看点

第六讲:使用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类等)

例如:

搜索邮件中所有从"[email protected]"或"[email protected]"发送过来的邮件,如下所示:

SearchTerm st = new OrTerm(

    new FromStringTerm("[email protected]"),

    new FromStringTerm("[email protected]")

           );

Message[] msgs = folder.search(st);

搜索邮件夹中今天收到的并且是"[email protected]"这个邮箱地址发送过来的所有邮件

SearchTerm st = new AndTerm(

   new FromStringTerm("[email protected]"),

   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();
	}
           

继续阅读