用Pop3收取gmail的邮件(摘录)

时间:2022-07-19 00:28:51

问题描述:

用pop3收取gmail的邮件  入口参数: 用户名 / 密码  做一个线程,每15分钟检查一次邮箱,收取邮箱的邮件,并解码后将标题显示出来 当我看完问题后,灵机一动,马上想到用java.util.TimerTask java.util.Timer类实现是最合适不过,虽然用线程也可以,可是会付出一些不必要的劳动;并且TimerTask类也是依靠线程来实现功能的 代码如下: java 代码
  1. 测试类:   
  2.   
  3. import java.util.*;   
  4.   
  5. public class Test{   
  6.        
  7.     public static void main(String[] args)throws Exception{   
  8.            
  9.         MailTimerTask task=new MailTimerTask();   
  10.         Timer mailTimer=new Timer();   
  11.         mailTimer.schedule(task,2000,15*60*1000);   
  12.     }   
  13. }   
  14.   
  15.   
  16. import java.util.*;   
  17. import java.io.UnsupportedEncodingException;   
  18. import java.security.*;   
  19. import java.util.Properties;   
  20. import javax.mail.*;   
  21. import javax.mail.internet.InternetAddress;   
  22. import javax.mail.internet.MimeUtility;   
  23. import java.lang.RuntimeException;   
  24.   
  25. public class MailTimerTask extends TimerTask{   
  26.        
  27.     private static Store store=null;   
  28.        
  29.     //静态初始化模块   
  30.     //保证后台只存在一个Store 连接   
  31.     static{   
  32.         try{   
  33.            
  34.         connect("@mailName","@mailPassword");   
  35.            
  36.         }catch(Exception e){   
  37.             e.printStackTrace();   
  38.         }   
  39.     }   
  40.        
  41.        
  42.     public void run(){   
  43.         try{   
  44.            
  45.         System.out.println("正在读取邮箱");   
  46.            
  47.         this.printNewMails(this.getNewMails("@mailName","mailPassword"));   
  48.            
  49.         }catch(Exception e){   
  50.             e.printStackTrace();   
  51.         }   
  52.     }   
  53.        
  54.     public static void connect(String mailName,String mailPassword)throws Exception{   
  55.            
  56.          Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());   
  57.          final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";   
  58.          Properties props = System.getProperties();   
  59.          props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);   
  60.          props.setProperty("mail.pop3.socketFactory.fallback""false");   
  61.          props.setProperty("mail.pop3.port""995");   
  62.          props.setProperty("mail.pop3.socketFactory.port""995");   
  63.          Session session = Session.getDefaultInstance(props,null);   
  64.          URLName urln = new URLName("pop3","pop.gmail.com",995,null, mailName,mailPassword);   
  65.          store = session.getStore(urln);   
  66.          store.connect();   
  67.     }   
  68.        
  69.     public Message[] getNewMails(String mailName,String mailPassword)throws Exception{   
  70.            
  71.         //当Store实例没有存在连接时   
  72.         if(store.isConnected()){   
  73.                
  74.           connect(mailName,mailPassword);      
  75.             
  76.         }   
  77.            
  78.                
  79.                
  80.             Folder inbox = store.getFolder("INBOX");   
  81.             inbox.open(Folder.READ_ONLY);   
  82.             FetchProfile profile = new FetchProfile();   
  83.             profile.add(FetchProfile.Item.ENVELOPE);   
  84.                
  85.             //假定存在没有阅读的邮件为新邮件   
  86.             if(inbox.getUnreadMessageCount()>0){   
  87.                    
  88.                 int fetchCount=inbox.getMessageCount()-inbox.getUnreadMessageCount();   
  89.                    
  90.                 if(fetchCount==0){   
  91.                     return inbox.getMessages();   
  92.                 }   
  93.                 Message[] messages = inbox.getMessages(1,2);   
  94.                    
  95.                 return messages;   
  96.             }   
  97.             else{   
  98.                    
  99.                 System.out.println("不存在新邮件");   
  100.                 throw new RuntimeException("不存在新邮件");   
  101.             }   
  102.                
  103.               
  104.            
  105.     }   
  106.        
  107.     public void printNewMails(Message[] msgs)throws Exception{   
  108.            
  109.             for(Message msg:msgs){   
  110.                    
  111.                 String text=msg.getSubject();   
  112.                    
  113.             if (text == null)   
  114.                 System.out.println("该邮件无题");   
  115.             else if (text.startsWith("=GBK") || text.startsWith("=gb2312"))   
  116.                text = MimeUtility.decodeText(text);   
  117.             else  
  118.                text = new String(text.getBytes("gb2312"));   
  119.                   
  120.                System.out.println("--"+text);   
  121.                  
  122.           }   
  123.         }   
  124. }