java mail 搜尋、過濾接收郵件,刪除郵件
阿新 • • 發佈:2019-02-20
- import
- import java.io.InputStreamReader;
- import java.util.Properties;
- import javax.mail.Flags;
- import javax.mail.Folder;
- import javax.mail.Message;
- import javax.mail.Session;
- import javax.mail.Store;
- import javax.mail.search.AndTerm;
- import javax.mail.search.FromStringTerm;
- import javax.mail.search.SearchTerm;
- import javax.mail.search.SubjectTerm;
- /**
- * 使用 java.mail.search 包中的 SearchTerm 類
- * 在接收郵件時進行組合搜尋、過濾
- * @author haolloyin
- */
- public class SearchMails {
- public static void main(String[] args) throws Exception {
- // 連線pop3伺服器的主機名、協議、使用者名稱、密碼
- String pop3Server = "pop3.126.com";
- String protocol = "pop3";
- String user = "testhao";
- String pwd = "123456";
- // 建立一個有具體連線資訊的Properties物件
- Properties props = new Properties();
- props.setProperty("mail.store.protocol", protocol);
- props.setProperty("mail.pop3.host", pop3Server);
- // 使用Properties物件獲得Session物件
- Session session = Session.getInstance(props);
- session.setDebug(true);
- // 利用Session物件獲得Store物件,並連線pop3伺服器
- Store store = session.getStore();
- store.connect(pop3Server, user, pwd);
- // 獲得郵箱內的郵件夾Folder物件,以"讀-寫"開啟
- Folder folder = store.getFolder("inbox");
- folder.open(Folder.READ_WRITE);
- // 搜尋發件人為 [email protected] 和主題為"測試1"的郵件
- SearchTerm st = new AndTerm(
- new FromStringTerm("[email protected]"),
- new SubjectTerm("測試1"));
- // // 獲得郵件夾Folder內的所有郵件Message物件
- // Message [] messages = folder.getMessages();
- // 不是像上面那樣直接返回所有郵件,而是使用Folder.search()方法
- Message [] messages = folder.search(st);
- int mailCounts = messages.length;
- System.out.println("搜尋過濾到" + mailCounts + " 封符合條件的郵件!");
- for(int i = 0; i < mailCounts; i++) {
- String subject = messages[i].getSubject();
- String from = (messages[i].getFrom()[0]).toString();
- System.out.println("第 " + (i+1) + "封郵件的主題:" + subject);
- System.out.println("第 " + (i+1) + "封郵件的發件人地址:" + from);
- System.out.println("是否刪除該郵件(yes/no)?:");
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String input = br.readLine();
- if("yes".equalsIgnoreCase(input)) {
- // 直接輸出到控制檯中
- // messages[i].writeTo(System.out);
- // 設定刪除標記,一定要記得呼叫saveChanges()方法
- messages[i].setFlag(Flags.Flag.DELETED, true);
- messages[i].saveChanges();
- System.out.println("成功設定了刪除標記!");
- }
- }
- // 關閉連線時設定了刪除標記的郵件才會被真正刪除,相當於"QUIT"命令
- folder.close(false);
- store.close();
- }
- }