Package org.hoteia.qalingo.core.service

Source Code of org.hoteia.qalingo.core.service.EmailService

/**
* Most of the code in the Qalingo project is copyrighted Hoteia and licensed
* under the Apache License Version 2.0 (release version 0.8.0)
*         http://www.apache.org/licenses/LICENSE-2.0
*
*                   Copyright (c) Hoteia, 2012-2014
* http://www.hoteia.com - http://twitter.com/hoteia - contact@hoteia.com
*
*/
package org.hoteia.qalingo.core.service;

import java.io.IOException;
import java.net.URLEncoder;
import java.text.DateFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.UUID;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.exception.VelocityException;
import org.hoteia.qalingo.core.Constants;
import org.hoteia.qalingo.core.RequestConstants;
import org.hoteia.qalingo.core.dao.EmailDao;
import org.hoteia.qalingo.core.domain.Customer;
import org.hoteia.qalingo.core.domain.Email;
import org.hoteia.qalingo.core.domain.Localization;
import org.hoteia.qalingo.core.domain.MarketArea;
import org.hoteia.qalingo.core.domain.User;
import org.hoteia.qalingo.core.domain.enumtype.FoUrls;
import org.hoteia.qalingo.core.email.bean.AbandonedShoppingCartEmailBean;
import org.hoteia.qalingo.core.email.bean.AbstractEmailBean;
import org.hoteia.qalingo.core.email.bean.ContactEmailBean;
import org.hoteia.qalingo.core.email.bean.CustomerForgottenPasswordEmailBean;
import org.hoteia.qalingo.core.email.bean.CustomerNewAccountConfirmationEmailBean;
import org.hoteia.qalingo.core.email.bean.CustomerResetPasswordConfirmationEmailBean;
import org.hoteia.qalingo.core.email.bean.NewsletterEmailBean;
import org.hoteia.qalingo.core.email.bean.OrderConfirmationEmailBean;
import org.hoteia.qalingo.core.email.bean.OrderSentConfirmationEmailBean;
import org.hoteia.qalingo.core.email.bean.RetailerContactEmailBean;
import org.hoteia.qalingo.core.email.bean.UserForgottenPasswordEmailBean;
import org.hoteia.qalingo.core.email.bean.UserNewAccountConfirmationEmailBean;
import org.hoteia.qalingo.core.email.bean.UserResetPasswordConfirmationEmailBean;
import org.hoteia.qalingo.core.exception.EmailProcessException;
import org.hoteia.qalingo.core.i18n.message.CoreMessageSource;
import org.hoteia.qalingo.core.pojo.RequestData;
import org.hoteia.qalingo.core.util.impl.MimeMessagePreparatorImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.velocity.VelocityEngineUtils;

@Service("emailService")
@Transactional
public class EmailService {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    public static final String CURRENT_DATE = "currentDate";
    public static final String WORDING      = "wording";
    public static final String CUSTOMER     = "customer";

  @Autowired
  protected EmailDao emailDao;

  @Autowired
  protected UrlService urlService;
 
  @Autowired
  protected VelocityEngine velocityEngine;
   
  @Autowired
  protected CoreMessageSource coreMessageSource;
 
  @Autowired
  protected EngineSettingService engineSettingService;
 
  public Email getEmailById(final Long id, Object... params) {
    return emailDao.getEmailById(id, params);
  }

  public List<Email> findEmailByStatus(final String status, Object... params) {
    return emailDao.findEmailByStatus(status, params);
  }
 
  public List<Long> findIdsForEmailSync(final String type, Object... params) {
    return emailDao.findIdsForEmailSync(type, params);
  }
 
  public void saveOrUpdateEmail(final Email email) {
    emailDao.saveOrUpdateEmail(email);
  }
 
  public void saveOrUpdateEmail(final Email email, final MimeMessagePreparatorImpl mimeMessagePreparator) throws IOException {
    emailDao.saveEmail(email, mimeMessagePreparator);
  }
 
  public void deleteEmail(final Email email) {
    emailDao.deleteEmail(email);
  }
 
    /**
     * @throws Exception
     * @see org.hoteia.qalingo.core.service.EmailService#buildAndSaveContactMail(Localization localization, Customer customer, String velocityPath, ContactEmailBean contactEmailBean)
     */
    public void buildAndSaveContactMail(final RequestData requestData, final String velocityPath, final ContactEmailBean contactEmailBean) throws Exception {
        try {
          final Localization localization = requestData.getMarketAreaLocalization();
          final Locale locale = localization.getLocale();
         
          // SANITY CHECK
          checkEmailAddresses(contactEmailBean);
         
          Map<String, Object> model = new HashMap<String, Object>();
          DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.FULL, locale);
          java.sql.Timestamp currentDate = new java.sql.Timestamp((new java.util.Date()).getTime());
          model.put(CURRENT_DATE, dateFormatter.format(currentDate));
          model.put("contactEmailBean", contactEmailBean);
          model.put(WORDING, coreMessageSource.loadWording(Email.WORDING_SCOPE_EMAIL, locale));

            String fromAddress = handleFromAddress(contactEmailBean.getFromAddress(), locale);
            String fromName = handleFromAddress(contactEmailBean.getFromAddress(), locale);
            String toEmail = contactEmailBean.getToEmail();

          MimeMessagePreparatorImpl mimeMessagePreparator = getMimeMessagePreparator(requestData, Email.EMAIl_TYPE_CONTACT, model);
          mimeMessagePreparator.setTo(toEmail);
          mimeMessagePreparator.setFrom(fromAddress);
          mimeMessagePreparator.setFromName(fromName);
          mimeMessagePreparator.setReplyTo(fromAddress);
          Object[] parameters = {contactEmailBean.getLastname(), contactEmailBean.getFirstname()};
          mimeMessagePreparator.setSubject(coreMessageSource.getMessage("email.contact.email_subject", parameters, locale));
          mimeMessagePreparator.setHtmlContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "contact-html-content.vm", model));
          mimeMessagePreparator.setPlainTextContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "contact-text-content.vm", model));
         
          mimeMessagePreparator.getHtmlContent();
         
          Email email = new Email();
          email.setType(Email.EMAIl_TYPE_CONTACT);
          email.setStatus(Email.EMAIl_STATUS_PENDING);
          saveOrUpdateEmail(email, mimeMessagePreparator);
         
        } catch (MailException e) {
          logger.error("Error, can't save the message :", e);
          throw e;
        } catch (VelocityException e) {
          logger.error("Error, can't build the message :", e);
          throw e;
        } catch (IOException e) {
          logger.error("Error, can't serializable the message :", e);
          throw e;
        }
    }
   
    /**
     * @see org.hoteia.qalingo.core.service.EmailService#buildAndSaveRetailerContactMail(Localization localization, Customer customer, String velocityPath, RetailerContactEmailBean retailerContactEmailBean)
     */
    public void buildAndSaveRetailerContactMail(final RequestData requestData, final Customer customer, final String velocityPath, final RetailerContactEmailBean retailerContactEmailBean) throws Exception {
        try {
          final Localization localization = requestData.getMarketAreaLocalization();
          final Locale locale = localization.getLocale();
         
          // SANITY CHECK
          checkEmailAddresses(retailerContactEmailBean);
         
          Map<String, Object> model = new HashMap<String, Object>();
          DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.FULL, locale);
          java.sql.Timestamp currentDate = new java.sql.Timestamp((new java.util.Date()).getTime());
          model.put(CURRENT_DATE, dateFormatter.format(currentDate));
          model.put(CUSTOMER, customer);
          model.put("retailerContactEmailBean", retailerContactEmailBean);
          model.put(WORDING, coreMessageSource.loadWording(Email.WORDING_SCOPE_EMAIL, locale));

            String fromAddress = handleFromAddress(retailerContactEmailBean.getFromAddress(), locale);
            String fromName = handleFromName(retailerContactEmailBean.getFromName(), locale);
            String toEmail = retailerContactEmailBean.getToEmail();
           
          MimeMessagePreparatorImpl mimeMessagePreparator = getMimeMessagePreparator(requestData, Email.EMAIl_TYPE_RETAILER_CONTACT, model);
          mimeMessagePreparator.setTo(toEmail);
          mimeMessagePreparator.setFrom(fromAddress);
          mimeMessagePreparator.setFromName(fromName);
          mimeMessagePreparator.setReplyTo(fromAddress);
          Object[] parameters = {retailerContactEmailBean.getLastname(), retailerContactEmailBean.getFirstname()};
          mimeMessagePreparator.setSubject(coreMessageSource.getMessage("email.retailer_contact.email_subject", parameters, locale));
          mimeMessagePreparator.setHtmlContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "retailer-contact-html-content.vm", model));
          mimeMessagePreparator.setPlainTextContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "retailer-contact-text-content.vm", model));
         
          Email email = new Email();
          email.setType(Email.EMAIl_TYPE_RETAILER_CONTACT);
          email.setStatus(Email.EMAIl_STATUS_PENDING);
          saveOrUpdateEmail(email, mimeMessagePreparator);
         
        } catch (MailException e) {
          logger.error("Error, can't save the message :", e);
          throw e;
        } catch (VelocityException e) {
          logger.error("Error, can't build the message :", e);
          throw e;
        } catch (IOException e) {
          logger.error("Error, can't serializable the message :", e);
          throw e;
        }
    }
   
    /**
     * @see org.hoteia.qalingo.core.service.EmailService#saveAndBuildNewsletterSubscriptionnConfirmationMail(Localization localization, Customer customer, String velocityPath, NewsletterEmailBean newsletterEmailBean)
     */
    public void saveAndBuildNewsletterSubscriptionnConfirmationMail(final RequestData requestData, final String velocityPath,
                                     final NewsletterEmailBean newsletterEmailBean) throws Exception {
        try {
          final MarketArea marketArea = requestData.getMarketArea();
          final Localization localization = requestData.getMarketAreaLocalization();
          final Locale locale = localization.getLocale();
         
          // SANITY CHECK
          checkEmailAddresses(newsletterEmailBean);
         
          Map<String, Object> model = new HashMap<String, Object>();
         
          DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.FULL, locale);
          java.sql.Timestamp currentDate = new java.sql.Timestamp((new java.util.Date()).getTime());
          model.put(CURRENT_DATE, dateFormatter.format(currentDate));
          model.put("newsletterEmailBean", newsletterEmailBean);
          model.put(WORDING, coreMessageSource.loadWording(Email.WORDING_SCOPE_EMAIL, locale));

        Map<String, String> urlParams = new HashMap<String, String>();
        urlParams.put(RequestConstants.REQUEST_PARAMETER_NEWSLETTER_EMAIL, URLEncoder.encode(newsletterEmailBean.getToEmail(), Constants.ANSI));
        urlParams.put(RequestConstants.REQUEST_PARAMETER_MARKET_AREA_CODE, marketArea.getCode());
        String unsubscribeUrl = urlService.generateUrl(FoUrls.NEWSLETTER_UNREGISTER, requestData, urlParams);
        String fullUnsubscribeUrl = urlService.buildAbsoluteUrl(requestData, unsubscribeUrl);
       
          model.put("unsubscribeUrlOrEmail", fullUnsubscribeUrl);

          String fromAddress = handleFromAddress(newsletterEmailBean.getFromAddress(), locale);
            String fromName = handleFromName(newsletterEmailBean.getFromName(), locale);
            String toEmail = newsletterEmailBean.getToEmail();
           
          MimeMessagePreparatorImpl mimeMessagePreparator = getMimeMessagePreparator(requestData, Email.EMAIl_TYPE_NEWSLETTER_SUBSCRIPTION, model);
          mimeMessagePreparator.setUnsubscribeUrlOrEmail(fullUnsubscribeUrl);
          mimeMessagePreparator.setTo(toEmail);
          mimeMessagePreparator.setFrom(fromAddress);
          mimeMessagePreparator.setFromName(fromName);
          mimeMessagePreparator.setReplyTo(fromAddress);
          Object[] parameters = {};
          mimeMessagePreparator.setSubject(coreMessageSource.getMessage("email.newsletter_subscription.email_subject", parameters, locale));
          mimeMessagePreparator.setHtmlContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "newsletter-subscription-confirmation-html-content.vm", model));
          mimeMessagePreparator.setPlainTextContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "newsletter-subscription-confirmation-text-content.vm", model));
         
          Email email = new Email();
          email.setType(Email.EMAIl_TYPE_NEWSLETTER_SUBSCRIPTION);
          email.setStatus(Email.EMAIl_STATUS_PENDING);
          saveOrUpdateEmail(email, mimeMessagePreparator);
         
        } catch (MailException e) {
          logger.error("Error, can't save the message :", e);
          throw e;
        } catch (VelocityException e) {
          logger.error("Error, can't build the message :", e);
          throw e;
        } catch (IOException e) {
          logger.error("Error, can't serializable the message :", e);
          throw e;
        }
    }
   
    /**
     * @see org.hoteia.qalingo.core.service.EmailService#saveAndBuildNewsletterUnsubscriptionConfirmationMail(Localization localization, Customer customer, String velocityPath, NewsletterEmailBean newsletterEmailBean)
     */
    public void saveAndBuildNewsletterUnsubscriptionConfirmationMail(final RequestData requestData, final String velocityPath,
                                     final NewsletterEmailBean newsletterEmailBean) throws Exception {
        try {
          final Localization localization = requestData.getMarketAreaLocalization();
          final Locale locale = localization.getLocale();
         
          // SANITY CHECK
          checkEmailAddresses(newsletterEmailBean);
         
          Map<String, Object> model = new HashMap<String, Object>();
         
          DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.FULL, locale);
          java.sql.Timestamp currentDate = new java.sql.Timestamp((new java.util.Date()).getTime());
          model.put(CURRENT_DATE, dateFormatter.format(currentDate));
          model.put("newsletterEmailBean", newsletterEmailBean);
          model.put(WORDING, coreMessageSource.loadWording(Email.WORDING_SCOPE_EMAIL, locale));

      Map<String, String> urlParams = new HashMap<String, String>();
      urlParams.put(RequestConstants.REQUEST_PARAMETER_NEWSLETTER_EMAIL, URLEncoder.encode(newsletterEmailBean.getToEmail(), Constants.ANSI));
      String subscribeUrl = urlService.generateUrl(FoUrls.NEWSLETTER_REGISTER, requestData, urlParams);
          model.put("subscribeUrl", urlService.buildAbsoluteUrl(requestData, subscribeUrl));
         
        String unsubscribeUrl = urlService.generateUrl(FoUrls.NEWSLETTER_UNREGISTER, requestData, urlParams);
        String fullUnsubscribeUrl = urlService.buildAbsoluteUrl(requestData, unsubscribeUrl);
       
          model.put("unsubscribeUrlOrEmail", fullUnsubscribeUrl);
         
          String fromAddress = handleFromAddress(newsletterEmailBean.getFromAddress(), locale);
            String fromName = handleFromName(newsletterEmailBean.getFromName(), locale);
            String toEmail = newsletterEmailBean.getToEmail();
           
          MimeMessagePreparatorImpl mimeMessagePreparator = getMimeMessagePreparator(requestData, Email.EMAIl_TYPE_NEWSLETTER_SUBSCRIPTION, model);
//          mimeMessagePreparator.setUnsubscribeUrlOrEmail(fullUnsubscribeUrl);
          mimeMessagePreparator.setTo(toEmail);
          mimeMessagePreparator.setFrom(fromAddress);
          mimeMessagePreparator.setFromName(fromName);
          mimeMessagePreparator.setReplyTo(fromAddress);
          Object[] parameters = {};
          mimeMessagePreparator.setSubject(coreMessageSource.getMessage("email.newsletter_unsubscription.email_subject", parameters, locale));
          mimeMessagePreparator.setHtmlContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "newsletter-unsubscription-confirmation-html-content.vm", model));
          mimeMessagePreparator.setPlainTextContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "newsletter-unsubscription-confirmation-text-content.vm", model));
         
          Email email = new Email();
          email.setType(Email.EMAIl_TYPE_NEWSLETTER_SUBSCRIPTION);
          email.setStatus(Email.EMAIl_STATUS_PENDING);
          saveOrUpdateEmail(email, mimeMessagePreparator);
         
        } catch (MailException e) {
          logger.error("Error, can't save the message :", e);
          throw e;
        } catch (VelocityException e) {
          logger.error("Error, can't build the message :", e);
          throw e;
        } catch (IOException e) {
          logger.error("Error, can't serializable the message :", e);
          throw e;
        }
    }
   
    /**
     * @see org.hoteia.qalingo.core.service.EmailService#buildAndSaveCustomerNewAccountMail(Localization localization, Customer customer, String velocityPath, CustomerNewAccountConfirmationEmailBean customerNewAccountConfirmationEmailBean)
     */
    public void buildAndSaveCustomerNewAccountMail(final RequestData requestData, final String velocityPath,
                             final CustomerNewAccountConfirmationEmailBean customerNewAccountConfirmationEmailBean) throws Exception {
        try {
          final Localization localization = requestData.getMarketAreaLocalization();
          final Locale locale = localization.getLocale();
         
          // SANITY CHECK
          checkEmailAddresses(customerNewAccountConfirmationEmailBean);
         
          Map<String, Object> model = new HashMap<String, Object>();
         
          DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.FULL, locale);
          java.sql.Timestamp currentDate = new java.sql.Timestamp((new java.util.Date()).getTime());
          model.put(CURRENT_DATE, dateFormatter.format(currentDate));
          model.put("customerNewAccountConfirmationEmailBean", customerNewAccountConfirmationEmailBean);
          model.put(WORDING, coreMessageSource.loadWording(Email.WORDING_SCOPE_EMAIL, locale));

      Map<String, String> urlParams = new HashMap<String, String>();
      urlParams.put(RequestConstants.REQUEST_PARAMETER_NEW_CUSTOMER_VALIDATION_EMAIL, URLEncoder.encode(customerNewAccountConfirmationEmailBean.getEmail(), Constants.ANSI));
      urlParams.put(RequestConstants.REQUEST_PARAMETER_NEW_CUSTOMER_VALIDATION_TOKEN, UUID.randomUUID().toString());
      String resetPasswordUrl = urlService.generateUrl(FoUrls.CUSTOMER_NEW_ACCOUNT_VALIDATION, requestData, urlParams);
          model.put("newCustomerValidationUrl", urlService.buildAbsoluteUrl(requestData, resetPasswordUrl));

          String fromAddress = handleFromAddress(customerNewAccountConfirmationEmailBean.getFromAddress(), locale);
            String fromName = handleFromName(customerNewAccountConfirmationEmailBean.getFromName(), locale);
            String toEmail = customerNewAccountConfirmationEmailBean.getToEmail();
           
          MimeMessagePreparatorImpl mimeMessagePreparator = getMimeMessagePreparator(requestData, Email.EMAIl_TYPE_NEW_ACCOUNT_CONFIRMATION, model);
          mimeMessagePreparator.setTo(toEmail);
          mimeMessagePreparator.setFrom(fromAddress);
          mimeMessagePreparator.setFromName(fromName);
          mimeMessagePreparator.setReplyTo(fromAddress);
          Object[] parameters = {customerNewAccountConfirmationEmailBean.getLastname(), customerNewAccountConfirmationEmailBean.getFirstname()};
          mimeMessagePreparator.setSubject(coreMessageSource.getMessage("email.new_account.email_subject", parameters, locale));
          mimeMessagePreparator.setHtmlContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "new-account-confirmation-html-content.vm", model));
          mimeMessagePreparator.setPlainTextContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "new-account-confirmation-text-content.vm", model));
         
          Email email = new Email();
          email.setType(Email.EMAIl_TYPE_NEW_ACCOUNT_CONFIRMATION);
          email.setStatus(Email.EMAIl_STATUS_PENDING);
          saveOrUpdateEmail(email, mimeMessagePreparator);
         
        } catch (MailException e) {
          logger.error("Error, can't save the message :", e);
          throw e;
        } catch (VelocityException e) {
          logger.error("Error, can't build the message :", e);
          throw e;
        } catch (IOException e) {
          logger.error("Error, can't serializable the message :", e);
          throw e;
        }
    }
   
    /**
     * @throws Exception
     * @see org.hoteia.qalingo.core.service.EmailService#buildAndSaveCustomerForgottenPasswordMail(Localization localization, Customer customer, String velocityPath, CustomerForgottenPasswordEmailBean customerForgottenPasswordEmailBean)
     */
    public void buildAndSaveCustomerForgottenPasswordMail(final RequestData requestData, final Customer customer, final String velocityPath,
                                final CustomerForgottenPasswordEmailBean customerForgottenPasswordEmailBean) throws Exception {
        try {
          final Localization localization = requestData.getMarketAreaLocalization();
          final Locale locale = localization.getLocale();
         
          // SANITY CHECK
          checkEmailAddresses(customerForgottenPasswordEmailBean);
         
          Map<String, Object> model = new HashMap<String, Object>();
         
          DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.FULL, locale);
          java.sql.Timestamp currentDate = new java.sql.Timestamp((new java.util.Date()).getTime());
          model.put(CURRENT_DATE, dateFormatter.format(currentDate));
          model.put(CUSTOMER, customer);
          model.put("customerForgottenPasswordEmailBean", customerForgottenPasswordEmailBean);
          model.put(WORDING, coreMessageSource.loadWording(Email.WORDING_SCOPE_EMAIL, locale));

      Map<String, String> urlParams = new HashMap<String, String>();
      urlParams.put(RequestConstants.REQUEST_PARAMETER_PASSWORD_RESET_EMAIL, URLEncoder.encode(customer.getEmail(), Constants.ANSI));
      urlParams.put(RequestConstants.REQUEST_PARAMETER_PASSWORD_RESET_TOKEN, customerForgottenPasswordEmailBean.getToken());
      String resetPasswordUrl = urlService.generateUrl(FoUrls.RESET_PASSWORD, requestData, urlParams);
          model.put("activeChangePasswordUrl", urlService.buildAbsoluteUrl(requestData, resetPasswordUrl));
         
      String canceResetPasswordUrl = urlService.generateUrl(FoUrls.CANCEL_RESET_PASSWORD, requestData, urlParams);
          model.put("cancelChangePasswordUrl", urlService.buildAbsoluteUrl(requestData, canceResetPasswordUrl));
         
          model.put("customerForgottenPasswordEmailBean", customerForgottenPasswordEmailBean);

          String fromAddress = handleFromAddress(customerForgottenPasswordEmailBean.getFromAddress(), locale);
            String fromName = handleFromName(customerForgottenPasswordEmailBean.getFromName(), locale);
            String toEmail = customer.getEmail();
           
          MimeMessagePreparatorImpl mimeMessagePreparator = getMimeMessagePreparator(requestData, Email.EMAIl_TYPE_FORGOTTEN_PASSWORD, model);
          mimeMessagePreparator.setTo(toEmail);
          mimeMessagePreparator.setFrom(fromAddress);
          mimeMessagePreparator.setFromName(fromName);
          mimeMessagePreparator.setReplyTo(fromAddress);
          Object[] parameters = {customer.getLastname(), customer.getFirstname()};
          mimeMessagePreparator.setSubject(coreMessageSource.getMessage("email.forgotten_password.email_subject", parameters, locale));
          mimeMessagePreparator.setHtmlContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "forgotten-password-html-content.vm", model));
          mimeMessagePreparator.setPlainTextContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "forgotten-password-text-content.vm", model));
         
          Email email = new Email();
          email.setType(Email.EMAIl_TYPE_FORGOTTEN_PASSWORD);
          email.setStatus(Email.EMAIl_STATUS_PENDING);
          saveOrUpdateEmail(email, mimeMessagePreparator);
         
        } catch (MailException e) {
          logger.error("Error, can't save the message :", e);
          throw e;
        } catch (VelocityException e) {
          logger.error("Error, can't build the message :", e);
          throw e;
        } catch (IOException e) {
          logger.error("Error, can't serializable the message :", e);
          throw e;
        }
    }
   
    /**
     * @see org.hoteia.qalingo.core.service.EmailService#buildAndSaveCustomerResetPasswordConfirmationMail(Localization localization, Customer customer, String velocityPath, CustomerResetPasswordConfirmationEmailBean customerResetPasswordConfirmationEmailBean)
     */
    public void buildAndSaveCustomerResetPasswordConfirmationMail(final RequestData requestData, final Customer customer, final String velocityPath,
                                    final CustomerResetPasswordConfirmationEmailBean customerResetPasswordConfirmationEmailBean) throws Exception {
        try {
          final Localization localization = requestData.getMarketAreaLocalization();
          final Locale locale = localization.getLocale();
         
          // SANITY CHECK
          checkEmailAddresses(customerResetPasswordConfirmationEmailBean);
         
          Map<String, Object> model = new HashMap<String, Object>();
         
          DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.FULL, locale);
          java.sql.Timestamp currentDate = new java.sql.Timestamp((new java.util.Date()).getTime());
          model.put(CURRENT_DATE, dateFormatter.format(currentDate));
          model.put(CUSTOMER, customer);
          model.put("customerResetPasswordConfirmationEmailBean", customerResetPasswordConfirmationEmailBean);
          model.put(WORDING, coreMessageSource.loadWording(Email.WORDING_SCOPE_EMAIL, locale));

      String loginUrl = urlService.generateUrl(FoUrls.LOGIN, requestData);
          model.put("loginUrl", urlService.buildAbsoluteUrl(requestData, loginUrl));
         
          String fromAddress = handleFromAddress(customerResetPasswordConfirmationEmailBean.getFromAddress(), locale);
            String fromName = handleFromName(customerResetPasswordConfirmationEmailBean.getFromName(), locale);
            String toEmail = customer.getEmail();
           
          MimeMessagePreparatorImpl mimeMessagePreparator = getMimeMessagePreparator(requestData, Email.EMAIl_TYPE_RESET_PASSWORD_CONFIRMATION, model);
          mimeMessagePreparator.setTo(toEmail);
          mimeMessagePreparator.setFrom(fromAddress);
          mimeMessagePreparator.setFromName(fromName);
          mimeMessagePreparator.setReplyTo(fromAddress);
          Object[] parameters = {customer.getLastname(), customer.getFirstname()};
          mimeMessagePreparator.setSubject(coreMessageSource.getMessage("email.reset_password_confirmation.email_subject", parameters, locale));
          mimeMessagePreparator.setHtmlContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "reset-password-confirmation-html-content.vm", model));
          mimeMessagePreparator.setPlainTextContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "reset-password-confirmation-text-content.vm", model));
         
          Email email = new Email();
          email.setType(Email.EMAIl_TYPE_RESET_PASSWORD_CONFIRMATION);
          email.setStatus(Email.EMAIl_STATUS_PENDING);
          saveOrUpdateEmail(email, mimeMessagePreparator);
         
        } catch (MailException e) {
          logger.error("Error, can't save the message :", e);
          throw e;
        } catch (VelocityException e) {
          logger.error("Error, can't build the message :", e);
          throw e;
        } catch (IOException e) {
          logger.error("Error, can't serializable the message :", e);
          throw e;
        }
    }
   
    /**
     * @see org.hoteia.qalingo.core.service.EmailService#buildAndSaveUserNewAccountMail(Localization localization, User user, String velocityPath, UserNewAccountConfirmationEmailBean userNewAccountConfirmationEmailBean)
     */
    public void buildAndSaveUserNewAccountMail(final RequestData requestData, final String velocityPath,
                                                   final UserNewAccountConfirmationEmailBean userNewAccountConfirmationEmailBean) throws Exception {
        try {
            final Localization localization = requestData.getMarketAreaLocalization();
            final Locale locale = localization.getLocale();
           
            // SANITY CHECK
            checkEmailAddresses(userNewAccountConfirmationEmailBean);
           
            Map<String, Object> model = new HashMap<String, Object>();
         
            DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.FULL, locale);
            java.sql.Timestamp currentDate = new java.sql.Timestamp((new java.util.Date()).getTime());
            model.put(CURRENT_DATE, dateFormatter.format(currentDate));
            model.put("userNewAccountConfirmationEmailBean", userNewAccountConfirmationEmailBean);
            model.put(WORDING, coreMessageSource.loadWording(Email.WORDING_SCOPE_EMAIL, locale));

            Map<String, String> urlParams = new HashMap<String, String>();
            urlParams.put(RequestConstants.REQUEST_PARAMETER_NEW_CUSTOMER_VALIDATION_EMAIL, URLEncoder.encode(userNewAccountConfirmationEmailBean.getEmail(), Constants.ANSI));
            urlParams.put(RequestConstants.REQUEST_PARAMETER_NEW_CUSTOMER_VALIDATION_TOKEN, UUID.randomUUID().toString());
            String resetPasswordUrl = urlService.generateUrl(FoUrls.CUSTOMER_NEW_ACCOUNT_VALIDATION, requestData, urlParams);
            model.put("newUserValidationUrl", urlService.buildAbsoluteUrl(requestData, resetPasswordUrl));

            String fromAddress = handleFromAddress(userNewAccountConfirmationEmailBean.getFromAddress(), locale);
            String fromName = handleFromName(userNewAccountConfirmationEmailBean.getFromName(), locale);
            String toEmail = userNewAccountConfirmationEmailBean.getToEmail();
           
            MimeMessagePreparatorImpl mimeMessagePreparator = getMimeMessagePreparator(requestData, Email.EMAIl_TYPE_NEW_ACCOUNT_CONFIRMATION, model);
            mimeMessagePreparator.setTo(toEmail);
            mimeMessagePreparator.setFrom(fromAddress);
            mimeMessagePreparator.setFromName(fromName);
            mimeMessagePreparator.setReplyTo(fromAddress);
            Object[] parameters = {userNewAccountConfirmationEmailBean.getLastname(), userNewAccountConfirmationEmailBean.getFirstname()};
            mimeMessagePreparator.setSubject(coreMessageSource.getMessage("email.new_account.email_subject", parameters, locale));
            mimeMessagePreparator.setHtmlContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "new-account-confirmation-html-content.vm", model));
            mimeMessagePreparator.setPlainTextContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "new-account-confirmation-text-content.vm", model));
           
            Email email = new Email();
            email.setType(Email.EMAIl_TYPE_NEW_ACCOUNT_CONFIRMATION);
            email.setStatus(Email.EMAIl_STATUS_PENDING);
            saveOrUpdateEmail(email, mimeMessagePreparator);
           
        } catch (MailException e) {
            logger.error("Error, can't save the message :", e);
            throw e;
        } catch (VelocityException e) {
            logger.error("Error, can't build the message :", e);
            throw e;
        } catch (IOException e) {
            logger.error("Error, can't serializable the message :", e);
            throw e;
        }
    }
   
    /**
     * @throws Exception
     * @see org.hoteia.qalingo.core.service.EmailService#buildAndSaveUserForgottenPasswordMail(Localization localization, User user, String velocityPath, UserForgottenPasswordEmailBean userForgottenPasswordEmailBean)
     */
    public void buildAndSaveUserForgottenPasswordMail(final RequestData requestData, final User user, final String velocityPath,
                                                          final UserForgottenPasswordEmailBean userForgottenPasswordEmailBean) throws Exception {
        try {
            final Localization localization = requestData.getMarketAreaLocalization();
            final Locale locale = localization.getLocale();
           
            // SANITY CHECK
            checkEmailAddresses(userForgottenPasswordEmailBean);
           
            Map<String, Object> model = new HashMap<String, Object>();
         
            DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.FULL, locale);
            java.sql.Timestamp currentDate = new java.sql.Timestamp((new java.util.Date()).getTime());
            model.put(CURRENT_DATE, dateFormatter.format(currentDate));
            model.put(CUSTOMER, user);
            model.put("userForgottenPasswordEmailBean", userForgottenPasswordEmailBean);
            model.put(WORDING, coreMessageSource.loadWording(Email.WORDING_SCOPE_EMAIL, locale));

            Map<String, String> urlParams = new HashMap<String, String>();
            urlParams.put(RequestConstants.REQUEST_PARAMETER_PASSWORD_RESET_EMAIL, URLEncoder.encode(user.getEmail(), Constants.ANSI));
            urlParams.put(RequestConstants.REQUEST_PARAMETER_PASSWORD_RESET_TOKEN, userForgottenPasswordEmailBean.getToken());
            String resetPasswordUrl = urlService.generateUrl(FoUrls.RESET_PASSWORD, requestData, urlParams);
            model.put("activeChangePasswordUrl", urlService.buildAbsoluteUrl(requestData, resetPasswordUrl));
           
            String canceResetPasswordUrl = urlService.generateUrl(FoUrls.CANCEL_RESET_PASSWORD, requestData, urlParams);
            model.put("cancelChangePasswordUrl", urlService.buildAbsoluteUrl(requestData, canceResetPasswordUrl));
           
            model.put("userForgottenPasswordEmailBean", userForgottenPasswordEmailBean);

            String fromAddress = handleFromAddress(userForgottenPasswordEmailBean.getFromAddress(), locale);
            String fromName = handleFromName(userForgottenPasswordEmailBean.getFromName(), locale);
            String toEmail = user.getEmail();
           
            MimeMessagePreparatorImpl mimeMessagePreparator = getMimeMessagePreparator(requestData, Email.EMAIl_TYPE_FORGOTTEN_PASSWORD, model);
            mimeMessagePreparator.setTo(toEmail);
            mimeMessagePreparator.setFrom(fromAddress);
            mimeMessagePreparator.setFromName(fromName);
            mimeMessagePreparator.setReplyTo(fromAddress);
            Object[] parameters = {user.getLastname(), user.getFirstname()};
            mimeMessagePreparator.setSubject(coreMessageSource.getMessage("email.forgotten_password.email_subject", parameters, locale));
            mimeMessagePreparator.setHtmlContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "forgotten-password-html-content.vm", model));
            mimeMessagePreparator.setPlainTextContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "forgotten-password-text-content.vm", model));
           
            Email email = new Email();
            email.setType(Email.EMAIl_TYPE_FORGOTTEN_PASSWORD);
            email.setStatus(Email.EMAIl_STATUS_PENDING);
            saveOrUpdateEmail(email, mimeMessagePreparator);
           
        } catch (MailException e) {
            logger.error("Error, can't save the message :", e);
            throw e;
        } catch (VelocityException e) {
            logger.error("Error, can't build the message :", e);
            throw e;
        } catch (IOException e) {
            logger.error("Error, can't serializable the message :", e);
            throw e;
        }
    }
   
    /**
     * @see org.hoteia.qalingo.core.service.EmailService#buildAndSaveUserResetPasswordConfirmationMail(Localization localization, User user, String velocityPath, UserResetPasswordConfirmationEmailBean userResetPasswordConfirmationEmailBean)
     */
    public void buildAndSaveUserResetPasswordConfirmationMail(final RequestData requestData, final User user, final String velocityPath,
                                                                  final UserResetPasswordConfirmationEmailBean userResetPasswordConfirmationEmailBean) throws Exception {
        try {
            final Localization localization = requestData.getMarketAreaLocalization();
            final Locale locale = localization.getLocale();
           
            // SANITY CHECK
            checkEmailAddresses(userResetPasswordConfirmationEmailBean);
           
            Map<String, Object> model = new HashMap<String, Object>();
         
            DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.FULL, locale);
            java.sql.Timestamp currentDate = new java.sql.Timestamp((new java.util.Date()).getTime());
            model.put(CURRENT_DATE, dateFormatter.format(currentDate));
            model.put(CUSTOMER, user);
            model.put("userResetPasswordConfirmationEmailBean", userResetPasswordConfirmationEmailBean);
            model.put(WORDING, coreMessageSource.loadWording(Email.WORDING_SCOPE_EMAIL, locale));

            String loginUrl = urlService.generateUrl(FoUrls.LOGIN, requestData);
            model.put("loginUrl", urlService.buildAbsoluteUrl(requestData, loginUrl));
           
            String fromAddress = handleFromAddress(userResetPasswordConfirmationEmailBean.getFromAddress(), locale);
            String fromName = handleFromName(userResetPasswordConfirmationEmailBean.getFromName(), locale);
            String toEmail = user.getEmail();
           
            MimeMessagePreparatorImpl mimeMessagePreparator = getMimeMessagePreparator(requestData, Email.EMAIl_TYPE_RESET_PASSWORD_CONFIRMATION, model);
            mimeMessagePreparator.setTo(toEmail);
            mimeMessagePreparator.setFrom(fromAddress);
            mimeMessagePreparator.setFromName(fromName);
            mimeMessagePreparator.setReplyTo(fromAddress);
            Object[] parameters = {user.getLastname(), user.getFirstname()};
            mimeMessagePreparator.setSubject(coreMessageSource.getMessage("email.reset_password_confirmation.email_subject", parameters, locale));
            mimeMessagePreparator.setHtmlContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "reset-password-confirmation-html-content.vm", model));
            mimeMessagePreparator.setPlainTextContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "reset-password-confirmation-text-content.vm", model));
           
            Email email = new Email();
            email.setType(Email.EMAIl_TYPE_RESET_PASSWORD_CONFIRMATION);
            email.setStatus(Email.EMAIl_STATUS_PENDING);
            saveOrUpdateEmail(email, mimeMessagePreparator);
           
        } catch (MailException e) {
            logger.error("Error, can't save the message :", e);
            throw e;
        } catch (VelocityException e) {
            logger.error("Error, can't build the message :", e);
            throw e;
        } catch (IOException e) {
            logger.error("Error, can't serializable the message :", e);
            throw e;
        }
    }
   
    /**
     * @see org.hoteia.qalingo.core.service.EmailService#buildAndSaveNewOrderConfirmationMail(Localization localization, Customer customer, String velocityPath, OrderConfirmationEmailBean orderConfirmationEmailBean)
     */
    public void buildAndSaveNewOrderConfirmationMail(final RequestData requestData, final Customer customer, final String velocityPath,
                             final OrderConfirmationEmailBean orderConfirmationEmailBean) throws Exception {
        try {
          final Localization localization = requestData.getMarketAreaLocalization();
          final Locale locale = localization.getLocale();
         
          // SANITY CHECK
          checkEmailAddresses(orderConfirmationEmailBean);
         
          Map<String, Object> model = new HashMap<String, Object>();
         
          DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.FULL, locale);
          java.sql.Timestamp currentDate = new java.sql.Timestamp((new java.util.Date()).getTime());
          model.put(CURRENT_DATE, dateFormatter.format(currentDate));
          model.put(CUSTOMER, customer);
          model.put("orderConfirmationEmailBean", orderConfirmationEmailBean);
          model.put(WORDING, coreMessageSource.loadWording(Email.WORDING_SCOPE_EMAIL, locale));

          String fromAddress = handleFromAddress(orderConfirmationEmailBean.getFromAddress(), locale);
            String fromName = handleFromName(orderConfirmationEmailBean.getFromName(), locale);
            String toEmail = customer.getEmail();
           
          MimeMessagePreparatorImpl mimeMessagePreparator = getMimeMessagePreparator(requestData, Email.EMAIl_TYPE_ORDER_CONFIRMATION, model);
          mimeMessagePreparator.setTo(toEmail);
          mimeMessagePreparator.setFrom(fromAddress);
          mimeMessagePreparator.setFromName(fromName);
          mimeMessagePreparator.setReplyTo(fromAddress);
          Object[] parameters = {customer.getLastname(), customer.getFirstname()};
          mimeMessagePreparator.setSubject(coreMessageSource.getMessage("email.order.confirmation_email_subject", parameters, locale));
          mimeMessagePreparator.setHtmlContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "order-confirmation-html-content.vm", model));
          mimeMessagePreparator.setPlainTextContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "order-confirmation-text-content.vm", model));
         
          Email email = new Email();
          email.setType(Email.EMAIl_TYPE_ORDER_CONFIRMATION);
          email.setStatus(Email.EMAIl_STATUS_PENDING);
          saveOrUpdateEmail(email, mimeMessagePreparator);
         
        } catch (MailException e) {
          logger.error("Error, can't save the message :", e);
          throw e;
        } catch (VelocityException e) {
          logger.error("Error, can't build the message :", e);
          throw e;
        } catch (IOException e) {
          logger.error("Error, can't serializable the message :", e);
          throw e;
        }
    }
   
    /**
     * @see org.hoteia.qalingo.core.service.EmailService#buildAndSaveOrderShippedConfirmationMail(Localization localization, Customer customer, String velocityPath, OrderSentConfirmationEmailBean orderSentConfirmationEmailBean)
     */
    public void buildAndSaveOrderShippedConfirmationMail(final RequestData requestData, final Customer customer, final String velocityPath,
                               final OrderSentConfirmationEmailBean orderSentConfirmationEmailBean) throws Exception {
        try {
          final Localization localization = requestData.getMarketAreaLocalization();
          final Locale locale = localization.getLocale();
         
          // SANITY CHECK
          checkEmailAddresses(orderSentConfirmationEmailBean);
         
          Map<String, Object> model = new HashMap<String, Object>();
         
          DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.FULL, locale);
          java.sql.Timestamp currentDate = new java.sql.Timestamp((new java.util.Date()).getTime());
          model.put(CURRENT_DATE, dateFormatter.format(currentDate));
          model.put(CUSTOMER, customer);
          model.put("orderSentConfirmationEmailBean", orderSentConfirmationEmailBean);
          model.put(WORDING, coreMessageSource.loadWording(Email.WORDING_SCOPE_EMAIL, locale));

          String fromAddress = handleFromAddress(orderSentConfirmationEmailBean.getFromAddress(), locale);
            String fromName = handleFromName(orderSentConfirmationEmailBean.getFromName(), locale);
            String toEmail = customer.getEmail();
           
          MimeMessagePreparatorImpl mimeMessagePreparator = getMimeMessagePreparator(requestData, Email.EMAIl_TYPE_ORDER_SHIPPED, model);
          mimeMessagePreparator.setTo(toEmail);
          mimeMessagePreparator.setFrom(fromAddress);
          mimeMessagePreparator.setFromName(fromName);
          mimeMessagePreparator.setReplyTo(fromAddress);
          Object[] parameters = {customer.getLastname(), customer.getFirstname()};
          mimeMessagePreparator.setSubject(coreMessageSource.getMessage("email.order_shipped.shipped_email_subject", parameters, locale));
          mimeMessagePreparator.setHtmlContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "order-shipped-html-content.vm", model));
          mimeMessagePreparator.setPlainTextContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "order-shipped-text-content.vm", model));
         
          Email email = new Email();
          email.setType(Email.EMAIl_TYPE_ORDER_SHIPPED);
          email.setStatus(Email.EMAIl_STATUS_PENDING);
          saveOrUpdateEmail(email, mimeMessagePreparator);
         
        } catch (MailException e) {
          logger.error("Error, can't save the message :", e);
          throw e;
        } catch (VelocityException e) {
          logger.error("Error, can't build the message :", e);
          throw e;
        } catch (IOException e) {
          logger.error("Error, can't serializable the message :", e);
          throw e;
        }
    }
   
    /**
     * @see org.hoteia.qalingo.core.service.EmailService#buildAndSaveOrderShippedConfirmationMail(Localization localization, Customer customer, String velocityPath, AbandonedShoppingCartEmailBean abandonedShoppingCartEmailBean)
     */
    public void buildAndSaveAbandonedShoppingCartMail(final RequestData requestData, final Customer customer, final String velocityPath,
                              final AbandonedShoppingCartEmailBean abandonedShoppingCartEmailBean) throws Exception {
        try {
          final Localization localization = requestData.getMarketAreaLocalization();
          final Locale locale = localization.getLocale();
         
          // SANITY CHECK
          checkEmailAddresses(abandonedShoppingCartEmailBean);
         
          Map<String, Object> model = new HashMap<String, Object>();
         
          DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.FULL, locale);
          java.sql.Timestamp currentDate = new java.sql.Timestamp((new java.util.Date()).getTime());
          model.put(CURRENT_DATE, dateFormatter.format(currentDate));
          model.put(CUSTOMER, customer);
          model.put("abandonedShoppingCartEmailBean", abandonedShoppingCartEmailBean);
          model.put(WORDING, coreMessageSource.loadWording(Email.WORDING_SCOPE_EMAIL, locale));

          String fromAddress = handleFromAddress(abandonedShoppingCartEmailBean.getFromAddress(), locale);
            String fromName = handleFromName(abandonedShoppingCartEmailBean.getFromName(), locale);
            String toEmail = customer.getEmail();
           
          MimeMessagePreparatorImpl mimeMessagePreparator = getMimeMessagePreparator(requestData, Email.EMAIl_TYPE_ABANDONED_SHOPPING_CART, model);
          mimeMessagePreparator.setTo(toEmail);
          mimeMessagePreparator.setFrom(fromAddress);
          mimeMessagePreparator.setFromName(fromName);
          mimeMessagePreparator.setReplyTo(fromAddress);
          Object[] parameters = {customer.getLastname(), customer.getFirstname()};
          mimeMessagePreparator.setSubject(coreMessageSource.getMessage("email.abandoned_shopping_cart.email_subject", parameters, locale));
          mimeMessagePreparator.setHtmlContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "abandoned-shopping-cart-html-content.vm", model));
          mimeMessagePreparator.setPlainTextContent(VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, velocityPath + "abandoned-shopping-cart-text-content.vm", model));
         
          Email email = new Email();
          email.setType(Email.EMAIl_TYPE_ABANDONED_SHOPPING_CART);
          email.setStatus(Email.EMAIl_STATUS_PENDING);
          saveOrUpdateEmail(email, mimeMessagePreparator);
         
        } catch (MailException e) {
          logger.error("Error, can't save the message :", e);
          throw e;
        } catch (VelocityException e) {
          logger.error("Error, can't build the message :", e);
          throw e;
        } catch (IOException e) {
          logger.error("Error, can't serializable the message :", e);
          throw e;
        }
    }

    protected String handleFromAddress(String fromAddress, Locale locale){
        if(StringUtils.isEmpty(fromAddress)){
            fromAddress = coreMessageSource.getMessage("email.common.from_address", locale);
        }
        return fromAddress;
    }
   
    protected String handleFromName(String fromName, Locale locale){
        if(StringUtils.isEmpty(fromName)){
            fromName = coreMessageSource.getMessage("email.common.from_name", locale);
        }
        return fromName;
    }
   
    protected MimeMessagePreparatorImpl getMimeMessagePreparator(final RequestData requestData, final String emailType, final Map<String, Object> model) throws Exception{
      MimeMessagePreparatorImpl mimeMessagePreparator = new MimeMessagePreparatorImpl();
      boolean emailFileMirroringActivated = engineSettingService.getEmailFileMirroringActivated(emailType);
      if(emailFileMirroringActivated){
        mimeMessagePreparator.setMirroringActivated(emailFileMirroringActivated);
       
        String emailFileMirroringExtension = engineSettingService.getEmailFileMirroringExtension(emailType);
        String filePath = emailType.toLowerCase() + System.getProperty ("file.separator") + UUID.randomUUID() + "-" + UUID.randomUUID() + emailFileMirroringExtension;
        // FILE SYSTEM FOLDER PATH
        String emailFileMirroringFolderPath = engineSettingService.getEmailFileMirroringFolderPath(emailType);
        if(!emailFileMirroringFolderPath.endsWith("/")){
          emailFileMirroringFolderPath = emailFileMirroringFolderPath + "/";
        }
        String mirroringFilePath = FilenameUtils.separatorsToUnix(emailFileMirroringFolderPath + filePath);
        mimeMessagePreparator.setMirroringFilePath(mirroringFilePath);
       
        // MIRRORING WEB URL IN EMAIL
        String emailFileMirroringWebPath = engineSettingService.getEmailFileMirroringWebPath(emailType);
        if(!emailFileMirroringWebPath.endsWith("/")){
          emailFileMirroringWebPath = emailFileMirroringWebPath + "/";
        }
        String webFileRelativeUrl = emailFileMirroringWebPath + filePath;
        model.put("mirroringWebPath", urlService.buildAbsoluteUrl(requestData, webFileRelativeUrl));
      }
      return mimeMessagePreparator;
    }

    private void checkEmailAddresses(AbstractEmailBean emailBean) throws EmailProcessException{
    if(StringUtils.isEmpty(emailBean.getFromAddress())){
      throw new EmailProcessException(EmailProcessException.EMAIl_FROM_ADDRESS_IS_EMPTY);
    }
   
    if(StringUtils.isEmpty(emailBean.getToEmail())){
      throw new EmailProcessException(EmailProcessException.EMAIl_TO_ADDRESS_IS_EMPTY);
    }
   
    if(StringUtils.isEmpty(emailBean.getReplyToEmail())){
      throw new EmailProcessException(EmailProcessException.EMAIl_REPLY_TO_ADDRESS_IS_EMPTY);
    }
    }
   
}
TOP

Related Classes of org.hoteia.qalingo.core.service.EmailService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.