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 :
/**ThisisanadvancedsampleofaprogramwhichusetheEMMRJavaEmailerLibrary*tosendmassmailstorecipients.Don't forget to add both JavaMail.jar*andJavaEmailer.jartomakethisprogramwork.YoucandownloadJavaMailfrom*here:http://www.oracle.com/technetwork/java/index-138643.html*ThesampleprogramintroducetheSenderEngineEventslisteningandsomeother*features.*Usage:*ejeladv-mmails_list_csv_file_name*-aaccounts_list_csv_file_name*-rrecipients_count_per_email*-ssender_threads_count*-trecipients_type_to_cc_bcc*-xemail_message_text_file*-hemail_message_html_file*-bemail_subject*///Sampleprogrampackagepackageejel_adv_sample;//importtheEMMRJavaEmailerLibrarypackageimportejel.*;//Forreadingtextfilesimportjava.io.*;/***TolistentotheSenderEngineevents,youneedtoimplementthe*ejel.EventListenerinterfaceinaclassandregisteranobjectofthatclass* asalisteneraswewillseelaterinthissamplecode.*@authoremmr.rida*/classMyEventListenerimplementsEventListener{/***WhenanobjectofthatclassisregisteredasalistenertotheSenderEngine*eventlistenerslist,thisfunctionwillbecalledeverytimeaneventhappens*duringthemassmailingoperation.*@paramsenderUsuallyaSenderEngineobjectthatcalledthefunction*@paramevtIdTheIDoftheeventsubjectofthecurrentcall*@paramevtParamsTheeventparamsobject.Youhavetocastthisparamto*theappropriateclasstypetohavetheappropriateeventparams.*/publicvoideventListener(Objectsender,EventManager.EventIDevtId,EventArgsevtParams){//ChecktheeventIDswitch(evtId){caseEID_STARTED://TheSenderEnginemassmailingoperationisstartedSystem.out.println("SenderEngine started...");break;caseEID_SENDING://Hereyoucanalter/modify/customizetheemailmessagecontentEmailSendingEventArgsesea=(EmailSendingEventArgs)evtParams;System.out.println("Sending email from : ["+((SenderEngine)sender).getEmailAccountAt(esea.getAccountIndex()).getLogin()+"] to : "+esea.getRecipientAt(0).getEmailAddress());break;caseEID_SENT://Anemailmessageissuccessfullysenttorecipient(s)EmailSentEventArgssent=(EmailSentEventArgs)evtParams;System.out.println("Email sent from : ["+((SenderEngine)sender).getEmailAccountAt(sent.getAccountIndex()).getLogin()+"] to : ");for(inti=0;i<sent.getRecipientsCount();i++)System.out.println("\t"+sent.getRecipientAt(i).getEmailAddress());break;caseEID_FINISHING://TheSenderEngineisfinishingthemassmailingoperationSystem.out.println("SenderEngine is finishing...");break;caseEID_FINISHED://TheSenderEngineistotallyfinishedSystem.out.println("SenderEngine is finished...");break;caseEID_EXCEPTION://ThisinformstheprogramthatanexceptionoccuredwhilesendinganemailmessageExceptionEventArgsex=(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();//Thiswilldisabletheemailaccountusedtosendthefailedemailmessage.Nofurthersendusingit!ex.setTryAgainStatus();//ThiswilltelltheSenderEnginetotrytosendthatemailmessageagainbreak;caseEID_PAUSING://TheSenderEngineistryingtopauseCancelEventArgscea=(CancelEventArgs)evtParams;cea.cancel=false;//YoucancancelthepauseprocessandresumetheexecutionoftheSenderEngineSystem.out.println("SenderEngine is pausing...");break;caseEID_PAUSED://TheSenderEngineiscurrentlypausedSystem.out.println("SenderEngine is paused!");break;caseEID_RESUMED://TheSenderEngineresumedtheexecutionprocessSystem.out.println("SenderEngine is resumed...");break;caseEID_ABORTED://AnexternalcodeorderedtheSenderEnginetoabortthemassmailingoperaitonSystem.out.println("SenderEngine is aborted...");break;caseEID_EMAIL_ACCOUNT_NEEDED://AllemailaccountsaredisabledandtheSenderEngineneedsanewonetocontinuethemassmailingoperationSystem.out.println("Sender engine needs a new email account to resume the mass mailing operation...");EmailAccountNeededEventArgseanea=(EmailAccountNeededEventArgs)evtParams;eanea.setAbortStatus(false);//Avoidabortingthemassmailingoperaiton//Provideanewemailaccounttothesenderengine.Ifnotprovided,theSenderEnginewillabortthemassmailingoperaitoneanea.setNewEmailAccount(newEmailAccount("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;}}}/****@authoremmr*/publicclassMain{/***@paramargsthecommandlinearguments*/publicstaticvoidmain(String[]args)throwsFileNotFoundException{//DefaultparamvaluesintrecipientsPerEmail=1;intsenderThreads=1;StringmailFileName="";StringsmtpFileName="";StringhtmlMsgFileName="";StringtxtMsgFileName="";Stringsubject="(No Subject)";SenderEngine.RecipientsTyperecipientsType=SenderEngine.RecipientsType.TO;//Parsetheprogram's paramsfor(inti=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];}//Checktheparamsif((mailFileName.length()==0)||(smtpFileName.length()==0)||((htmlMsgFileName.length()==0)||(txtMsgFileName.length()==0))){printUsage();return;}//ReadthehtmlmessagefromtheprovidedfileStringhtmlMsg="";if(htmlMsgFileName.length()>0)htmlMsg=readFileText(htmlMsgFileName);//ReadthetextmessagefromtheprovidedfileStringtxtMsg="";if(txtMsgFileName.length()>0)txtMsg=readFileText(txtMsgFileName);//Theusermustprovideatleastaplaintextorhtmlformatmessageif((htmlMsg==null)&&(txtMsg==null)){printUsage();return;}//CreatetheEmailobjectEmailemail=newEmail("JavaEmailer","my_email@host.nam",false,subject,txtMsg,htmlMsg);email.setCharset("utf-8");//Theemailcontentcharsetemail.setContentTransferEncoding("quoted-printable");//Theemailcontenttransferencoding//CreatethesenderengineSenderEngineengine=newejel.SenderEngine(email,recipientsPerEmail,senderThreads);engine.setRecipientsType(recipientsType);//SetstherecipientstypeTO,CCorBCC/**Thiswillscanthehtmlcodeofthemessageandconvertfilenamestocontentids*soastheemailclientwillshowthehtmlmessagecorrectly.Afterconvertingfiles*tocontentIDsEmail.convertFilesToContentIDswillreturnanarrayofAttachment*objectsthatyoucanattachtotheemailobject.*/if(htmlMsgFileName.length()>0){Attachment[]attachments=null;try{FilehtmlFile=newFile(htmlMsgFileName);attachments=email.convertFilesToContentIDs(htmlFile.getParent());if(attachments.length>0)engine.addAttachments(attachments);}catch(IOExceptionex){ex.printStackTrace();return;}}/**Readthefilethatcontainsalistofemailaddressesorrecipients*towhotheemailwillbesent.Eachlineofthefilemustcontainsa*singleemailaddress*/try{BufferedReaderbr=newBufferedReader(newFileReader(mailFileName));Stringadrs="";while((adrs=br.readLine())!=null){engine.addRecipient(newRecipient(adrs));}br.close();}catch(Exceptionex){System.out.println("Error while reading the mailing list file...");ex.printStackTrace();return;}/**ThiswillreadaSMTPServerslistinformations.Thefilemustcomplains*aCSVfilewithoutaheaderandeachlinemustbecomposedlike:*[login;password;smtp_server;port_number;use_ssl;needs_authentication;emails_per_hour;mono_connection]*/try{BufferedReaderbr=newBufferedReader(newFileReader(smtpFileName));Stringsmtp="";while((smtp=br.readLine())!=null){engine.addEmailAccount(newEmailAccount(smtp));}br.close();}catch(Exceptionex){System.out.println("Error while reading the email accounts list file...");ex.printStackTrace();return;}/**Here,wewillregisteraMyEventListenerobjectasalistenerofthe*SenderEngineevents.SeetheMyEventListenerclasscodeformoreinformations*/MyEventListenerlistener=newMyEventListener();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);//StarttheSenderEngineengine.startEngine();/**WaitfortheSenderEnginetocompletethemassmailingoperationor*dosomethingelsewhilewaitingfor...*WhileSenderEngineisexecutingthemassmailingoperationthelistners*willbeinformedforeacheventthatwillhappenduringtheoperation.*SeetheMyEventListenerformoreinformations.*/try{//Thread.sleep(1000);//engine.pauseEngine();//Thread.sleep(60000);//engine.resumeEngine();//Thread.sleep(1000);//engine.abortEngine();while(!engine.isFinished())Thread.sleep(1000);}catch(InterruptedExceptioniex){iex.printStackTrace();}//SenderEngine/ThemassmailingoperaitonisfinishedSystem.out.println("\n============\nProgram terminated.");return;}/***Ahelperfunctionthatwillreadthecontentofatextfileandreturnit*@paramfileNameSourcefilename*@returnTextfilecontent*/publicstaticStringreadFileText(StringfileName){Stringcontent="";try{BufferedReaderbr=newBufferedReader(newFileReader(fileName));Strings="";while((s=br.readLine())!=null){content+=s;}br.close();}catch(Exceptionex){ex.printStackTrace();returnnull;}returncontent;}/***Thiswillprintthecommandlineusageforrunningtheprogram*/publicstaticvoidprintUsage(){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 :)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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 :
Don't hesitate to ask questions!
Best regards :)