# Mail Client



## kokoroko (10. Apr 2007)

Hallo Zusammen, 

ich versuche zur Zeit einen eigenen E-Mail client in Java zu schreiben. Ich hole Mails von einem POP3-Server. Alles laeuft mehr oder weniger super. Nur 2 Probleme konnte ich bis jetzt nicht loesen(vielleicht weil ich ganz neu in java bin). 

1. Wie finde ich heraus, welche Nachrichten ich noch nicht vom PO3-Server heruntergeladen habe? 

2. Die geholten Mails sollen in einem Verzeichnis gespeichert werden, das so z.B strukturiert ist. 


* C:\tomcat\webapps\Account_NR\Incoming\User\abgehaengte_datei *

P.S. die Leute, die mir nachrichte mit Attachment schicken haben einen Account_NR bei mir zur identifikation. Und unter einem Account_NR koennen mehrere Users sein. 
Ich versuche seit 2 Wochen und hab keine Ahnung. 
Hat jemand eine Idee? 

Danke fuer Ihre Hilfe


----------



## AlArenal (10. Apr 2007)

zu 1.:
Ohne mich nun mit den Feinheiten des Protokolls POP3 zu beschäftigen (was ich jedoch dir anrate) wäre eine Möglichkeit lokal festzuhalten welchen Timestamp die letzte abgeholte Mail eines jeden Postfachs hatte. Beim nächsten Polling lässt du dir die Liste der Mails im Postfach geben und holst einfach nur die neueren.

zu 2.:
Und wo genau liegt nun dein Problem bei der Programmierung? Sag nun nicht du hast 2 ganze Wochen was probiert und keinen Ansatz mit keiner Zeile Code hinbekommen...


----------



## kokoroko (10. Apr 2007)

Doch habe ich. Es waere einfach fuer mich, wenn die Baumstruktur des Verzeichnis des Provider dasgleich ist wie mein: C:\tomcat\etc... dann haette ich nur eine klasse zum kopieren geschreiben. Aber dies ist nicht der Fall.
Dazu noch kommt dass die mails zu dem richtigem Account_NR in tomcat gespeichert werden.


Nach durchlesen denke ich dass es vielleicht die Methode ObjectInputStream() ein teil der loesung ist aber bin nicht sicher.



Hier ist der code, der die mails holt. Es gibt noch 3 Klasse dazu aber in relevant fuer die frage
	
	
	
	





```
public class MailEmpfang {

    private String emailuser;
    private String emailpassword;
    private String emailserver;
    private String emailprovider;
    
    public MailRetriever(String emailuser,String emailpassword,String emailserver,String emailprovider) {
        this.emailuser=emailuser;
        this.emailpassword=emailpassword;
        this.emailserver=emailserver;
        this.emailprovider=emailprovider;
    }
    
    
    public void getMail() {
        Session session;
        Store store=null;
        Folder folder=null;
        Folder inboxfolder=null;
        
        Properties props=System.getProperties();
        props.setProperty("mail.pop3s.rsetbeforequit","true");
        props.setProperty("mail.pop3.rsetbeforequit","true");
        session=Session.getInstance(props,null);
        session.setDebug(true);
        
        try {
            store=session.getStore(emailprovider);
            store.connect(emailserver,emailuser,emailpassword);
            folder=store.getDefaultFolder();
            if(folder==null) throw new Exception("No default folder");
            inboxfolder=folder.getFolder("INBOX");
            if(inboxfolder==null) throw new Exception("No INBOX");
            inboxfolder.open(Folder.READ_ONLY);
            
            Message[] msgs=inboxfolder.getMessages();
            
            FetchProfile fp=new FetchProfile();
            fp.add("Subject");
            inboxfolder.fetch(msgs,fp);
            
            for(int j=msgs.length-1;j>=0;j--) {
                if(msgs[j].getSubject().startsWith("DigiMemo:")) {
                    setLatestMessage(msgs[j]);
                    break;
                }
            }
           
            inboxfolder.close(false);
            store.close();
            
        } catch (NoSuchProviderException ex) {
            ex.printStackTrace();
        } catch (MessagingException ex) {
            ex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                if(store!=null) store.close();
            } catch (MessagingException ex) {
                ex.printStackTrace();
            }
        }
    }
    
    public Renderable getLatestMessage() {
        return latestMessage;
    }
    
    private Renderable latestMessage;
    
    void setLatestMessage(Message message) {
        if(message==null) {
            latestMessage=null;
            return;
        }
        
        try {
            if(message.getContentType().startsWith("text/plain")) {
                latestMessage=new RenderablePlainText(message);
            } else {
                latestMessage=new RenderableMessage(message);
            }
        } catch (MessagingException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        MailRetriever mr=new MailRetriever(args[0],args[1],args[2],args[3]);
        mr.getMail();
        Renderable msg=mr.getLatestMessage();
        if(msg==null) {
            System.out.println("No valid messages in the mail account");
        } else {
            System.out.println("Subject:"+msg.getSubject());
            System.out.println("Body Text:"+msg.getBodytext());
            System.out.println(msg.getAttachmentCount()+" attachments");
            for(int i=0;i<msg.getAttachmentCount();i++) {
                Attachment at=msg.getAttachment(i);
                System.out.println(at.getFilename()+" "+at.getContent().length+" bytes of ("+at.getContenttype()+")");
            }
        }
    }
}
```


----------

