/******************************************************************************* * Copyright (c) 2009 Daniel Grout. * * GNU GENERAL PUBLIC LICENSE - Version 3 * * This file is part of Report Runner (http://code.google.com/p/reportrunner). * * Report Runner is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Report Runner 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Report Runner. If not, see <http://www.gnu.org/licenses/>. * * Module: EmailHandler.java ******************************************************************************/ package binky.reportrunner.engine.utils.impl; import java.io.IOException; import java.util.Date; import java.util.LinkedList; import java.util.List; import org.apache.commons.mail.EmailAttachment; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.MultiPartEmail; import org.apache.log4j.Logger; import binky.reportrunner.engine.utils.EmailHandler; import binky.reportrunner.engine.utils.FileSystemHandler; public class EmailHandlerImpl implements EmailHandler { private static final boolean debug = false; private static final String subject = "Report Runner Files for: "; private static final String message = "Please find attached outputs for the above job."; private static Logger logger = Logger.getLogger(EmailHandlerImpl.class); /* (non-Javadoc) * @see binky.reportrunner.engine.utils.EmailHandler#sendEmail(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) */ public void sendEmail(String destinationEmail, String fromEmail, String smtpServer, String fileUrl, String jobName, String groupName) throws EmailException, IOException { logger.debug("sending email to: " + destinationEmail + " on host " + smtpServer); FileSystemHandler fs = new FileSystemHandlerImpl(); MultiPartEmail email = new MultiPartEmail(); email.setDebug(debug); email.setHostName(smtpServer); for (String toEmail : destinationEmail.split(",")) { email.addTo(toEmail.trim()); } email.setFrom(fromEmail); email.setSubject(subject + jobName + " [" + groupName + "]"); email.setMsg(message); List<String> tempFiles = new LinkedList<String>(); EmailAttachment attachment = new EmailAttachment(); String temp = copyToTemp(fileUrl); tempFiles.add(temp); attachment.setURL(fs.getURL(temp)); attachment.setDisposition(EmailAttachment.ATTACHMENT); attachment.setDescription("Report Runner Report"); // get the file name of the report from the complete path String name = fs.getFileName(fileUrl); attachment.setName(name); logger.debug("File: " + fileUrl); logger.debug("Name: " + name); email.attach(attachment); email.send(); fs.deleteFile(temp); } /* (non-Javadoc) * @see binky.reportrunner.engine.utils.EmailHandler#sendEmail(java.lang.String, java.lang.String, java.lang.String, java.util.List, java.lang.String, java.lang.String) */ public void sendEmail(String destinationEmail, String fromEmail, String smtpServer, List<String> fileUrls, String jobName, String groupName) throws EmailException, IOException { // logger.debug("sending email to: " + to + " on host " + server); FileSystemHandler fs = new FileSystemHandlerImpl(); MultiPartEmail email = new MultiPartEmail(); email.setDebug(debug); email.setHostName(smtpServer); for (String toEmail : destinationEmail.split(",")) { email.addTo(toEmail.trim()); } email.setFrom(fromEmail); email.setSubject(subject + jobName + " [" + groupName + "]"); email.setMsg("Please find attached outputs for the above job."); List<String> tempFiles = new LinkedList<String>(); for (String url : fileUrls) { EmailAttachment attachment = new EmailAttachment(); String temp = copyToTemp(url); tempFiles.add(temp); attachment.setURL(fs.getURL(temp)); attachment.setDisposition(EmailAttachment.ATTACHMENT); attachment.setDescription(message); // get the file name of the report from the complete path String name = fs.getFileName(url); attachment.setName(name); logger.debug("File: " + url); logger.debug("Name: " + name); email.attach(attachment); } email.send(); for (String url : tempFiles) { fs.deleteFile(url); } } /* (non-Javadoc) * @see binky.reportrunner.engine.utils.EmailHandler#sendAlertEmail(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean, java.util.Date) */ public void sendAlertEmail(String destinationEmail, String fromEmail, String smtpServer, String jobName, String groupName, boolean success, Date finishTime) throws EmailException, IOException { logger.debug("sending email to: " + destinationEmail + " on host " + smtpServer); MultiPartEmail email = new MultiPartEmail(); email.setHostName(smtpServer); email.setDebug(debug); for (String toEmail : destinationEmail.split(",")) { email.addTo(toEmail.trim()); } email.setFrom(fromEmail); if (success) { email.setSubject("Success message for: " + jobName + " [" + groupName + "]"); email.setMsg("Job completed successfully at " + finishTime); } else { email.setSubject("Failure message for: " + jobName + " [" + groupName + "]"); email.setMsg("Job completed with error(s) at " + finishTime); } email.send(); } private String copyToTemp(String url) throws IOException { logger.debug("copying file to temp to attach to email: " + url); FileSystemHandler fs = new FileSystemHandlerImpl(); String tempDir = System.getProperty("java.io.tmpdir"); String dest = "file://" + tempDir + "/email_" + fs.getFileName(url); fs.copyFile(url, dest); return dest; } }