Build
#
javac Bulkmail.java

Run
#
# get help
#
java Bulkmail -h
#
# test the program
#
java Bulkmail -D -s "subject" -i in.txt -l list.txt -c abs@well.com -f abs@well.com

in.txt
Hi, this a test message that should
be in the body of the email.

list.txt
tom@marslink.com
dick@marslink.com
harry@marslink.com
debi@dallas.tx.gov

Bulkmail.java
import java.io.*;
import java.util.*;

import javax.mail.*;
import javax.mail.event.*;
import javax.mail.internet.*;

// Bulkmail.java
//
// ABS 02003-02-22  copied from Detab.java
// ABS 02003-02-23  hacked, copied in code from MailClient.java
//

public class Bulkmail {

    static String mailHost;
    static String sourceEmail;
    static String destinationEmail;
    static String subjectString;
    static String ccString;
    static String bodyString;
    static boolean debugFlag;

    public static void main(String[] args) {

        String tempArg;
        String inputFileName = "input.txt";
        String listFileName = "list.txt";
        String thisLine;

        int i, j;

        // init defaults

        mailHost = "smtp.west.cox.net";
        sourceEmail = "abs@well.com";
        destinationEmail = "abs@well.com";
        ccString = "abs@well.com";
        subjectString = "test";
        debugFlag = false;
        bodyString = "\n";

        // parse args

        for (i = 0; i < args.length; i++) {
            tempArg = args[i];
            int size = tempArg.length();
            if ((tempArg.charAt(0) == '-') && (size > 1)) {               
                for (j = 1; j < size; j++) {
                    if (tempArg.charAt(j) == 'D') {
                        debugFlag = true;
                    } else if (tempArg.charAt(j) == 'h') {
                        help();
                        return;
                    } else if (tempArg.charAt(j) == 'c') {
                        tempArg = args[++i];
                        ccString = tempArg;
                    } else if (tempArg.charAt(j) == 'f') {
                        tempArg = args[++i];
                        sourceEmail = tempArg;
                    } else if (tempArg.charAt(j) == 'i') {
                        tempArg = args[++i];
                        inputFileName = tempArg;
                    } else if (tempArg.charAt(j) == 'l') {
                        tempArg = args[++i];
                        listFileName = tempArg;
                    } else if (tempArg.charAt(j) == 's') {
                        tempArg = args[++i];
                        subjectString = tempArg;
                    } else {
                        System.err.println(
                            "ERROR: Illegal flag: -"
                            + tempArg.charAt(j));
                        usage();
                        return;
                    }
                } // end for(j)
            } else {
                System.err.println(
                    "ERROR: Illegal argument: "
                    + tempArg);
                usage();
                return;
            }
        } // end for(i)

        // grab body

        // *************************************************************
           if (debugFlag) System.err.println(
               "DEBUG: about to process input file: " + inputFileName);
        // *************************************************************

        // process list

        // try/catch block

        try {
          BufferedReader bf = new BufferedReader(new FileReader(inputFileName));
          while ((thisLine = bf.readLine()) != null) { // while loop begins here
              bodyString = bodyString + thisLine + "\n";
          } // end while 
        } // end try
        catch (IOException e) {
          System.err.println("Error: " + e);
        }
        // *******************************************************************
        if (debugFlag) System.err.println(
            "DEBUG: bodyString: " + bodyString);
        // *******************************************************************

        // *******************************************************************
           if (debugFlag) System.err.println(
               "DEBUG: about to process list file: " + listFileName);
        // *******************************************************************

        // try/catch block

        try {
          BufferedReader br = new BufferedReader(new FileReader(listFileName));
          while ((thisLine = br.readLine()) != null) { // while loop begins here
              destinationEmail = thisLine;
              // *************************************************************
              if (debugFlag) System.err.println(
                  "DEBUG: got line: " + thisLine);
              if (debugFlag) System.err.println(
                  "DEBUG: destinationEmail: " + destinationEmail);
              // *************************************************************
              sendMessage(debugFlag);
          } // end while 
        } // end try
        catch (IOException e) {
          System.err.println("Error: " + e);
        }
  
    }

    private static void help() {
     System.err.println(" ");
     System.err.println("Bulkmail -- send an email to a bunch of addresses");
     System.err.println(" ");
     usage();
     System.err.println(" ");
     System.err.println("flag          meaning                     default");
     System.err.println("-----------  ---------------------------  ------------");
     System.err.println("-D           Debug mode                   false");
     System.err.println("-h           give help then exit          false");
     System.err.println("-c   cc address                   abs@well.com");
     System.err.println("-f   from address                 abs@well.com");
     System.err.println("-i     input filename               input.txt");
     System.err.println("-l     list filename                list.txt");
     System.err.println("-s   subject string               test");
     System.err.println(" ");
    }

    private static void usage() {
        System.err.println(
            "USAGE: Bulkmail [flags]");
    }

 static void sendMessage(boolean debugFlag) {
  Properties properties = new Properties();
  properties.put("mail.smtp.host",mailHost);
  properties.put("mail.from",sourceEmail);
  Session session = Session.getInstance(properties, null);
  try {
   Message message = new MimeMessage(session);
   InternetAddress[] address = 
    {new InternetAddress(destinationEmail)};
   InternetAddress[] ccAddress = 
    {new InternetAddress(ccString)};
   message.setRecipients(Message.RecipientType.TO, address);
   message.setRecipients(Message.RecipientType.CC, ccAddress);
   message.setFrom(new InternetAddress(sourceEmail));
   message.setSubject(subjectString);
   message.setContent(bodyString,"text/plain");

   // advice from a Java board

   Address[] addrs = message.getAllRecipients();

   Transport transport = session.getTransport(address[0]);
   transport.addConnectionListener(new ConnectionHandler());
   transport.addTransportListener(new TransportHandler());
   transport.connect();

   // advice from a Java board

   transport.sendMessage(message,addrs); // instead of address

  }catch(Exception e){
   // ************************************************************************
   if (debugFlag)
       System.err.println("ERROR: "
       + e.toString());
   // ************************************************************************
  }
 }
}

 class ConnectionHandler extends ConnectionAdapter {
  public void opened(ConnectionEvent e) {
  }
  public void disconnected(ConnectionEvent e) {
  }
  public void closed(ConnectionEvent e) {
  }
 }
 
 class TransportHandler extends TransportAdapter {
  public void messageDelivered(TransportEvent e) {
  }
  public void messageNotDelivered(TransportEvent e) {
  }
  public void messagePartiallyDelivered(TransportEvent e) {
  } 
 }

mail.java
void sendMessage() {
  Properties properties = new Properties();
  properties.put("mail.smtp.host",mailHost);
  properties.put("mail.from",source.getText());
  Session session = Session.getInstance(properties, null);
  try {
   Message message = new MimeMessage(session);
   InternetAddress[] address = 
    {new InternetAddress(destination.getText())};
   message.setRecipients(Message.RecipientType.TO, address);
   message.setFrom(new InternetAddress(source.getText()));
   message.setSubject(subject.getText());
   message.setContent(content.getText(),"text/plain");
   Transport transport = session.getTransport(address[0]);
   transport.addConnectionListener(new ConnectionHandler());
   transport.addTransportListener(new TransportHandler());
   transport.connect();
   transport.sendMessage(message,address);
  }catch(Exception e){
   status.setText(e.toString());
  }
 }

 class ConnectionHandler extends ConnectionAdapter {
  public void opened(ConnectionEvent e) {
   status.setText("Connection opened.");
  }
  public void disconnected(ConnectionEvent e) {
   status.setText("Connection disconnected.");  
  }
  public void closed(ConnectionEvent e) {
   status.setText("Connection closed.");  
  }
 }
 
 class TransportHandler extends TransportAdapter {
  public void messageDelivered(TransportEvent e) {
   status.setText("Message delivered.");  
  }
  public void messageNotDelivered(TransportEvent e) {
   status.setText("Message NOT delivered.");  
  }
  public void messagePartiallyDelivered(TransportEvent e) {
   status.setText("Message partially delivered.");  
  } 
 }