

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;


public class FetchMail 
{
    String host = null;
    String user= null;
    String pswd = null;
 
    public FetchMail(String host, String user,String pswd) {
        this.host = host;
	this.user = user;
	this.pswd = pswd;

    }

    public java.util.List<MailMessage> getMessages() {
        java.util.List<MailMessage> messages = new java.util.LinkedList();
        Store store=null;
        Folder folder=null;
 
        try {
            Properties props = System.getProperties();
            props.setProperty("mail.pop3.port", "110");
            Session session = Session.getInstance(props);
 
            store = session.getStore("pop3");
            store.connect(host, user, pswd);
 
            folder = store.getDefaultFolder();
            if (folder == null) throw new Exception("No default folder");
 
            folder = folder.getFolder("INBOX");
            if (folder == null)	{
                throw new Exception("No POP3 INBOX");
            }
 
            folder.open(Folder.READ_ONLY);
            Message[] msgs = folder.getMessages();
            for (int i = 0; i < msgs.length; i++)  {
                Message msg = msgs[i];
                MailMessage m = new MailMessage();

                m.setSubject(msg.getSubject());
                m.setSentDate(msg.getSentDate());
                m.setReceivedDate(msg.getReceivedDate());
                m.setReplyTo(Arrays.asList(msg.getReplyTo()));

                String from = ((InternetAddress)msg.getFrom()[0]).getPersonal();
                if (from==null)  {
                    from = ((InternetAddress)msg.getFrom()[0]).getAddress();
                }
                m.setMailFrom(from);
                m.setMessageNumber(msg.getMessageNumber());
                m.setContent(getContent(msg));
                     
                messages.add(m);
            }
            return messages;
            
        } catch (Exception ex)  {
            ex.printStackTrace();
            return null;
        } finally {
            try {
                if (folder!=null) folder.close(false);
                if (store!=null)  store.close();
            } catch (Exception ex2) {
                ex2.printStackTrace();
                return null;
            }
        }
        
    }
    
    public String getContent(Message message) {
        try  {
	    String body="";
	    Part messagePart = message;
            Object content = messagePart.getContent();
            if (content instanceof Multipart)	{
                 messagePart=((Multipart)content).getBodyPart(0);
            }
   	    String contentType = messagePart.getDisposition();
   	    if ((contentType != null) && ((contentType.equals(Part.ATTACHMENT)  || contentType.equals(Part.INLINE)))) {
		//saveFile(messagePart.getFileName());
                return null;
    	    }  else  {
  	      BufferedReader reader=new BufferedReader(new InputStreamReader(messagePart.getInputStream()));
	      String b=reader.readLine();
	      while (b!=null)  {
		b=reader.readLine();
		body += b + "\n";
              }
	      return body;
	    }
 
	}  catch (Exception ex)  {
            ex.printStackTrace();
            return null;
        }
    }
 

 
}
