/*
 * 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) 
  {
    // Verification du nombre d'arguments
    if (args.length != 4) 
    {
      System.out.println ("usage: java from smtphost mailfile destfile");
      System.exit (1); 
    }

    // Recuperation des arguments
    String from     = args [0];
    String smpthost = args [1];
    String mailFile = args [2];
    String destFile = args [3];
    
    try
    {
      // Ouverture du fichier contenant le sujet + le message a envoyer
      // et du fichier contenant les destinataires
      BufferedReader mailReader = new BufferedReader (new FileReader (mailFile));
      BufferedReader destReader = new BufferedReader (new FileReader (destFile));
      
      // Lecture du sujet (premiere ligne)
      String  subject = mailReader.readLine ();
      // Lecture du contenu du message
      String  content = "";
      String  line;
      while ((line = mailReader.readLine ()) != null)
        content += line + "\n";       
      mailReader.close ();
      
      // Creation d'un ensemble de proprietes
      // et ouverture d'une session
      Properties props = new Properties();
      props.put ("mail.smtp.host", smpthost);
      Session session = Session.getDefaultInstance (props, null);
    
      String to;
      // Parcours de la liste de tous les destinataires 
      while ((to = destReader.readLine ()) != null)
        // Si le premier caractere est #, c'est une remarque
        if  (   to.length () > 0
             && to.charAt (0) != '#')
          try 
          {
            // Creation d'un message
            Message message = new MimeMessage (session);
            
            // Modification de l'expediteur
            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);
    }
  }
}
