Home / Programmazione / Java / Controllare email non lette di Gmail con Java
Mattepuffo

Controllare email non lette di Gmail con Java

Controllare email non lette di Gmail con Java

Oggi vediamo come vedere le email non lette del nostro account Gmail tramite Java e IMAP.

Dopo aver creato il nostro progetto, dovete scaricare e includere la libreria JavaMail, che non fa parte del JDK e che potete scariacare da java.net.

JavaMail ci permette un buon controllo sulle nostre email; è una libreria molto completa (ancora mi chiedo perchè non sia inclusa nel JDK).

Vediamo la classe, che con molta fantasia ho chiamato MyGmail:

public class MyGmail {

    public void getEmailsNotRead(String protocol, String host, String port, String userName, String password) throws MessagingException {
        Properties properties = getServerProperties(protocol, host, port);
        Session session = Session.getDefaultInstance(properties);
        Store store = session.getStore(protocol);
        store.connect(userName, password);
        Folder inbox = store.getFolder("INBOX");
        inbox.open(Folder.READ_WRITE);
        int count = inbox.getMessageCount();
        Message[] messages = inbox.getMessages(count - 50, count); // ULTIMI 50 MESSAGGI
        for (Message message : messages) {
            if (!message.isSet(Flags.Flag.SEEN)) {
                Address[] fromAddresses = message.getFrom();
                System.out.println("...................");
                System.out.println("t From: " + fromAddresses[0].toString());
                System.out.println("t To: " + parseAddresses(message.getRecipients(RecipientType.TO)));
                System.out.println("t CC: " + parseAddresses(message.getRecipients(RecipientType.CC)));
                System.out.println("t Subject: " + message.getSubject());
                System.out.println("t Sent Date:" + message.getSentDate().toString());
            }
        }
        inbox.close(false);
        store.close();
    }

    private Properties getServerProperties(String protocol, String host, String port) {
        Properties properties = new Properties();
        properties.put(String.format("mail.%s.host", protocol), host);
        properties.put(String.format("mail.%s.port", protocol), port);
        properties.setProperty(String.format("mail.%s.socketFactory.class", protocol), "javax.net.ssl.SSLSocketFactory");
        properties.setProperty(String.format("mail.%s.socketFactory.fallback", protocol), "false");
        properties.setProperty(String.format("mail.%s.socketFactory.port", protocol), String.valueOf(port));
        return properties;
    }

    private String parseAddresses(Address[] address) {
        String listOfAddress = "";
        if ((address == null) || (address.length < 1)) {
            return null;
        }
        if (!(address[0] instanceof InternetAddress)) {
            return null;
        }
        for (int i = 0; i < address.length; i++) {
            InternetAddress internetAddress = (InternetAddress) address[0];
            listOfAddress += internetAddress.getAddress() + ",";
        }
        return listOfAddress;
    }
}

Ci sono tre metodi, di cui due privati:

  • parseAddresses -> si occupa di estrarre tutti gli indirizzi dai campi TO e CC
  • getServerProperties -> si occupa di settare le proprietà di connessione
  • getEmailsNotRead -> da cui inizia il tutto

In questo metodo in particolare eseguiamo queste operazioni:

  • connessione
  • apriamo la casella INBOX (in modalità READ_WRITE, ma scegliete voi)
  • contiamo quanti messaggi ci sono
  • prendiamo gli ultimi partendo dall'ultimo (anche qui scegliete voi quanti prenderne)
  • scorriamo i vari messaggi e controlliamo se hanno il Flag SEEN non settato
  • in questo caso stampiamo le informazioni

Come vedete, in questo esempio, non facciamo nessuna scrittura.

A questo punto lanciamo la classe:

        MyGmail mb = new MyGmail();
        try {
            mb.getEmailsNotRead("imap", "imap.gmail.com", "993", "USERNAME", "PASSWORD");
        } catch (MessagingException ex) {
            System.out.println(ex.getMessage());
        }

Mettendo le vostre credenziali del vostro account Gmail.

La prima volta che lo lanciate, otterrete un errore, in quanto l'applicazione sarà bloccata dai controlli di Gmail.

Accedendo al vostro account, potete vedere l'email che vi avverte di ciò; potete seguire le istruzioni e sbloccare l'accesso in modo da poter raggiungere il vostro account da questo piccolo programma (o da altri simili).

Potete sempre tornare alle impostazioni iniziali ovviamente.

Enjoy!