API JavaMail - Classes principales

L'API JavaMail se compose de certaines interfaces et classes utilisées pour envoyer, lire et supprimer des messages électroniques. Bien qu'il existe de nombreux packages dans l'API JavaMail, couvrira les deux principaux packages qui sont fréquemment utilisés dans l'API Java Mail: package javax.mail et javax.mail.internet . Ces packages contiennent toutes les classes principales de JavaMail. Elles sont:

Classe La description
javax.mail.Session La classe clé de l'API. Un objet multithread représente la fabrique de connexions.
javax.mail.Message Une classe abstraite qui modélise un message électronique. Les sous-classes fournissent les implémentations réelles.
javax.mail.Address Une classe abstraite qui modélise les adresses (adresses de et vers) dans un message. Les sous-classes fournissent les implémentations spécifiques.
javax.mail.Authenticator Une classe abstraite utilisée pour protéger les ressources de messagerie sur le serveur de messagerie.
javax.mail.Transport Une classe abstraite qui modélise un mécanisme de transport de message pour envoyer un message électronique.
javax.mail.Store Une classe abstraite qui modélise une banque de messages et son protocole d'accès, pour stocker et récupérer des messages. Un magasin est divisé en dossiers.
javax.mail.Folder Une classe abstraite qui représente un dossier de messages électroniques. Il peut contenir des sous-dossiers.
javax.mail.internet.MimeMessage Le message est une classe abstraite, donc doit fonctionner avec une sous-classe; dans la plupart des cas, vous utiliserez un MimeMessage. Un MimeMessage est un message électronique qui comprend les types et les en-têtes MIME.
javax.mail.internet.InternetAddress Cette classe représente une adresse e-mail Internet utilisant la syntaxe de la RFC822. La syntaxe d'adresse typique est de la forme [email protected] ou Personal Name <[email protected]> .

Étudions chacune de ces classes en détail et dans les chapitres suivants nous étudierons des exemples utilisant chacune d'elles.

Classe de session

La classe Session est la classe principale de l'API JavaMail et n'est pas sous-classée. L' objet Session fait office de fabrique de connexions pour l'API JavaMail, qui gère à la fois les paramètres de configuration et l'authentification.

L' objet de session peut être créé des manières suivantes:

  • En recherchant l'objet administré stocké dans le service JNDI

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

    usersMailSession est l'objet de nom JNDI utilisé comme objet administré pour l'objet Session. usersMailSession peut être créé et configuré avec les paramètres requis sous forme de paires nom / valeur, y compris des informations telles que le nom d'hôte du serveur de messagerie, le compte utilisateur qui envoie le courrier et les protocoles pris en charge par l'objet Session.

  • Une autre méthode de création de l'objet Session est basée sur l'approche par programme dans laquelle vous pouvez utiliser un objet java.util.Properties pour remplacer certaines des informations par défaut, telles que le nom du serveur de messagerie, le nom d'utilisateur, le mot de passe et d'autres informations qui peuvent être partagé sur l'ensemble de votre application.

Le constructeur de la classe Session est privé . Par conséquent, la classe Session fournit deux méthodes (répertoriées ci-dessous) qui récupèrent l' objet Session .

  • getDefaultInstance(): Il existe deux méthodes pour obtenir l'objet de session à l'aide de la méthode getDefaultInstance (). Il renvoie la session par défaut.

    public static Session getDefaultInstance(Properties props)
    public static Session getDefaultInstance(Properties props,Authenticator auth)
  • getInstance(): Il existe deux méthodes pour obtenir l'objet de session à l'aide de la méthode getInstance (). Il renvoie la nouvelle session.

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

Classe de message

Avec l'objet Session créé, nous passons maintenant à la création d'un message qui sera envoyé. Le type de message sera javax.mail.Message .

  • Le message est une classe abstraite. Par conséquent, sa sous-classe javax.mail.internet.MimeMessage est principalement utilisée.

  • Pour créer le message, vous devez passer l'objet de session dans le constructeur de classe MimeMessage. Par exemple:

    MimeMessage message=new MimeMessage(session);
  • Une fois l'objet de message créé, nous devons y stocker des informations. La classe Message implémente l'interface javax.mail.Part tandis que javax.mail.internet. MimeMessage implémente javax.mail.internet.MimePart. Vous pouvez utiliser message.setContent () ou mimeMessage.setText () pour stocker le contenu.

  • Les méthodes couramment utilisées de la classe MimeMessage sont

    Méthode La description
    public void setFrom (adresse adresse) utilisé pour définir le champ d'en-tête from.
    public void addRecipients (type Message.RecipientType, adresses de chaîne) utilisé pour ajouter l'adresse donnée au type de destinataire.
    public void setSubject (String subject) utilisé pour définir le champ d'en-tête du sujet.
    public void setText (String textmessage) utilisé pour définir le texte comme contenu du message à l'aide du type MIME text / plain.

Classe d'adresse

Maintenant que nous avons des objets Session et Message (avec le contenu stocké), nous devons adresser la lettre en utilisant l' objet Address .

  • L'adresse est une classe abstraite. Par conséquent, sa sous-classe javax.mail.internet.InternetAddress est principalement utilisée.

  • L'adresse peut être créée en passant simplement l'adresse e-mail:

    Address address = new InternetAddress("[email protected]");
  • Une autre façon de créer une adresse consiste à transmettre le nom avec l'adresse e-mail:

    Address address = new InternetAddress("[email protected]", Manisha);
  • Vous pouvez également définir les champs À, De, CC, BCC comme ci-dessous

    • message.setFrom(address)

    • message.addRecipient (type, adresse)

    • Trois types d'adresses prédéfinis sont des objets avec l'une de ces valeurs:

      • Message.RecipientType.TO

      • Message.RecipientType.CC

      • Message.RecipientType.BCC

Classe d'authentificateur

La classe Authenticator représente un objet qui sait comment obtenir l'authentification pour une connexion réseau. Habituellement, il le fera en invitant l'utilisateur à fournir des informations.

  • Authenticator est une classe abstraite. Vous créez une sous-classe PasswordAuthentication , en passant un nom d'utilisateur et un mot de passe à son constructeur.

  • Vous devez enregistrer l'authentificateur auprès de la session lorsque vous créez un objet de session.

Voici un exemple d' utilisation d' Authenticator :

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

Classe de transport

La classe de transport est utilisée comme mécanisme de transport de message. Cette classe utilise normalement le protocole SMTP pour envoyer un message.

  • C'est une classe abstraite.

  • Vous pouvez utiliser la version par défaut de la classe en appelant simplement la méthode statique send () :

    Transport.send(message);
  • L'autre façon d'envoyer un message est d'obtenir une instance spécifique de la session pour votre protocole, de transmettre le nom d'utilisateur et le mot de passe (vides si inutile), d'envoyer le message et de fermer la connexion:

    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 de magasin

Une classe abstraite qui modélise une banque de messages et son protocole d'accès, pour stocker et récupérer des messages. Les sous-classes fournissent des implémentations réelles. Store étend la classe Service , qui fournit de nombreuses méthodes courantes pour nommer les magasins, se connecter aux magasins et écouter les événements de connexion.

Les clients accèdent à un magasin de messages en obtenant un objet Store qui implémente le protocole d'accès à la base de données. La plupart des magasins de messages exigent que l'utilisateur soit authentifié avant d'autoriser l'accès. La méthode de connexion effectue cette authentification.

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

Classe de dossier

Folder est une classe abstraite qui représente un dossier pour les messages électroniques. Les sous-classes implémentent des dossiers spécifiques au protocole. Les dossiers peuvent contenir des sous-dossiers ainsi que des messages, fournissant ainsi une structure hiérarchique.

Après vous être connecté au Store, vous pouvez obtenir un dossier, qui doit être ouvert avant de pouvoir lire les messages à partir de celui-ci.

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

La méthode getFolder (String name) pour un objet Folder renvoie le sous-dossier nommé. Fermez la connexion Store et Folder une fois la lecture du courrier terminée.

Nous pouvons voir la relation entre le magasin et le dossier dans l'image ci-dessous:

Comme on peut le voir, pour chaque compte utilisateur, le serveur dispose d'un magasin qui est le stockage des messages de l'utilisateur. La banque est divisée en dossiers et le dossier «boîte de réception» est le principal dossier contenant les messages électroniques. Un dossier peut contenir à la fois des messages et des sous-dossiers.