MailMessageBean.java 4.17 KB
/*
 * Copyright Codecrew Ry
 * 
 * All rights reserved.
 * 
 * This license applies to any software containing a notice placed by the 
 * copyright holder. Such software is herein referred to as the Software. 
 * This license covers modification, distribution and use of the Software. 
 * 
 * Any distribution and use in source and binary forms, with or without 
 * modification is not permitted without explicit written permission from the 
 * copyright owner. 
 * 
 * A non-exclusive royalty-free right is granted to the copyright owner of the 
 * Software to use, modify and distribute all modifications to the Software in 
 * future versions of the Software. 
 * 
 */
package fi.codecrew.moya.beans;

import java.io.UnsupportedEncodingException;

import javax.activation.DataHandler;
import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.mail.*;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;

import fi.codecrew.moya.util.MailMessageAttachment;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.codecrew.moya.clientutils.BortalLocalContextHolder;
import fi.codecrew.moya.util.MailMessage;

/**
 * Message-Driven Bean implementation class for: MailMessageBean
 * 
 */
@MessageDriven(mappedName = "jms/moyaMailQueue",
		activationConfig = {
				@ActivationConfigProperty(
						propertyName = "destinationType",
						propertyValue = "javax.jms.Queue")
		})
public class MailMessageBean implements MessageListener {

	@Resource(name = "mail/moya")
	private Session mailSession;

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

	/**
	 * Default constructor.
	 */
	public MailMessageBean() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see MessageListener#onMessage(Message)
	 */
	@Override
	public void onMessage(Message message) {

		MailMessage mailmsg = null;
		try {
			mailmsg = (MailMessage) ((ObjectMessage) message).getObject();
			logger.debug("Got message {}", mailmsg.getToName());

			// MERGEREQUESTIN TARKASTAJA!
			// MERGEREQUESTIN TARKASTAJA!
			// MERGEREQUESTIN TARKASTAJA!
			// MERGEREQUESTIN TARKASTAJA!
			// MERGEREQUESTIN TARKASTAJA!
			// MERGEREQUESTIN TARKASTAJA!
			// MERGEREQUESTIN TARKASTAJA!
			// MERGEREQUESTIN TARKASTAJA!
			// Jos unohan tän falsen tähän alle, niin ulise TKffTK:lle kovasti :)
			if (false && BortalLocalContextHolder.isInDevelopmentMode()) {
				String dmessage = " To: "
						+ mailmsg.getTo() + "\n Subject: "
						+ mailmsg.getSubject() + "\n Text: "
						+ mailmsg.getMessage() + "\n";

				logger.debug("Not sendet mail (debug -mode): {}", dmessage);
			} else {

				MimeMessage msg = new MimeMessage(mailSession);
				MimeMultipart multipart = new MimeMultipart();

				MimeBodyPart contentPart = new MimeBodyPart();
				contentPart.setText(mailmsg.getMessage(), mailmsg.getCharset());

				multipart.addBodyPart(contentPart);

				// Add attachments, if any
				if(mailmsg.getAttachmentList() != null && mailmsg.getAttachmentList().size() > 0) {
					for(MailMessageAttachment attachment : mailmsg.getAttachmentList()) {
						MimeBodyPart mimeAttachment = new MimeBodyPart();
						mimeAttachment.setFileName(attachment.getName());
						mimeAttachment.setDataHandler(new DataHandler(new ByteArrayDataSource(attachment.getData(), attachment.getMimeType())));
						multipart.addBodyPart(mimeAttachment);
					}
				}

				msg.setSubject(mailmsg.getSubject());
				msg.setFrom(mailmsg.getFrom());
				msg.setRecipient(RecipientType.TO, mailmsg.getTo());
				msg.setContent(multipart);
				Transport.send(msg);
			}

		} catch (JMSException e) {
			logger.warn("Error receiving jms for {}", mailmsg, e);
		} catch (MessagingException e) {
			logger.warn("Messaging Exception exception while sending mail to " + mailmsg, e);
		} catch (UnsupportedEncodingException e) {
			logger.warn("Unsupported encoding exception while sending mail to {}" + mailmsg, e);
		}

	}
}