org.beanfuse.notification.mail.AbstractMailNotifier.java Source code

Java tutorial

Introduction

Here is the source code for org.beanfuse.notification.mail.AbstractMailNotifier.java

Source

package org.beanfuse.notification.mail;

import java.io.UnsupportedEncodingException;
import java.util.Date;

import javax.mail.Address;
import javax.mail.MessagingException;
import javax.mail.Message.RecipientType;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.beanfuse.notification.Message;
import org.beanfuse.notification.NotificationException;
import org.beanfuse.notification.Notifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

//$Id:AbstractMailNotifier.java Mar 22, 2009 12:04:05 PM chaostone Exp $
/*
 * Copyright c 2005-2009.
 * 
 * Licensed under the GPL License, Version 2.0 (the "License")
 * http://www.gnu.org/licenses/gpl-2.0.html
 * 
 */
public abstract class AbstractMailNotifier implements Notifier {

    protected static Logger logger = LoggerFactory.getLogger(AbstractMailNotifier.class);

    private JavaMailSender javaMailSender;

    private String fromMailbox;

    private String fromName;

    public String getType() {
        return "mail";
    }

    public void sendMessage(Message msg) throws NotificationException {
        // contruct a MailMessage
        MailMessage mailConext = null;
        if (msg instanceof MailMessage) {
            mailConext = (MailMessage) msg;
        } else {
            mailConext = new MailMessage();
            mailConext.setSubject(msg.getSubject());
            mailConext.setText(msg.getText());
            mailConext.setProperties(msg.getProperties());
            String[] to = new String[msg.getRecipients().size()];
            msg.getRecipients().toArray(to);
            mailConext.setTo(to);
        }

        MimeMessage mimeMsg = javaMailSender.createMimeMessage();
        try {
            mimeMsg.setSentDate(new Date());
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMsg);
            messageHelper.setText(buildText(mailConext), Message.HTML.equals(mailConext.getContentType()));
            String subject = buildSubject(mailConext);
            messageHelper.setSubject(subject);
            messageHelper.setFrom(fromMailbox, fromName);
            addRecipient(mimeMsg, javax.mail.Message.RecipientType.TO, mailConext.getTo());
            addRecipient(mimeMsg, javax.mail.Message.RecipientType.CC, mailConext.getCc());
            addRecipient(mimeMsg, javax.mail.Message.RecipientType.BCC, mailConext.getBcc());
            beforeSend(mailConext, mimeMsg);
            if (mimeMsg.getAllRecipients() != null && ((Address[]) mimeMsg.getAllRecipients()).length > 0) {
                javaMailSender.send(mimeMsg);
                logger.info("mail sended from {} to {} with subject {}",
                        new Object[] { fromMailbox, mailConext.getRecipients(), subject });
            }
        } catch (AddressException ex) {
            throw new NotificationException("Exception while sending message.", ex);
        } catch (MessagingException ex) {
            throw new NotificationException("Exception while sending message.", ex);
        } catch (UnsupportedEncodingException ex) {
            throw new NotificationException("Exception while sending message.", ex);
        }
        afterSend(mailConext, mimeMsg);
    }

    private void addRecipient(MimeMessage message, RecipientType recipientType, String[] recipients)
            throws AddressException, MessagingException {
        if (null != recipients) {
            for (int i = 0; i < recipients.length; i++) {
                InternetAddress to = new InternetAddress(recipients[i].trim());
                message.addRecipient(recipientType, to);
            }
        }
    }

    abstract protected String buildSubject(Message msg);

    abstract protected String buildText(Message msg);

    protected void beforeSend(Message msg, MimeMessage mimeMsg) {

    }

    protected void afterSend(Message msg, MimeMessage mimeMsg) {

    }

    public JavaMailSender getJavaMailSender() {
        return javaMailSender;
    }

    public void setJavaMailSender(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }

    public String getFromMailbox() {
        return fromMailbox;
    }

    public void setFromMailbox(String fromMailbox) {
        this.fromMailbox = fromMailbox;
    }

    public String getFromName() {
        return fromName;
    }

    public void setFromName(String fromName) {
        this.fromName = fromName;
    }

}