To use that sample code :
- Create a new java application project
- Add the JavaMail and JavaEmailer to the project
- Modify the sample code to replace some constants with appropriate values : Sender friendly name, Sender reply to email address and the extra SMTP Server information when an exception occure (optional)
- Create a text file for the text plain email message AND/OR create a text file for the html format email message
- Create a text file for the SMTP Servers csv file with each line like this :
- Create a text file for recipients email addresses with each line contains a valid email address
- Compile the java application project and run  it with appropriate params like this :
Usage :
program_name -m mails_list_csv_file_name
    -a accounts_list_csv_file_name
    -r recipients_count_per_email
    -s sender_threads_count
    -t recipients_type_to_cc_bcc
    -x email_message_text_file
    -h email_message_html_file
    -b email_subject

Here is the sample code with further informatins :

/*
 * This is an advanced sample of a program which use the EMMR Java Emailer Library
 * to send mass mails to recipients. Don't forget to add both JavaMail.jar
 * and JavaEmailer.jar to make this program work. You can download JavaMail from
 * here : http://www.oracle.com/technetwork/java/index-138643.html
 * The sample program introduce the SenderEngine Events listening and some other
 * features.
 * Usage :
 *          ejeladv -m mails_list_csv_file_name
 *                  -a accounts_list_csv_file_name
 *                  -r recipients_count_per_email
 *                  -s sender_threads_count
 *                  -t recipients_type_to_cc_bcc
 *                  -x email_message_text_file
 *                  -h email_message_html_file
 *                  -b email_subject
 */
// Sample program package
package ejel_adv_sample;
// import the EMMR Java Emailer Library package
import ejel.*;
// For reading text files
import java.io.*;
/**
 * To listen to the SenderEngine events, you need to implement the
 * ejel.EventListener interface in a class and register an object of that class
 * as a listener as we will see later in this sample code.
 * @author emmr.rida
 */
class MyEventListener implements EventListener
{
    /**
     * When an object of that class is registered as a listener to the SenderEngine
     * event listeners list, this function will be called every time an event happens
     * during the mass mailing operation.
     * @param sender Usually a SenderEngine object that called the function
     * @param evtId The ID of the event subject of the current call
     * @param evtParams The event params object. You have to cast this param to
     * the appropriate class type to have the appropriate event params.
     */
    public void eventListener(Object sender, EventManager.EventID evtId, EventArgs evtParams) {
        // Check the event ID
        switch(evtId) {
            case EID_STARTED: // The SenderEngine mass mailing operation is started
                System.out.println("SenderEngine started...");
                break;
            case EID_SENDING: // Here you can alter/modify/customize the email message content
                EmailSendingEventArgs esea = (EmailSendingEventArgs)evtParams;
                System.out.println("Sending email from : [" + ((SenderEngine)sender).getEmailAccountAt(esea.getAccountIndex()).getLogin() + "] to : " + esea.getRecipientAt(0).getEmailAddress());
                break;
            case EID_SENT: // An email message is successfully sent to recipient(s)
                EmailSentEventArgs sent = (EmailSentEventArgs)evtParams;
                System.out.println("Email sent from : [" + ((SenderEngine)sender).getEmailAccountAt(sent.getAccountIndex()).getLogin() + "] to : ");
                for(int i = 0; i < sent.getRecipientsCount(); i++) System.out.println("\t" + sent.getRecipientAt(i).getEmailAddress());
                break;
            case EID_FINISHING: // The SenderEngine is finishing the mass mailing operation
                System.out.println("SenderEngine is finishing...");
                break;
            case EID_FINISHED: // The SenderEngine is totally finished
                System.out.println("SenderEngine is finished...");
                break;
            case EID_EXCEPTION: // This informs the program that an exception occured while sending an email message
                ExceptionEventArgs ex = (ExceptionEventArgs)evtParams;
                System.out.println("Exception while sending from : ["+ ((SenderEngine)sender).getEmailAccountAt(ex.getAccountIndex()).getLogin() + "] to : " + ex.getRecipientAt(0).getEmailAddress());
                System.err.println("\t" + ex.getException().getMessage());
                ex.SetDisableAccountStatus(); // This will disable the email account used to send the failed email message. No further send using it!
                ex.setTryAgainStatus(); // This will tell the SenderEngine to try to send that email message again
                break;
            case EID_PAUSING: // The SenderEngine is trying to pause
                CancelEventArgs cea = (CancelEventArgs)evtParams;
                cea.cancel = false; // You can cancel the pause process and resume the execution of the SenderEngine
                System.out.println("SenderEngine is pausing...");
                break;
            case EID_PAUSED: // The SenderEngine is currently paused
                System.out.println("SenderEngine is paused!");
                break;
            case EID_RESUMED: // The SenderEngine resumed the execution process
                System.out.println("SenderEngine is resumed...");
                break;
            case EID_ABORTED: // An external code ordered the SenderEngine to abort the mass mailing operaiton
                System.out.println("SenderEngine is aborted...");
                break;
            case EID_EMAIL_ACCOUNT_NEEDED: // All email accounts are disabled and the SenderEngine needs a new one to continue the mass mailing operation
                System.out.println("Sender engine needs a new email account to resume the mass mailing operation...");
                EmailAccountNeededEventArgs eanea = (EmailAccountNeededEventArgs)evtParams;
                eanea.setAbortStatus(false); // Avoid aborting the mass mailing operaiton
                // Provide a new email account to the sender engine. If not provided, the SenderEngine will abort the mass mailing operaiton
                eanea.setNewEmailAccount(new EmailAccount("new_email_account@host_name;password;smtp_host.name;25;false;true;0;true"));
                System.out.println("New email Account provided to the sender engine.");
                break;
        }
    }
}
/**
 *
 * @author emmr
 */
public class Main
{
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws FileNotFoundException
    {
        // Default param values
        int recipientsPerEmail = 1;
        int senderThreads = 1;
        String mailFileName = "";
        String smtpFileName = "";
        String htmlMsgFileName = "";
        String txtMsgFileName = "";
        String subject = "(No Subject)";
        SenderEngine.RecipientsType recipientsType = SenderEngine.RecipientsType.TO;
        // Parse the program's params
        for(int i = 0; i < args.length; i++) {
            if(args[i].equals("-m")) if(args.length > i) mailFileName = args[i+1];
            if(args[i].equals("-a")) if(args.length > i) smtpFileName = args[i+1];
            if(args[i].equals("-h")) if(args.length > i) htmlMsgFileName = args[i+1];
            if(args[i].equals("-x")) if(args.length > i) txtMsgFileName = args[i+1];
            if(args[i].equals("-r")) if(args.length > i) recipientsPerEmail = Integer.parseInt(args[i+1]);
            if(args[i].equals("-s")) if(args.length > i) senderThreads = Integer.parseInt(args[i+1]);
            if(args[i].equals("-t")) if(args.length > i) recipientsType = SenderEngine.RecipientsType.valueOf(args[i+1]);
            if(args[i].equals("-b")) if(args.length > i) subject = args[i+1];
        }
        // Check the params
        if((mailFileName.length() == 0) || (smtpFileName.length() == 0) ||
                ((htmlMsgFileName.length() == 0) || (txtMsgFileName.length() == 0))) {
            printUsage();
            return;
        }
        // Read the html message from the provided file
        String htmlMsg = "";
        if(htmlMsgFileName.length() > 0) htmlMsg = readFileText(htmlMsgFileName);
        // Read the text message from the provided file
        String txtMsg = "";
        if(txtMsgFileName.length() > 0) txtMsg = readFileText(txtMsgFileName);
        // The user must provide at least a plain text or html format message
        if((htmlMsg == null) && (txtMsg == null)) {
            printUsage();
            return;
        }
        // Create the Email object
        Email email = new Email("JavaEmailer", "my_email@host.nam", false, subject, txtMsg, htmlMsg);
        email.setCharset("utf-8"); // The email content charset
        email.setContentTransferEncoding("quoted-printable"); // The email content transfer encoding
        // Create the sender engine
        SenderEngine engine = new ejel.SenderEngine(email, recipientsPerEmail, senderThreads);
        engine.setRecipientsType(recipientsType); // Sets the recipients type TO, CC or BCC
        /*
         * This will scan the html code of the message and convert file names to content ids
         * so as the email client will show the html message correctly. After converting files
         * to content IDs Email.convertFilesToContentIDs will return an array of Attachment
         * objects that you can attach to the email object.
         */
        if(htmlMsgFileName.length() > 0) {
            Attachment[] attachments = null;
            try {
                File htmlFile = new File(htmlMsgFileName);
                attachments = email.convertFilesToContentIDs(htmlFile.getParent());
                if(attachments.length > 0) engine.addAttachments(attachments);
            } catch(IOException ex) {
                ex.printStackTrace();
                return;
            }
        }
        /*
         * Read the file that contains a list of email addresses or recipients
         * to who the email will be sent. Each line of the file must contains a
         * single email address
         */
        try {
            BufferedReader br = new BufferedReader(new FileReader(mailFileName));
            String adrs = "";
            while((adrs = br.readLine()) != null) {
                engine.addRecipient(new Recipient(adrs));
            }
            br.close();
        } catch(Exception ex) {
            System.out.println("Error while reading the mailing list file...");
            ex.printStackTrace();
            return;
        }
        /*
         * This will read a SMTP Servers list informations. The file must complains
         * a CSV file without a header and each line must be composed like :
         * [login;password;smtp_server;port_number;use_ssl;needs_authentication;emails_per_hour;mono_connection]
         */
        try {
            BufferedReader br = new BufferedReader(new FileReader(smtpFileName));
            String smtp = "";
            while((smtp = br.readLine()) != null) {
                engine.addEmailAccount(new EmailAccount(smtp));
            }
            br.close();
        } catch(Exception ex) {
            System.out.println("Error while reading the email accounts list file...");
            ex.printStackTrace();
            return;
        }
        /*
         * Here, we will register a MyEventListener object as a listener of the
         * SenderEngine events. See the MyEventListener class code for more informations
         */
        MyEventListener listener = new MyEventListener();
        engine.registerEventListener(EventManager.EventID.EID_SENT, listener);
        engine.registerEventListener(EventManager.EventID.EID_STARTED, listener);
        engine.registerEventListener(EventManager.EventID.EID_FINISHING, listener);
        engine.registerEventListener(EventManager.EventID.EID_FINISHED, listener);
        engine.registerEventListener(EventManager.EventID.EID_EXCEPTION, listener);
        engine.registerEventListener(EventManager.EventID.EID_PAUSED, listener);
        engine.registerEventListener(EventManager.EventID.EID_PAUSING, listener);
        engine.registerEventListener(EventManager.EventID.EID_ABORTED, listener);
        engine.registerEventListener(EventManager.EventID.EID_RESUMED, listener);
        engine.registerEventListener(EventManager.EventID.EID_SENDING, listener);
        engine.registerEventListener(EventManager.EventID.EID_EMAIL_ACCOUNT_NEEDED, listener);
        // Start the SenderEngine
        engine.startEngine();
        /*
         * Wait for the SenderEngine to complete the mass mailing operation or
         * do something else while waiting for...
         * While SenderEngine is executing the mass mailing operation the listners
         * will be informed for each event that will happen during the operation.
         * See the MyEventListener for more informations.
         */
        try {
//            Thread.sleep(1000);
//            engine.pauseEngine();
//            Thread.sleep(60000);
//            engine.resumeEngine();
//            Thread.sleep(1000);
//            engine.abortEngine();
            while(!engine.isFinished()) Thread.sleep(1000);
        } catch(InterruptedException iex) {
            iex.printStackTrace();
        }
        // SenderEngine/The mass mailing operaiton is finished
        System.out.println("\n============\nProgram terminated.");
        return;
    }
    /**
     * A helper function that will read the content of a text file and return it
     * @param fileName Source file name
     * @return Text file content
     */
    public static String readFileText(String fileName)
    {
        String content = "";
        try {
            BufferedReader br = new BufferedReader(new FileReader(fileName));
            String s = "";
            while((s = br.readLine()) != null) {
                content += s;
            }
            br.close();
        } catch(Exception ex) {
            ex.printStackTrace();
            return null;
        }
        return content;
    }
    /**
     * This will print the command line usage for running the program
     */
    public static void printUsage()
    {
        System.out.println("Usage : ");
        System.out.println("\tjavaTestLab -m mails_list_csv_file_name \n\t\t-a accounts_list_csv_file_name");
        System.out.println("\t\t-r recipients_count_per_email \n\t\t-s sender_threads_count \n\t\t-t recipients_type_to_cc_bcc");
        System.out.println("\t\t-x email_message_text_file \n\t\t-h email_message_html_file \n\t\t-b email_subject");
    }
}

Don't hesitate to ask questions!
Best regards :)