Chinese (People's Republic of China)  English  Français


Supinfo-Projects.com
Tous les projets des élèves ingénieurs de Supinfo



Projets
  Dernier Projet
  Les plus populaires
  Tous les Projets

304 Visiteurs
3168 Projets


My Supinfo-Projects

   Connectez-vous
   Créez un Compte


Synopsis

   7864 Visites
   Note INTERNET : 16.2
    (135 Votants)
   43 Commentaires

   Lire l'article

Evaluez cet article

20
18
16
14
12
10
8
6
4
2
0


Commentez cet article

Auteur :

Email :

Votre commentaire :



 
2004 - Note de Synthèse Stage
Utilisation de l'API JavaMail
[40 mn de lecture - paru le 9/4/2003 - Public : Débutant]

Auteur

lilieJulie MUESSER
Elève-Ingénieur Supinfo Paris
Promotion SUPINFO 2005

   Lui écrire
   Tous les projets de cet auteur
   Le mini-CV de cet auteur

3. Utilisation des classes JavaMail

Dans cette partie, je vais vous montrez différentes utilisations des classes expliquées au chapitre précédent pour faire différentes tâches, notamment des exemples d'utilisation réalisés au cours de mon stage :

3.1. Envoyer un message

Voici les différentes étapes à accomplir pour envoyer votre message :

En premier lieu, il faut créer un objet Properties et récupérez les propriétés du système.
Vous devez spécifier le nom de votre serveur de smtp aux propriétés (objet Properties) pour mail.smtp.host.

Envoyer des messages nécessite d'avoir une session. Obtenez la Session objet basé sur Properties.
Créez un objet MimeMessage pour la session, et paramétrez ensuite celui-ci avec le sujet, le contenu, les adresses du destinataire et de l'expéditeur.
L'envoie du message se termine par la méthode send() de la classe Transport.

Exemple:

String emailfrom = ...;
String emailto = ...;


// Récupére les propriétés du systéme
Properties props = System.getProperties();

// Spécification du serveur mail
props.put("mail.smtp.host", host);

// Récupère la session
Session session = Session.getDefaultInstance(props, null);

// Définition du message
MimeMessage message = new MimeMessage(session);
//Spécification de l'expéditeur
message.setFrom(new InternetAddress(emailfrom));
//Spécification du destinataire
message.addRecipient(Message.RecipientType.TO, new InternetAddress(emailto));
//Sujet du message
message.setSubject("Ineo Utilisateurs");
//Texte du message
message.setText("Liste des utilisateurs");
// Envoie le message
Transport.send(message);

3.2 Vérification des messages

Pour lire vos messages, vous devez récupérer une session, récupérer et se connecter à un objet store qui représente un système de stockage de messages. (Nous l’appellerons « Messagerie »).
Il vous faut ensuite ouvrir le dossier approprié et récupérer vos messages.

Exemple pour le « checking » des messages :

String host = ...;
String username = ...;
String password = ...;

// Créé un objet Properties
Properties props = new Properties();

// Récupère la session
Session session = Session.getDefaultInstance(props, null);

// Récupère la "messagerie" et se connecte
Store store = session.getStore("pop3");
store.connect(host, username, password);

// Récupère le fichier "Boite de réception" et l'ouvre
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);

// Check les messages du dossier
Message message[] = folder.getMessages();

//Utilisé pour la lecture
BufferedReader reader = new BufferedReader ( new InputStreamReader(System.in));

for (int i=0, n=message.length; i<n; i++) {br> System.out.println(i + ": " + message[i].getFrom()[0] + "\t" + message[i].getSubject());

// Pour la lecture du message
System.out.println("Voulez vous lire le message " [YES to read/QUIT to end]");
String line = reader.readLine();
if ("YES".equals(line)) {
message[i].writeTo(System.out);
}
else if ("QUIT";.equals(line)) {
break;
}

}

// ferme la connection
folder.close(false);
store.close();

3.3 Suppression des messages et « drapeaux »

Supprimer un message nécessite l’utilisation des « drapeaux ».
L’objet Flags (javax.mail.Flags) représente les drapeaux. Ceux-ci sont associés aux messages.
En effet chaque message est défini par un état représenté par un « Flag ». Les différents flags sont prédéfinis dans la classe Flags.Flag et sont listés:

Flags.Flag.ANSWERED : le message a été demandé
Flags.Flag.DELETED : message marqué pour la suppression
Flags.Flag.DRAFT : le message est un brouillon
Flags.Flag.FLAGGED : message marqué dans un état sans définition
Flags.Flag.RECENT : message arrivé récemment, non modifiable.
Flags.Flag.SEEN : message visualisé
Flags.Flag.USER : le user peut ajouter des états particuliers.

Pour supprimer vos messages, vous devez spécifier les « Flag.DELETED »

message.setFlag(Flags.Flag.DELETED, true);

Ouvrer le dossier en READ_WRITE mode:

folder.open(Folder.READ_WRITE);

Une fois les messages passés au processus, fermer le dossier avec la méthode close() avec comme paramètre true pour effacer les messages.

folder.close(true);

3.4 Répondre au message

La classe Message inclue une méthode reply() pour créer un nouveau message avec les propriétés du message reçu en ajoutant « RE : » dans le sujet.

Pour répondre seulement à l’expéditeur, il faut passer false en paramètre à la méthode reply().

MimeMessage reply = (MimeMessage)message.reply(false);
reply.setFrom(new InternetAddress("groupe@ineo.com"));
reply.setText("Message recu merci");
Transport.send(reply);

3.5 Envoyer un message avec des Pièces jointes

Lors de mon stage, j'ai du créer une application, envoyant des mails contenant une pièce jointe (un fichier).
Voici pour cela les étapes à suivre pour joindre une pièce jointe à votre message

Les pièces jointes sont des ressources qui peuvent être jointes avec un mail. Elles souvent placées en dehors des messages comme un fichier texte, une image, une vidéo, un executable.

Comme avec un client de messagerie, on peut aussi attacher une pièce jointe au mail avec les API JavaMail et les ouvrir.

Pour envoyer une pièce jointe, il faut créer des parties de messages.Chaque partie est créée avec un objet de type MimeBodyPart.
La première partie est votre message.
Les autres parties correspondent à la pièce jointe.
Toutes les parties sont ajoutées dans un objet de type MimeMultipart grâce à la méthode addBodyPart().
Il faut utiliser la classe DataSource pour définir la pièce jointe qui sera un objet de type FileDataSource.
La méthode setDataHandler() permet l’ajout de la pièce jointe au message avec la méthode setFileName() pour le nom du fichier.

Exemple:

// Définit le message
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("Pièce jointe");

// Première partie du message
BodyPart messageBodyPart = new MimeBodyPart();

// Contenu du message
messageBodyPart.setText("le voici");

//Ajout de la première partie du message dans un objet Multipart
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);

// Partie de la pièce jointe
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource("image.gif");
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName("image.gif");

//Ajout de la partie pièce jointe
multipart.addBodyPart(messageBodyPart);

message.setContent(multipart);

// Envoi du message
Transport.send(message);

3.6 Message HTML

Pour envoyer un mail en html, il vous suffit simplement de d’écrire votre html dans une string et de le passer au message en lui spécifiant le type et le sous-type du protocole MIME "text/html"

String htmlText = " <H1>Hello</H1>" + "<img src=\"http://www.labo-java.com/images/logo.gif\">";
message.setContent(htmlText, "text/html"));

3.7 Inclure une image au message HTML

Si on veut envoyer un message HTML contenant des images, il faut alors traiter le message différemment.
En effet, les images doivent être ajoutées en pièces jointes au message. Cependant chaque image doit être référencée par une "cid URL". cid est la référence du Content-ID (entête de l'image attaché). Ainsi on pourra mettre le lien de l'image dans le HTML par le cid que l'on aura défini.

Le processus reste le même que pour une pièce jointe classique (chapitre 3.5), cependant nous devons indiquer le lien entre les deux parties du message, la partie contenu (html) et l'image. Ceci se fera grâce à "related" passé en paramètre au constructeur de l'objet MultiPart.

Exemple:

String file = ...;

// Crée le message
Message message = new MimeMessage(session);

// On met les attributs d'entête ( sujet, adresse, expéditeur, destinataire)
message.setSubject("Embedded Image");
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));

// Crée la partie message pour le contenu
BodyPart messageBodyPart = new MimeBodyPart();
String htmlText = "<H1>Hello</H1>" +
"<img src=\"cid:image\">";

//Type et sous-type du message
messageBodyPart.setContent(htmlText, "text/html");

//Crée l'objet Multipart qui contiendra toutes les parties du message
//on doit passer en paramètre "related", puisque les deux parties entres elles
//sont reliées
MimeMultipart multipart = new MimeMultipart("related");
multipart.addBodyPart(messageBodyPart);

// Crée l'autre partie du message qui contient l'image
messageBodyPart = new MimeBodyPart();

// Place l'image dans la partie
DataSource fds = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(fds));

//Attribue un nom à l'entête de l'image ( pour faire le lien)
messageBodyPart.setHeader("Content-ID","<image>");

// Ajoute la partie à l'objet Multipart
multipart.addBodyPart(messageBodyPart);

// Ajoute l'objet Multipart au message
message.setContent(multipart);

3.8 Gestion d'une mailing liste

Durant mon stage j’ai du concevoir une application permettant d’envoyer un ficher Excel (créer à partir d’une base de données) à une liste de contact.
Ainsi je vais pouvoir vous montrer la gestion d’une liste de contact avec l’envoi d’un fichier ou d’un message à ces contacts.

La plupart des programmes de mail comme Outlook permettent d'envoyer un même message à plusieurs personnes. Il suffit de mettre dans la liste des destinataires les emails des personnes à qui vous souhaitez envoyer ce même message. Malheureusement ceci a la fâcheuse tendance de donner un côté spam au message.
JavaMail peut pallier à ce problème, en envoyant le message à plusieurs personnes et de manière individuelle.

Il va donc falloir créer le message avec le sujet et le contenu.
Comme je vous l’ai présenté dans mon premier exemple, voici les règles de création d’un message puis de son envoi :

Récupération d'une session grâce à Session.getDefaultInstance(props, null).Cette méthode static prend en paramètre un objet de type Properties qui doit décrire le serveur de mail.

Création d'un message de classe MimeMessage.
Une fois créé ce message, il faut modifier l'expéditeur, la liste des destinataires, le sujet et le contenu du message, grâce aux méthodes setFrom(), setRecipients(), setSubject() et setContent().

Envoi du message grâce à la méthode static send() de la classe Transport.

Pour la modification du destinataire, il suffit d’étudier le fichier .txt qui contient la liste des destinataires.
Chaque ligne du fichier texte doit contenir un destinataire. On récupère alors chaque destinataire dans un variable de type String dest.

InternetAddress [] address = {new InternetAddress (dest)};
message.setRecipients (Message.RecipientType.TO, address);

Voici le programme utilisé pour envoyer un message à une liste de contacts :

import ineo.utilities.*;
import ineo.metier.*;
import javax.mail.internet.*;
import javax.mail.*;
import java.util.*;
import java.io.*;
import javax.mail.internet.InternetAddress;


public class mail {
public mail() {
}
private final static String MAILER_VERSION = "Java";
public static void envoyerMailSMTP(String serveur, boolean debug) {
try {
Properties prop = System.getProperties();
prop.put("mail.smtp.host", "smtp.ineo.fr");
Session session = Session.getDefaultInstance(prop, null);
Message message = new MimeMessage(session);
//Modification de l'expéditeur du message
message.setFrom(new InternetAddress("juliemuesser@ineo.com"));

// Lecture du fichier txt listeDiffusion afin de récupérer toutes les adresses mails

String nomFichier = "listeDiffusion.txt";
FileReader file = new FileReader("nomFichier");
BufferedReader buf = new BufferedReader(file);
String adr = buf.readLine();

// On crée un ArrayList qui contiendra les adresses mails
ArrayList mesAddresses = new ArrayList();
while (adr != null) {
mesAddresses.add(adr);
adr = buf.readLine();
}//while

InternetAddress[] internetAddresses = null;
String uneAdresse = "";
//Modification du destinataire
for (int i = 0; i < mesAddresses.size(); i++) {
uneAdresse = (String) mesAddresses.get(i);
internetAddresses[i] = new InternetAddress(uneAdresse);
}//for

message.setRecipients(Message.RecipientType.TO, internetAddresses);
//Modification des autres propriétés du message
message.setSubject("Test");
message.setText("test mail");
message.setHeader("X-Mailer", MAILER_VERSION);
message.setSentDate(new Date());
session.setDebug(debug);
//envoie du message
Transport.send(message);
}//try
catch(Exception e)
{
e.printStackTrace();
}//catch
}//envoyerMailSMTP()
}//class Mail



Articles de la même catégorie

 Pages : Top


3288 Visites
0 Commentaires
Introduction à wxWindows
[15 mn de lecture - paru le 7/22/2003 - Public : Débutant]

En savoir plus


1340 Visites
0 Commentaires
développement basique de site web avec frontpage
[10 mn de lecture - paru le 6/25/2003 - Public : Débutant]

En savoir plus


1154 Visites
1 Commentaires
Création d'une DTD
[25 mn de lecture - paru le 6/18/2003 - Public : Confirmé]

En savoir plus

   Tous les Articles


SUPINFO Training Center peut vous proposer une formation ...

   Devenez Ingénieur Système Microsoft en 35 jours avec SUPINFO Training Center
   Devenez Certifiés Cisco en 13 jours avec SUPINFO Training Center
   Devenez Administrateur Système Microsoft avec SUPINFO Training Center
   Devenez Développeur Microsoft .NET en 13 jours avec SUPINFO Training Center



Powered by Campus-Booster Technology
Conditions d'utilisation & Copyright | Respect de la vie privée
© Copyright 1965-2006 Supinfo Paris, Paris Academy of Computer Science
Supinfo, Ecole Supérieure d'Informatique et Paris Academy Of Computer Science are trade marks.
23, rue de Château LANDON - 75010 PARIS - Phone : +33 (0) 153359 700 Fax : +33 (0) 153359 701

Web site autided by :