com.miserablemind.butter.domain.service.email.EmailService.java Source code

Java tutorial

Introduction

Here is the source code for com.miserablemind.butter.domain.service.email.EmailService.java

Source

package com.miserablemind.butter.domain.service.email;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.velocity.app.VelocityEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.stereotype.Service;
import org.springframework.ui.velocity.VelocityEngineUtils;

import javax.mail.internet.MimeMessage;

/*
 * Miserable Mind
 * http://www.butter.miserablemind.com
 * The MIT License (MIT)
 */

/**
 * Service bean that handles the ways the messages are sent through {@link JavaMailSender}.
 *
 * @author <a href="http://www.miserablemind.com" target="_blank">miserablemind</a>
 */
@Service
public class EmailService {

    private static final Logger logger = Logger.getLogger(EmailService.class);

    @Autowired
    private JavaMailSender mailSender;

    @Autowired
    private VelocityEngine velocityEngine;

    /**
     * Sends a plain text message. Uses {@link EmailMessage#getPlainTextBody()}
     *
     * @param emailMessage prepared message object to be sent. Usually prepared by {@link EmailManager}
     */
    public void sendTextMail(EmailMessage emailMessage) {

        SimpleMailMessage textMessage = new SimpleMailMessage();

        textMessage.setFrom(emailMessage.getFromAddress().getAddress());
        textMessage.setTo(emailMessage.getToEmail());
        textMessage.setSubject(emailMessage.getSubject());
        textMessage.setText(emailMessage.getPlainTextBody());

        try {
            this.mailSender.send(textMessage);
        } catch (MailException e) {
            logger.error("Email Service Exception Send Text Mail: " + e.getMessage(), e);
        }
    }

    /**
     * Sends a mime mail with a specified Velocity template that may contain HTML and attachments.
     *
     * @param emailMessage prepared message object to be sent. Usually prepared by {@link EmailManager}
     */
    public void sendMimeMail(final EmailMessage emailMessage) {

        MimeMessagePreparator preparedMessage = new MimeMessagePreparator() {

            public void prepare(MimeMessage mimeMessage) throws Exception {

                MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true);

                message.setTo(emailMessage.getToEmail());
                message.setFrom(emailMessage.getFromAddress());
                message.setReplyTo(emailMessage.getFromAddress());
                message.setSubject(emailMessage.getSubject());
                String body = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine,
                        emailMessage.getTemplatePath(), "UTF-8", emailMessage.getModel());

                message.setText(body, true);

                if (!StringUtils.isBlank(emailMessage.getAttachmentPath())) {
                    FileSystemResource file = new FileSystemResource(emailMessage.getAttachmentPath());
                    message.addAttachment(emailMessage.getAttachmentName(), file);
                }
            }
        };

        try {
            this.mailSender.send(preparedMessage);
        } catch (MailException e) {
            logger.error("Email Service Exception Send Mime Mail: " + e.getMessage(), e);
        }

    }

}