API JavaMail - Classi principali

L'API JavaMail è costituita da alcune interfacce e classi utilizzate per inviare, leggere ed eliminare i messaggi di posta elettronica. Sebbene ci siano molti pacchetti nell'API JavaMail, copriranno i due pacchetti principali che vengono utilizzati frequentemente nell'API Java Mail: javax.mail e pacchetto javax.mail.internet . Questi pacchetti contengono tutte le classi principali di JavaMail. Loro sono:

Classe Descrizione
javax.mail.Session La classe chiave dell'API. Un oggetto multithread rappresenta il factory di connessione.
javax.mail.Message Una classe astratta che modella un messaggio di posta elettronica. Le sottoclassi forniscono le implementazioni effettive.
javax.mail.Address Una classe astratta che modella gli indirizzi (da e a indirizzi) in un messaggio. Le sottoclassi forniscono le implementazioni specifiche.
javax.mail.Authenticator Una classe astratta utilizzata per proteggere le risorse di posta sul server di posta.
javax.mail.Transport Una classe astratta che modella un meccanismo di trasporto dei messaggi per l'invio di un messaggio di posta elettronica.
javax.mail.Store Una classe astratta che modella un archivio di messaggi e il relativo protocollo di accesso, per l'archiviazione e il recupero dei messaggi. Un negozio è suddiviso in cartelle.
javax.mail.Folder Una classe astratta che rappresenta una cartella di messaggi di posta. Può contenere sottocartelle.
javax.mail.internet.MimeMessage Message è una classe astratta, quindi deve funzionare con una sottoclasse; nella maggior parte dei casi, utilizzerai un MimeMessage. Un MimeMessage è un messaggio di posta elettronica che comprende i tipi e le intestazioni MIME.
javax.mail.internet.InternetAddress Questa classe rappresenta un indirizzo di posta elettronica Internet utilizzando la sintassi di RFC822. La sintassi tipica dell'indirizzo è nel formato [email protected] o Nome personale <[email protected]> .

Studiamo ciascuna di queste classi in dettaglio e nei capitoli successivi studieremo esempi usando ciascuna di esse.

Classe di sessione

La classe Session è la classe principale dell'API JavaMail e non è sottoclasse. L' oggetto Session funge da factory di connessione per l'API JavaMail, che gestisce sia l'impostazione della configurazione che l'autenticazione.

L' oggetto Session può essere creato nei seguenti modi:

  • Cercando l'oggetto amministrato memorizzato nel servizio JNDI

    InitialContext ctx = new InitialContext();
    Session session = (Session) ctx.lookup("usersMailSession");

    usersMailSession è l'oggetto del nome JNDI utilizzato come oggetto amministrato per l'oggetto Session. usersMailSession può essere creato e configurato con i parametri richiesti come coppie nome / valore, incluse informazioni come il nome host del server di posta, l'account utente che invia la posta ei protocolli supportati dall'oggetto Session.

  • Un altro metodo per creare l'oggetto Session si basa sull'approccio programmatico in cui è possibile utilizzare un oggetto java.util.Properties per sovrascrivere alcune delle informazioni predefinite, come il nome del server di posta, il nome utente, la password e altre informazioni che possono essere condiviso nell'intera applicazione.

Il costruttore per la classe Session è privato . Quindi la classe Session fornisce due metodi (elencati di seguito) che ottengono l' oggetto Session .

  • getDefaultInstance(): Esistono due metodi per ottenere l'oggetto sessione utilizzando il metodo getDefaultInstance (). Restituisce la sessione predefinita.

    public static Session getDefaultInstance(Properties props)
    public static Session getDefaultInstance(Properties props,Authenticator auth)
  • getInstance(): Esistono due metodi per ottenere l'oggetto sessione utilizzando il metodo getInstance (). Restituisce la nuova sessione.

    public static Session getInstance(Properties props)
    public static Session getInstance(Properties props,Authenticator auth)

Classe messaggio

Con l'oggetto Session creato si passa ora alla creazione di un messaggio che verrà inviato. Il tipo di messaggio sarà javax.mail.Message .

  • Il messaggio è una classe astratta. Quindi la sua sottoclasse javax.mail.internet.MimeMessage viene utilizzata principalmente.

  • Per creare il messaggio, è necessario passare l'oggetto sessione nel costruttore della classe MimeMessage. Per esempio:

    MimeMessage message=new MimeMessage(session);
  • Una volta creato l'oggetto messaggio, dobbiamo memorizzare le informazioni in esso. La classe Message implementa l'interfaccia javax.mail.Part mentre javax.mail.internet. MimeMessage implementa javax.mail.internet.MimePart. Puoi usare message.setContent () o mimeMessage.setText () per memorizzare il contenuto.

  • I metodi comunemente usati della classe MimeMessage sono

    Metodo Descrizione
    public void setFrom (Indirizzo indirizzo) utilizzato per impostare il campo di intestazione da.
    public void addRecipients (tipo Message.RecipientType, indirizzi stringa) utilizzato per aggiungere l'indirizzo specificato al tipo di destinatario.
    public void setSubject (oggetto stringa) utilizzato per impostare il campo dell'intestazione dell'oggetto.
    public void setText (String textmessage) utilizzato per impostare il testo come contenuto del messaggio utilizzando il tipo MIME text / plain.

Classe indirizzo

Ora che abbiamo un oggetto Session e Message (con contenuto in esso memorizzato), dobbiamo indirizzare la lettera utilizzando l' oggetto Address .

  • L'indirizzo è una classe astratta. Quindi viene utilizzata principalmente la sua classe javax.mail.internet.InternetAddress .

  • L'indirizzo può essere creato semplicemente passando l'indirizzo e-mail:

    Address address = new InternetAddress("[email protected]");
  • Un altro modo per creare un indirizzo è passare il nome alog con l'indirizzo e-mail:

    Address address = new InternetAddress("[email protected]", Manisha);
  • Puoi anche impostare i campi A, Da, CC, Ccn come di seguito

    • message.setFrom(address)

    • message.addRecipient (tipo, indirizzo)

    • Tre tipi di indirizzi predefiniti sono oggetti con uno di questi valori:

      • Message.RecipientType.TO

      • Message.RecipientType.CC

      • Message.RecipientType.BCC

Classe autenticatore

La classe Authenticator rappresenta un oggetto che sa come ottenere l'autenticazione per una connessione di rete. Di solito, lo farà richiedendo informazioni all'utente.

  • Authenticator è una classe astratta. Si crea una sottoclasse PasswordAuthentication , passando un nome utente e una password al suo costruttore.

  • È necessario registrare l'autenticatore con la sessione quando si crea l'oggetto sessione.

Di seguito è riportato un esempio di utilizzo dell'autenticatore :

Properties props = new Properties();
//Override props with any customized data
PasswordAuthentication auth = new PasswordAuthentication("manisha", "pswrd")
Session session = Session.getDefaultInstance(props, auth);

Classe di trasporto

La classe di trasporto viene utilizzata come meccanismo di trasporto dei messaggi. Questa classe normalmente utilizza il protocollo SMTP per inviare un messaggio.

  • È una classe astratta.

  • Puoi usare la versione predefinita della classe semplicemente chiamando il metodo statico send () :

    Transport.send(message);
  • L'altro modo per inviare un messaggio è ottenere un'istanza specifica dalla sessione per il protocollo, passare il nome utente e la password (vuoto se non necessario), inviare il messaggio e chiudere la connessione:

    message.saveChanges(); // implicit with send()
    //Get transport for session
    Transport transport = session.getTransport("smtp");
    //Connect
    transport.connect(host, username, password);
    //repeat if necessary
    transport.sendMessage(message, message.getAllRecipients());
    //Done, close the connection
    transport.close();

Classe negozio

Una classe astratta che modella un archivio di messaggi e il relativo protocollo di accesso, per l'archiviazione e il recupero dei messaggi. Le sottoclassi forniscono implementazioni effettive. Store estende la classe Service , che fornisce molti metodi comuni per denominare gli archivi, connettersi agli archivi e ascoltare gli eventi di connessione.

I client ottengono l'accesso a un Message Store ottenendo un oggetto Store che implementa il protocollo di accesso al database. La maggior parte degli archivi di messaggi richiede che l'utente venga autenticato prima di consentire l'accesso. Il metodo di connessione esegue tale autenticazione.

Store store = session.getStore("pop3");
store.connect(host, username, password);

Classe cartella

Folder è una classe astratta che rappresenta una cartella per i messaggi di posta. Le sottoclassi implementano cartelle specifiche del protocollo. Le cartelle possono contenere sia sottocartelle che messaggi, fornendo così una struttura gerarchica.

Dopo esserti connesso allo Store, puoi quindi ottenere una cartella, che deve essere aperta prima di poter leggere i messaggi da essa.

Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();

Il metodo getFolder (String name) per un oggetto Folder restituisce la sottocartella denominata. Chiudere la connessione all'archivio e alla cartella una volta terminata la lettura della posta.

Possiamo vedere la relazione Store e Folder nell'immagine qui sotto:

Come possiamo vedere, per ogni account utente, il server ha un archivio che è l'archiviazione dei messaggi dell'utente. Il negozio è suddiviso in cartelle e la cartella "Posta in arrivo" è la cartella principale che contiene i messaggi di posta elettronica. Una cartella può contenere sia messaggi che sottocartelle.