Subversion Repositories SmartDukaan

Rev

Rev 11278 | Rev 13018 | Go to most recent revision | 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 = { "vikram.raghav@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","vikram.raghav@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","vikram.raghav@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","vikram.raghav@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 parts
                        Multipart multipart = new MimeMultipart();

                        MimeBodyPart htmlPart = new MimeBodyPart();

                        htmlPart.setContent(htmlContent.toString(), "text/html; charset=utf-8");

                        // create the message part
                        MimeBodyPart messageBodyPart = new MimeBodyPart();
                        //Part 1: Text message
                        messageBodyPart.setText(body);
                        multipart.addBodyPart(htmlPart);
                        //Part 2: Attachment
                        messageBodyPart = 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 message
                        msg.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 address
                InternetAddress 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 Subject
                msg.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;
        }



}