Package com.tll.mail

Source Code of com.tll.mail.AbstractComposer

package com.tll.mail;

import java.io.UnsupportedEncodingException;
import java.util.List;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.springframework.mail.MailPreparationException;
import org.springframework.mail.javamail.MimeMessageHelper;

/**
* The abstract mime message composer.
* @author jpk
* @param <C> the mail context type
*/
abstract class AbstractComposer<C extends IMailContext> implements IComposer<C> {

  /**
   * Implementation specific composition.
   * @param helper Spring's mime message helper.
   * @param context The mail context.
   * @throws MailPreparationException
   */
  protected abstract void composeImpl(MimeMessageHelper helper, C context) throws MailPreparationException;

  @Override
  public final MimeMessage compose(MimeMessage mimeMessage, C context) throws MailPreparationException {

    // create a mime message helper
    MimeMessageHelper helper;
    try {
      helper = new MimeMessageHelper(mimeMessage, true, context.getEncoding());
    }
    catch(final MessagingException me) {
      throw new MailPreparationException("Unable to create the mime message helper", me);
    }

    // apply the routing
    final MailRouting mailRouting = context.getRouting();
    if(mailRouting == null) {
      throw new MailPreparationException("No email routing specified.");
    }
    try {
      // sender
      final NameEmail sender = mailRouting.getSender();
      if(sender != null) {
        helper.setFrom(sender.getEmailAddress(), sender.getName());
      }

      List<NameEmail> list;

      // recipients
      list = mailRouting.getRecipients();
      if(list.isEmpty()) {
        throw new MailPreparationException("No email recipients specified");
      }
      for(final NameEmail email : list) {
        helper.addTo(email.getEmailAddress(), email.getName());
      }

      // ccs
      list = mailRouting.getCcList();
      if(list != null && list.size() > 0) {
        for(final NameEmail email : list) {
          helper.addCc(email.getEmailAddress(), email.getName());
        }
      }

      // bccs
      list = mailRouting.getBccList();
      if(list != null && list.size() > 0) {
        for(final NameEmail email : list) {
          helper.addBcc(email.getEmailAddress(), email.getName());
        }
      }

    }
    catch(final UnsupportedEncodingException uee) {
      throw new MailPreparationException("Unsupported mime message encoding: " + uee.getMessage(), uee);
    }
    catch(final MessagingException me) {
      throw new MailPreparationException("Trouble performing the initial mime message compose:" + me.getMessage(), me);
    }

    // do implemenation specific composing
    composeImpl(helper, context);

    // add attachments
    try {
      final List<Attachment> attachments = context.getAttachments();
      if(!attachments.isEmpty()) {
        for(final Attachment attachment : attachments) {
          helper.addAttachment(attachment.getName(), attachment.getDataSource());
        }
      }

    }
    catch(final MessagingException me) {
      throw new MailPreparationException("Unable to add email attachments:" + me.getMessage(), me);
    }

    return helper.getMimeMessage();
  }
}
TOP

Related Classes of com.tll.mail.AbstractComposer

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.