/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.sys.mail; import javax.activation.DataHandler; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.util.ByteArrayDataSource; import org.kuali.rice.core.mail.MailerImpl; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.mail.javamail.MimeMailMessage; /** * This class extends the Rice MailerImpl to add attachment support. */ public class AttachmentMailerImpl extends MailerImpl implements AttachmentMailer { protected final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(AttachmentMailerImpl.class); protected JavaMailSenderImpl mailSender; /** * Construct and a send mime email message from an Attachment Mail Message. * * @param message the Attachement Mail Message * @throws MessagingException */ @Override public void sendEmail(AttachmentMailMessage message) throws MessagingException { // Construct a mime message from the Attachment Mail Message MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeBodyPart body = new MimeBodyPart(); body.setText(message.getMessage()); MimeBodyPart attachment = new MimeBodyPart(); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(body); ByteArrayDataSource ds = new ByteArrayDataSource(message.getContent(), message.getType()); attachment.setDataHandler(new DataHandler(ds)); attachment.setFileName(message.getFileName()); multipart.addBodyPart(attachment); mimeMessage.setContent(multipart); MimeMailMessage mmm = new MimeMailMessage(mimeMessage); mmm.setTo( (String[])message.getToAddresses().toArray(new String[message.getToAddresses().size()]) ); mmm.setBcc( (String[])message.getBccAddresses().toArray(new String[message.getBccAddresses().size()]) ); mmm.setCc( (String[])message.getCcAddresses().toArray(new String[message.getCcAddresses().size()]) ); mmm.setSubject(message.getSubject()); mmm.setFrom(message.getFromAddress()); try { if ( LOG.isDebugEnabled() ) { LOG.debug( "sendEmail() - Sending message: " + mmm.toString() ); } mailSender.send(mmm.getMimeMessage()); } catch (Exception e) { LOG.error("sendEmail() - Error sending email.", e); throw new RuntimeException(e); } } public JavaMailSenderImpl getMailSender() { return mailSender; } @Override public void setMailSender(JavaMailSenderImpl mailSender) { this.mailSender = mailSender; } }