用Pop3收取gmail的郵件(摘錄)

問題描述:

用pop3收取gmail的郵件  入口參數: 用戶名 / 密碼  做一個線程,每15分鐘檢查一次郵箱,收取郵箱的郵件,並解碼後將標題顯示出來
當我看完問題後,靈機一動,馬上想到用java.util.TimerTask java.util.Timer類實現是最合適不過,雖然用線程也可以,可是會付出一些不必要的勞動;並且TimerTask類也是依靠線程來實現功能的
代碼如下:
java 代碼
測試類:       import java.util.*;       public class Test{                public static void main(String[] args)throws Exception{                        MailTimerTask task=new MailTimerTask();            Timer mailTimer=new Timer();            mailTimer.schedule(task,2000,15*60*1000);        }    }          import java.util.*;    import java.io.UnsupportedEncodingException;    import java.security.*;    import java.util.Properties;    import javax.mail.*;    import javax.mail.internet.InternetAddress;    import javax.mail.internet.MimeUtility;    import java.lang.RuntimeException;       public class MailTimerTask extends TimerTask{                private static Store store=null;                //靜態初始化模塊        //保證後臺只存在一個Store 連接        static{            try{                        connect("@mailName","@mailPassword");                        }catch(Exception e){                e.printStackTrace();            }        }                        public void run(){            try{                        System.out.println("正在讀取郵箱");                        this.printNewMails(this.getNewMails("@mailName","mailPassword"));                        }catch(Exception e){                e.printStackTrace();            }        }                public static void connect(String mailName,String mailPassword)throws Exception{                         Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());             final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";             Properties props = System.getProperties();             props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);             props.setProperty("mail.pop3.socketFactory.fallback""false");             props.setProperty("mail.pop3.port""995");             props.setProperty("mail.pop3.socketFactory.port""995");             Session session = Session.getDefaultInstance(props,null);             URLName urln = new URLName("pop3","pop.gmail.com",995,null, mailName,mailPassword);             store = session.getStore(urln);             store.connect();        }                public Message[] getNewMails(String mailName,String mailPassword)throws Exception{                        //當Store實例沒有存在連接時            if(store.isConnected()){                              connect(mailName,mailPassword);                            }                                                            Folder inbox = store.getFolder("INBOX");                inbox.open(Folder.READ_ONLY);                FetchProfile profile = new FetchProfile();                profile.add(FetchProfile.Item.ENVELOPE);                                //假定存在沒有閱讀的郵件爲新郵件                if(inbox.getUnreadMessageCount()>0){                                        int fetchCount=inbox.getMessageCount()-inbox.getUnreadMessageCount();                                        if(fetchCount==0){                        return inbox.getMessages();                    }                    Message[] messages = inbox.getMessages(1,2);                                        return messages;                }                else{                                        System.out.println("不存在新郵件");                    throw new RuntimeException("不存在新郵件");                }                                                   }                public void printNewMails(Message[] msgs)throws Exception{                            for(Message msg:msgs){                                        String text=msg.getSubject();                                    if (text == null)                    System.out.println("該郵件無題");                else if (text.startsWith("=GBK") || text.startsWith("=gb2312"))                   text = MimeUtility.decodeText(text);                else                  text = new String(text.getBytes("gb2312"));                                      System.out.println("--"+text);                                }            }    }   
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章