Rev 13018 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.utils;import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.security.Security;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.activation.FileDataSource;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;public class EmailUtils {public static void main(String... args) throws IOException, MessagingException{System.out.println("Test Email Start");String[] sendTo = { "manish.sharma@shop2020.in"};EmailUtils emailUtils = new EmailUtils();//emailUtils.sendEmail(sendTo,"------DONT PANIC--------TEST EMAIL--------","FBA Sale ","build@shop2020.in","/home/Mobiles-Tablets-FBA-Sale.xls","/home/Mobiles-Tablets-FBA-body.html");String emailFromAddress = "build@shop2020.in";sendTo = new String[] {"rajneesh.arora@shop2020.in","chandan.kumar@shop2020.in","khushal.bhatia@shop2020.in","manish.sharma@shop2020.in"};String emailSubjectTxt = "FBA Sale (Except Mobiles and Tablets)";String AMAZON_FBA_SHEET = "/home/Except-Mobiles-Tablets-FBA-Sale.xls";String AMAZON_FBA_SHEET_BODY = "/home/Except-Mobiles-Tablets-FBA-body.html";emailUtils.sendEmail(sendTo, emailSubjectTxt, "", emailFromAddress,AMAZON_FBA_SHEET,AMAZON_FBA_SHEET_BODY );AMAZON_FBA_SHEET = "/home/FBA-Stock-Mobiles-Tablets-File.xls";String AMAZON_FBA_SHEET_HTML_BODY = "/home/FBA-Mobiles-Tablets-CONTENT-BODY-Stock-File.html";emailFromAddress = "build@shop2020.in";sendTo = new String[]{"rajneesh.arora@shop2020.in","chaitnaya.vats@shop2020.in","khushal.bhatia@shop2020.in","manoj.kumar@shop2020.in","manish.sharma@shop2020.in"};emailSubjectTxt = "FBA Stock Estimation Sheet (Mobiles and Tablets)";emailUtils.sendEmail(sendTo, emailSubjectTxt, "",emailFromAddress, AMAZON_FBA_SHEET,AMAZON_FBA_SHEET_HTML_BODY);AMAZON_FBA_SHEET = "/home/FBA-Except-Mobiles-Tablets-Stock-File.xls";AMAZON_FBA_SHEET_HTML_BODY = "/home/FBA-Except-Mobiles-Tablets-CONTENT-BODY-Stock-File.html";emailFromAddress = "build@shop2020.in";sendTo = new String[] {"rajneesh.arora@shop2020.in","chandan.kumar@shop2020.in","khushal.bhatia@shop2020.in","manish.sharma@shop2020.in"};emailSubjectTxt = "FBA Stock Estimation Sheet (Except Mobiles and Tablets)";emailUtils.sendEmail(sendTo, emailSubjectTxt, "",emailFromAddress, AMAZON_FBA_SHEET, AMAZON_FBA_SHEET_HTML_BODY);System.out.println("Test Email Sent");}/*** Utility method to send simple HTML email* @param session* @param toEmail* @param subject* @param body*/public void sendEmail(String recipients[], String subject, String body, String from, String filename,String htmlFileName) throws MessagingException {System.out.println("EmailUtils Email Start");try {BufferedReader bufferedReader = new BufferedReader(new FileReader(htmlFileName));StringBuffer htmlContent = new StringBuffer();String line = null;while((line =bufferedReader.readLine())!=null){htmlContent.append(line).append("\n");}Message msg = prepareMessage(recipients, subject, from);//Create the multi-part object to hold the text and attachment partsMultipart multipart = new MimeMultipart();MimeBodyPart htmlPart = new MimeBodyPart();htmlPart.setContent(htmlContent.toString(), "text/html; charset=utf-8");// create the message partMimeBodyPart messageBodyPart = new MimeBodyPart();//Part 1: Text messagemessageBodyPart.setText(body);multipart.addBodyPart(htmlPart);//Part 2: AttachmentmessageBodyPart = new MimeBodyPart();DataSource source = new FileDataSource(filename);messageBodyPart.setDataHandler(new DataHandler(source));String[] names = filename.split("/");messageBodyPart.setFileName(names[names.length - 1]);multipart.addBodyPart(messageBodyPart);// Put parts in messagemsg.setContent(multipart);Transport.send(msg);} catch (Exception e) {if (hasMultipleDomains(recipients)) {for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {sendEmail(subReceipients.toArray(new String[0]), subject, body, from , filename,htmlFileName);}return;}throw new MessagingException(e.getMessage(), e);}}private Message prepareMessage(String[] recipients, String subject,final String from) throws AddressException,MessagingException {Properties props = new Properties();props.put("mail.smtp.host","localhost");Session session = Session.getInstance(props, null);//Session session = Session.getDefaultInstance(props,null);Message msg = new MimeMessage(session);//Set the from addressInternetAddress addressFrom = new InternetAddress(from);msg.setFrom(addressFrom);InternetAddress[] addressTo = new InternetAddress[recipients.length];for (int i = 0; i < recipients.length; i++) {addressTo[i] = new InternetAddress(recipients[i]);}msg.setRecipients(Message.RecipientType.TO, addressTo);//Setting the Subjectmsg.setSubject(subject);return msg;}private boolean hasMultipleDomains(String[] recipients) {String domain = extractDomainFromEmailAddress(recipients[0]);for (String recipient : recipients) {if (!domain.equals(extractDomainFromEmailAddress(recipient))) {return true;}}return false;}private String extractDomainFromEmailAddress(String recipient) {return recipient.split("@")[1];}private Map<String, List<String>> getReceipientsPerDomain(String[] recipients) {Map<String, List<String>> result = new HashMap<String, List<String>>();for (String recipient : recipients) {String domain = extractDomainFromEmailAddress(recipient);if (!result.containsKey(domain)) {result.put(domain, new ArrayList<String>());}result.get(domain).add(recipient);}return result;}}