# mail-extratoc(javamail)



## kokoroko (25. Mrz 2007)

Hallo,

ich bin hobby programmierer und habe ein kleines Projekt vor. 

1. ich mochte ein Programm, das Die Verbindung zu einem mailserver erstellt. Die angekommenen mails (in Inbox) holt und in ein anderes Verzeichnis verschiebt. 

Die Absender werden Account bei mir haben d.h (emaladresse, passwort) und duerfen nur bis 30 files mir schicken.

2.Bevor das Programm die mails in das neue Verzeichnis verschiebt sollt es ueberpruefen,  

- ob der Absender einen Acount hat, wenn nein dann die mail loeschen.
- ob der Absender die 30 files quote ueberschriten hat.

Ich habe bei jonglieren fast der erste Punkt geschrieben. 

Bitte korrigieren sie mie den code und helfen mir weiter bei der restlichen Klasse



```
/**
 *
 * @author Georges
 */
public class MailRetriever {

    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("MailPage:")) {
                    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 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());

       }
     }
  }
```


----------



## André Uhres (28. Mrz 2007)

kokoroko hat gesagt.:
			
		

> ..Bitte korrigieren sie mie den code und helfen mir weiter bei der restlichen Klasse..


So könnte jeder kommen  :roll: 
Stell bitte konkrete Fragen  :wink:


----------



## kokoroko (28. Mrz 2007)

Hallo André,

Danke Erstmal, dass Du ueberhaupt geantwortet hast. Ich bin fast verzweifelt. Also ich versuche konkret zu sein,
hoffe ich.
Ich moechte eine Klasse mit Methode, die die Absender von einem Inboxverzeichnis holt und fuer jeden Absender einen Ordner im Zielverzeichnis automatisch anlegt. Ich habe diesen code gefunden, aber es fehlt der Teil des 
Anlegens von Ordnern fuer jeden einzelnen Absender. z.B: liegen 5 mails von verschiedenen Mailadressen in der Inbox, und nun sollen im Zielverzeichnis automatisch 5 verschiedene Ordner angelegt werden, die den Absender kennzeichnen und die Mail beinhalten.   

Danke


```
public void copyDir(File quelle, File ziel) throws FileNotFoundException, IOException { 
       
   File[] files = quelle.listFiles(); 
   File newFile = null; // in diesem Objekt wird für jedes File der Zielpfad gespeichert. 
              // 1. Der alte Zielpfad 
              // 2. Das systemspezifische Pfadtrennungszeichen 
              // 3. Der Name des aktuellen Ordners/der aktuellen Datei 
   ziel.mkdirs();        // erstellt alle benötigten Ordner 
   if (files != null) { 
      for (int i = 0; i < files.length; i++) { 
            newFile = new File(ziel.getAbsolutePath() + System.getProperty("file.separator") + files[i].getName()); 
         if (files[i].isDirectory()) { 
            copyDir(files[i], newFile); 
         } 
         else { 
            copyFile(files[i], newFile); 
         } 
      } 
   } 
}
```


----------



## André Uhres (29. Mrz 2007)

Schau dir mal die javamail demo an (...\javamail-1.4\demo)


----------

