Page d'accueilFindIt !ContactAstuces JavaAstuces Java

Astuces JavaTM

Astuces Java

Tip

 Gestion d'une mailing list

 

Niveau : initié
Compatibilité : Java 1.1 et ultérieure

Contexte

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 :

La création puis l'envoi d'un message utilisent les fonctionnalités suivantes de la bibliothèque JavaMail :

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.java

Exé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.com

La 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 :

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.txt

JavaMail 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é.


Page d'accueilFindIt !ContactAstuces JavaAstuces JavaDébut de la page
© Copyrights 1997-2015 Emmanuel PUYBARET / eTeks
- Tous droits réservés -
Astuces Java