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