天天看點

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

繼續閱讀