|
Gestion d'une mailing list |
Niveau : initié
Compatibilité : Java 1.1 et ultérieureContexte
La plupart des programmes de mail vous permettent d'envoyer à plusieurs personnes un même message en donnant plusieurs Emails dans la liste des destinataires, mais ceci a la fâcheuse tendance de donner un côté spam à votre message, ce qui peut avoir un effet désastreux.
Pour pallier à ce problème, le programme qui vous est proposé ce mois-ci vous permet de faire parvenir un même message à un ensemble de personnes et ce de manière individuelle.Au passage, vous verrez comment utiliser la bibliothèque JavaMail, qu'il vous faut télécharger à l'adresse :
http://www.javasoft.com/products/javamail/index.html
Pour fonctionner, JavaMail a besoin de la bibliothèque JAF (JavaBeans Activation Framework) disponible à l'adresse :
http://www.javasoft.com/beans/glasgow/jaf.html.Ces deux bibliothèques sont des fichiers compressés qu'il faut déployer sur votre machine. mail.jar et activation.jar sont les deux fichiers principaux qui contiennent les classes dont vous avez besoin.
Maintenant, vous êtes prêt à créer toute sorte d'Emails en Java.
Programme MailingList
Le programme qui suit, est composé de trois parties :
- Vérification du nombre d'arguments et récupération des arguments dans des variables locales.
- Lecture du fichier contenant le sujet et le corps du message à envoyer.
- Envoi du message à chacun des destinataires, l'un après l'autre.
La création puis l'envoi d'un message utilisent les fonctionnalités suivantes de la bibliothèque JavaMail :
- Création d'une session grâce à Session.getDefaultInstance (). Cette méthode static prend en paramètre un ensemble de propriétés qui doit décrire votre 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 () respectivement.
- Envoi du message grâce à la méthode static send () de la classe Transport.
Les classes de la bibliothèque JavaMail appartiennent aux packages javax.mail et javax.mail.internet.
/* * MailingList.java 1.0 * Copyright (c) 1999 Emmanuel PUYBARET - eTeks. All Rights Reserved. */ import java.io.*; import java.util.*; import javax.mail.*; import javax.mail.internet.*; public class MailingList { public static void main (String [] args) { // Vérification du nombre d'arguments if (args.length != 4) { System.out.println ("usage: java from smtphost mailfile destfile"); System.exit (1); } // Récupération des arguments String from = args [0]; String smtphost = args [1]; String mailFile = args [2]; String destFile = args [3]; try { // Ouverture du fichier contenant le sujet + le message à envoyer // et du fichier contenant les destinataires BufferedReader mailReader = new BufferedReader (new FileReader (mailFile)); BufferedReader destReader = new BufferedReader (new FileReader (destFile)); // Lecture du sujet (première ligne) String subject = mailReader.readLine (); // Lecture du contenu du message String content = ""; String line; while ((line = mailReader.readLine ()) != null) content += line + "\n"; mailReader.close (); // Création d'un ensemble de propriétés // et ouverture d'une session Properties props = new Properties(); props.put ("mail.smtp.host", smtphost); Session session = Session.getDefaultInstance (props, null); String to; // Parcours de la liste de tous les destinataires while ((to = destReader.readLine ()) != null) // Si le premier caractère est #, c'est une remarque if ( to.length () > 0 && to.charAt (0) != '#') try { // Création d'un message Message message = new MimeMessage (session); // Modification de l'expéditeur message.setFrom (new InternetAddress (from)); // Modification du destinataire InternetAddress [] address = {new InternetAddress (to)}; message.setRecipients (Message.RecipientType.TO, address); // Modification du sujet message.setSubject (subject); // Modification du contenu en texte brut message.setContent (content, "text/plain"); // Envoi du message Transport.send (message); System.out.println ("Message envoye a " + to); } catch (MessagingException mex) { mex.printStackTrace (); } } catch (IOException ex) { System.out.println ("Probleme d'acces a " + mailFile + " ou " + destFile); } } }Compilation
Pour utiliser le programme précédent, recopiez le programme source dans le fichier MailingList.java, puis compilez-le en n'oubliant pas d'ajouter le chemin d'accès aux bibliothèques JavaMail et JAF.
Par exemple, sous Windows, si vous utilisez Java 2 et si vous avez installé JavaMail et JAF dans le répertoire c:\jdk, vous utiliserez la ligne de commande suivante :
javac -classpath c:\jdk\javamail-1.1\mail.jar;c:\jdk\jaf\activation.jar MailingList.javaExécution
Une fois compilé, il vous faut préparer le fichier du message à envoyer et le fichier regroupant tous les destinataires. Appelons-les par exemple mail.txt et dest.txt :
mail.txt dest.txt Naissance du site aaaa Bonjour, J'ai l'honneur de vous annoncer la naissance d'un nouveau site consacre a ... A bientot sur http://... Moi #Destinataires professionnels x@xx.com y@yy.com #Adresses perso monami@zz.comLa première ligne de ce fichier est utilisée comme sujet du message.
Le reste du fichier représente le corps du message.Chaque ligne doit contenir un destinataire.
Si la ligne commence par un caractère #, elle est ignorée, ce qui permet d'ajouter des commentaires.Maintenant, vous êtes prêt à utiliser ce programme qui prend 4 paramètres :
- L'Email utilisé pour indiquer l'expéditeur, par exemple moi@aaaa.com.
- Votre serveur de mail, ou mailhost. Si vous ne le connaissez pas, cherchez dans les options de votre navigateur le serveur de courrier sortant ou serveur SMTP.
- Le nom du fichier contenant le message à envoyer.
- Le nom du fichier regroupant tous les destinataires.
Par exemple, sous Windows, si vous êtes dans les mêmes conditions que précédemment, vous exécuterez le programme avec la ligne de commande suivante :
java -classpath .;c:\jdk\javamail-1.1\mail.jar;c:\jdk\jaf\activation.jar MailingList moi@aaaa.com monmailer mail.txt dest.txtJavaMail permet aussi de gérer une mailbox de A à Z. De nombreux exemples sont fournis avec les spécifications fournies dans le fichier que vous avez téléchargé.
|