Vous êtes sur la page 1sur 11

Ecole Nationale des Sciences Appliquées

EL JADIDA

Volume 1

Programmation Réseau et Distribuées


JAVAEE

Dr. Mohamed LACHGAR


lachgar.m@gmail.com

2019 - 2020
2
Contents

1 JAVAMAIL 5
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Principaux protocoles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Envoi des emails avec JAVAMAIL . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.1 Message texte simple . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4 Envoi d’un attachment (Pièce jointe) . . . . . . . . . . . . . . . . . . . . . . 9
1.5 TP 1 : JAVA MAIL API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3
4 CONTENTS
Chapter 1

JAVAMAIL

1.1 Introduction
JavaMail est une API qui permet d’utiliser le courrier électronique (e-mail) dans une
application écrite en Java (application cliente, applet, servlet, EJB, ... ).

Son but est d’être facile à utiliser, de fournir une souplesse qui permette de la faire
évoluer et de rester le plus indépendant possible des protocoles utilisés.

Pour utiliser JavaMail, il est possible de la télécharger sur le site d’Oracle :


http://www.oracle.com/technetwork/java/javamail/index.html.

Les classes et interfaces sont regroupées dans quatre packages : javax.mail, javax.mail.event,
javax.mail.internet, javax.mail.search.

1.2 Principaux protocoles


• SMTP est l’acronyme de Simple Mail Transport Protocol. Ce protocole défini par
la recommandation RFC 821 permet l’envoi de mails vers un serveur de mails qui
supporte ce protocole.

• IMAP (Interactive Mail Access Protocol)Avec IMAP, tous vos courriers et vos
dossiers de messages restent sur le serveur et sont donc accessibles depuis n’importe
quel ordinateur connecté à Internet. Pratique si votre connexion est permanente, si
vous désirez accéder à tous vos messages depuis plusieurs endroits simultanément (à
domicile, en déplacement, en voyage, etc.) et si plusieurs utilisateurs partagent une
boîte aux lettres de service, depuis différents postes de travail. Vous aurez toujours
la même vue des messages sur le serveur, chacun verra les mêmes messages: si
un message est effacé par un utilisateur, les autres utilisateurs ne verront plus ce
message. S’il est déplacé dans un dossier sur le serveur, tous les utilisateurs verront
ce message dans ce dossier.
A chaque fois que vous vous connectez au serveur par IMAP, vous n’effectuez plus
une relève des messages, mais une synchronisation des messages (exactement comme
pour les newsgroups, pour ceux qui les connaissent). Le logiciel vous affiche alors
une copie de votre boîte aux lettres, archives comprises. Comme l’original reste
sur le serveur, vous pouvez avoir accès à votre courrier à partir de n’importe quel
ordinateur.

5
6 CHAPTER 1. JAVAMAIL

De plus comme seul les en-têtes des messages sont téléchargés dans un premier

Figure 1.1: IMAP

temps, l’affichage de la liste des messages est souvent beaucoup plus rapide avec
IMAP lorsqu’il y a un grand nombre de (nouveaux) messages sur le serveur.
IMAP remplace progressivement POP.

• POP est l’acronyme de Post Office Protocol. Ce protocole défini par la recomman-
dation RFC 1939 permet la réception de mails à partir d’un serveur de mails qui
implémente ce protocole. C’est un protocole très populaire sur Internet. Il définit
une boîte aux lettres unique pour chaque utilisateur. Une fois que le message est
reçu par le client, il est effacé du serveur.
Le protocole POP a été conçu pour vous permettre de récupérer votre courrier sur
une machine distante quand vous n’êtes pas connecté en permanence à Internet.
Le protocole POP bloque votre boîte aux lettres pendant que vous y accédez, ne
permettant pas à une autre connexion d’accéder en même temps à votre courrier.
L’évolution du courrier électronique vers le multimédia et le manque de flexibilité

Figure 1.2: POP

de POP favorisent l’émergence d’un nouveau protocole : l’IMAP


1.3. ENVOI DES EMAILS AVEC JAVAMAIL 7

1.3 Envoi des emails avec JAVAMAIL


1.3.1 Message texte simple
L’envoi du message se fait en trois étapes :

• création d’une Session ;

• création d’un objet Message, auquel nous ajoutons les destinataires ;

• envoi du message, grâce à un objet Transport.

La classe Session encapsule pour un client donné sa connexion avec le serveur de mails.
Cette classe encapsule les données liées à la connexion (options de configuration et données
d’authentification). C’est à partir de cet objet que toutes les actions concernant les mails
sont réalisées.

Etape 1 : Création de la session

final String username = "lachgar.m@gmail.com";


final String password = "azerty1234";

Properties props = new Properties();


props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");

Session session = Session.getInstance(props,


new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});

Pour obtenir une session, deux paramètres sont attendus :

• un objet Properties qui contient les paramètres d’initialisation. Un tel objet est
obligatoire;

• un objet Authenticator optionnel qui permet d’authentifier l’utilisateur auprès du


serveur de mails;

Etape 2 : Création d’un objet message

Message message = new MimeMessage(session);


message.setFrom(new InternetAddress("lachgar.m@gmail.com", "SCHOOL"));

message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("destination@gmail.com"));
message.setSubject("Testing");
8 CHAPTER 1. JAVAMAIL

message.setText("Dear Mail Crawler,"


+ "\n\n No spam to my email, please!");

• La classe InternetAddress encapsule une adresse email. Elle contient deux champs :
address qui contient l’adresse e-mail et personal qui contient le nom de la personne.

• La classe abstraite Message encapsule un Message. Le message est composé de deux


parties :

– une en-tête qui contient des attributs


– un corps qui contient les données à envoyer

• La méthode addRecipient() permet d’ajouter un destinataire et le type d’envoi.

– Le type d’envoi est précisé grâce à une constante pour chaque type :
– destinataire direct : Message.RecipientType.TO
– copie conforme : Message.RecipientType.CC
– copie cachée : Message.RecipientType.BCC

Etape 3 : Envoi du message


La classe Transport se charge de réaliser l’envoi du message avec le protocole adéquat.
C’est une classe abstraite qui contient la méthode static send() pour envoyer un mail.
Transport.send(message);

Programme complet

package javamail;

import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Javamail {


public static void main(String[] args) throws UnsupportedEncodingException
{
final String username = "lachgar.m@gmail.com";
final String password = "azerty1234";

Properties props = new Properties();


props.put("mail.smtp.auth", "true");
1.4. ENVOI D’UN ATTACHMENT (PIÈCE JOINTE) 9

props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");

Session session = Session.getInstance(props,


new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});

try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("lachgar.m@gmail.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("medlachgar@gmail.com"));
message.setSubject("Testing");
message.setText("Dear Mail Crawler,"
+ "\n\n No spam to my email, please!");
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}

1.4 Envoi d’un attachment (Pièce jointe)


Il est possible de joindre avec le mail des ressources sous forme de pièces jointes (attach-
ments). Pour cela, il faut :

• instancier un objet de type MimeMessage

• renseigner les éléments qui composent l’en-tête : émetteur, destinataire, sujet ...

• instancier un objet de type MimeMultiPart

• instancier un objet de type MimeBodyPart et alimenter le contenu de l’élément

• ajouter cet objet à l’objet MimeMultiPart grâce à la méthode addBodyPart()

• répéter l’instanciation et l’alimentation pour chaque ressource à ajouter

• utiliser la méthode setContent() du message en passant en paramètre l’objet Mime-


MultiPart pour associer le message et les pièces jointes au mail

Exemple :
10 CHAPTER 1. JAVAMAIL

Multipart multipart = new MimeMultipart();


// creation partie principale du message
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Test");
multipart.addBodyPart(messageBodyPart);
// creation et ajout de la piece jointe
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource("image.gif");
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName("image.gif");
multipart.addBodyPart(messageBodyPart);
// ajout des éléments au mail
message.setContent(multipart);

1.5 TP 1 : JAVA MAIL API


Etape 1 : Envoi d’un message texte
Créer l’interface suivante avec Swing

Figure 1.3: JAVAMAIL : Envoi d’un email

Etape 2 : Pièces jointes


Améliorer le programme précédent afin d’envoyer une ou plusieurs pièces jointes.

Etape 3 : Groupe des destinataires


Améliorer le programme précédent afin d’envoyer les messages pour un groupe des ut-
lisateurs.
1.5. TP 1 : JAVA MAIL API 11

Figure 1.4: JAVAMAIL : Confirmation d’envoi