import java.io.*; 
import java.net.*; 
import java.util.*; 
import javax.swing.JOptionPane;
import java.awt.event.*;public class Pop3test implements Runnable
{
    Socket s = null;
    BufferedReader in  = null; 
    //BufferedWriter out = null;
    PrintWriter out = null;
    Vector vector = new Vector(); 
    mailtxt mt = null;
    boolean seemsg = false;
        
    public static void main(String[] args){
       
        Pop3test pop = new Pop3test();
        
     Thread h = new Thread(pop);
     h.start();
    }
    
  public void run(){
     getmail("pop.yeah.net","user","****",110,true);
                            ~~~~~用户名~~密码
  }
    
  public void getmail(String server,String user,String pwd,int port,boolean now){   
     try{    
        
        s = new Socket(server,port);
        in  = new BufferedReader(new InputStreamReader(s.getInputStream())); 
        //out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); 
        out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
        seemsg = now;
        String str;
       // System.out.println(server+" pop3");
        str = in.readLine();
        System.out.println("USER :"+user); 
        if (str.indexOf("OK")<0){ 
            JOptionPane.showMessageDialog(null,server+" error");
            System.out.println(server+" error");
            closeconn();
            return;
        }
        
        if (!sent("USER "+user+"\n")){
             closeconn();
             return;
        }     
        
        if (!sent("PASS "+pwd+"\n")){
             closeconn();
             return;
        }     
       
        if (!sent("list\n")){
             closeconn();
             return;
        }
    
        int i=0;
        while((str = in.readLine()) != null){ 
             //System.out.println(str);    
             if (!(str.equals("."))){ 
                i++;
                 
             } 
             else
                 break;          
        }
        System.out.println("共有 "+i+" 封邮件");
        
        String result = "";
        
            for (int j=1;j<=i;j++){                
               readmail(j); 
            }   
        System.out.println("*****************************************"); 
        closeconn();    
     }catch(Exception e){
          System.out.println(e.toString());
     }
 }
    
    public void closeconn(){
        try{
           out.write("QUIT\n");
           out.flush();
           System.out.println("________________________________________________"); 
           in.close();
           out.close();
           s.close();
        }catch(Exception e){
            System.out.println(e.toString());
        }
    
    }
    
    public boolean sent(String msg){
       boolean b = true;
       try{
          String str;
          out.write(msg);
          out.flush();
          str = in.readLine();
          // System.out.println("sent "+msg);
         //  System.out.println("get "+str);
          int i = str.indexOf("OK");
          
          if (i<0){ 
            System.out.println("i ="+i);
            JOptionPane.showMessageDialog(null,msg+" error");
            System.out.println(msg+" error");
            b = false;
          }
          return b;  
       }catch(IOException io){   
          System.out.println("sent "+msg+" error");
          System.out.println(io.toString());
          return false;
       } 
    }
    
    public boolean readmail(int j){
        System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
        sent("RETR "+j+"\n");
        String str="",result="";
        System.out.println("这是第 "+j+" 封邮件");
        try{
           boolean received = false;
           while (((str = in.readLine()) != null) &&(!(str.equals(".")))){
               int n = -1;
              // n = str.indexOf("Received:");
             
               n = str.indexOf("Date:");
               if (n>-1){
                  String maildate = str.substring(n+5,str.length()-n);
                  received = true;
                  System.out.println("DATE :"+maildate);
                  continue;
               }  
                 
               n = str.indexOf("Message-ID:");
               if (n>-1){
                  String maildate = str.substring(n+11,str.length()-n);
                  System.out.println("Message-ID:"+maildate);
                  received = true;
                  continue;
               }
               n = str.indexOf("Message-Id:");
               if (n>-1){
                  String maildate = str.substring(n+11,str.length()-n);
                  System.out.println("Message-ID:"+maildate);
                  received = true;
                  continue;
               }
               n = str.indexOf("To:");
               if (n>-1){
                  String maildate = str.substring(n+3,str.length()-n);
                  System.out.println("To :"+maildate);
                  received = true;
                  continue;
               }
               n = str.indexOf("From:");
               if (n>-1){
                  String maildate = str.substring(n+5,str.length()-n);
                  System.out.println("From :"+maildate);
                  received = true;
                  continue;
               }
               n = str.indexOf("Subject:");
               if (n>-1){
                  String maildate = new String(str.substring(n+8,str.length()-n).getBytes("gb2312"));
                 // String maildate = str.substring(n+8,str.length()-n);
                  System.out.println("Subject :"+maildate);
                  received = true;
                  continue;
               }
               n = str.indexOf("X-Priority:");
               if (n>-1){
                  String maildate = str.substring(n+11,str.length()-n);
                  System.out.println("X-Priority:"+maildate);
                  received = true;
                  continue;
               }
               n = str.indexOf("X-Originating-IP:");
               if (n>-1){
                  String maildate = str.substring(n+17,str.length()-n);
                  System.out.println("X-Originating-IP:"+maildate);
                  received = true;
                  continue;
               }
               n = str.indexOf("Sender:");
               if (n>-1){
                  String maildate = new String(str.substring(n+7,str.length()-n).getBytes("gb2312"));
                  //String maildate = str.substring(n+7,str.length()-n);
                  System.out.println("Sender :"+maildate);
                  received = true;
                  continue;
               }
               if (!received){
                   continue;
               }
               str = new String(str.getBytes("gb2312"));
               //str = new String(bbb);
               if (seemsg){
                  result += str + "\n"; 
               }   
           }  
           
           if (seemsg){
              System.out.println(result);
           }   
           System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
           
           return true;
        }catch(IOException io){   
           System.out.println(io.toString());
           return false;
        } 
         
    }        
}