package javacodebook.misc.mail_check;

import java.util.*;
import javax.mail.*;
import javax.mail.event.*;
import javax.activation.*;

/**
 *
 * @author  Mark Donnermeyer
 */
public class MailChecker {
    
    private String user;
    private String password;
    private String host;

    public void setUser(String user) {
        this.user = user;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }
    
    public void setHost(String host) {
        this.host = host;
    }
    
    public void checkNewMail() {
        try {
            Properties props = System.getProperties();
            
            // Es wird eine Mail-Session angelegt. 
            Session session = Session.getDefaultInstance(props, null);
            
            // Ein Store wird geholt. In diesem Falle ein
            // IMAP-Store.
            Store store = session.getStore("imap");
            
            // Die Verbindung zum Store wird hergestellt.
            store.connect(host, user, password);
            
            // Ein Ordner wird im Store geöffnet. Ist in 
            // diesem Falle der ROOT-Folder.
            Folder inbox = store.getFolder("INBOX");

            // Der Ordner wird geöffnet und ein Listener, welcher
            // auf das Eintreffen neuer Mails horcht, wird 
            // an den Ordner gehängt.
            inbox.open(Folder.READ_WRITE);
            inbox.addMessageCountListener(new MailNotifierer());
            
            // Jede Minute wird die aktuelle Anzahl an 
            // Nachrichten im geöffneten Ordner abgefragt.
            // Erst durch diese explizite Abfrage werden
            // evtl. neu eingetroffene Mails entdeckt.
            while (true) {
                
                System.out.println("Neue Nachrichten?");
                System.out.println(inbox.getMessageCount());
                Thread.sleep(1000*60); // 1 Minute warten
            }
            
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}