| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.oodt.cas.crawl.action; |
| |
| //JDK imports |
| import java.io.File; |
| import java.util.List; |
| import java.util.Properties; |
| import javax.mail.Message; |
| import javax.mail.Session; |
| import javax.mail.Transport; |
| import javax.mail.internet.AddressException; |
| import javax.mail.internet.InternetAddress; |
| import javax.mail.internet.MimeMessage; |
| |
| //Spring imports |
| import org.springframework.beans.factory.annotation.Required; |
| |
| //Apache imports |
| import org.apache.commons.lang.Validate; |
| |
| //OODT imports |
| import org.apache.oodt.cas.crawl.action.CrawlerAction; |
| import org.apache.oodt.cas.crawl.structs.exceptions.CrawlerActionException; |
| import org.apache.oodt.cas.metadata.Metadata; |
| import org.apache.oodt.cas.metadata.util.PathUtils; |
| |
| //Google imports |
| import com.google.common.collect.Lists; |
| |
| /** |
| * This action sends an email notification. It performs metadata and system |
| * property replacement on the subject, recipients, and message. This allows the |
| * notifications to be dynamically generated. |
| * |
| * @author pramirez (Paul Ramirez) |
| * @author mattmann (Chris Mattmann) |
| * |
| */ |
| public class EmailNotification extends CrawlerAction { |
| |
| private String mailHost; |
| private String subject; |
| private String message; |
| private List<String> recipients; |
| private String sender; |
| private boolean ignoreInvalidAddresses; |
| |
| public EmailNotification() { |
| this.ignoreInvalidAddresses = true; |
| } |
| |
| @Override |
| public boolean performAction(File product, Metadata metadata) |
| throws CrawlerActionException { |
| try { |
| Properties props = new Properties(); |
| props.put("mail.host", this.mailHost); |
| props.put("mail.transport.protocol", "smtp"); |
| props.put("mail.from", this.sender); |
| |
| Session session = Session.getDefaultInstance(props); |
| Message msg = new MimeMessage(session); |
| msg.setSubject(PathUtils.doDynamicReplacement(subject, metadata)); |
| msg.setText(new String(PathUtils.doDynamicReplacement(message, |
| metadata).getBytes())); |
| for (String recipient : recipients) { |
| try { |
| msg.addRecipient(Message.RecipientType.TO, new InternetAddress( |
| PathUtils.replaceEnvVariables(recipient.trim(), metadata), |
| ignoreInvalidAddresses)); |
| LOG.fine("Recipient: " |
| + PathUtils.replaceEnvVariables(recipient.trim(), metadata)); |
| } catch (AddressException ae) { |
| LOG.fine("Recipient: " |
| + PathUtils.replaceEnvVariables(recipient.trim(), metadata)); |
| LOG.warning(ae.getMessage()); |
| } |
| } |
| LOG.fine("Subject: " + msg.getSubject()); |
| LOG.fine("Message: " |
| + new String(PathUtils.doDynamicReplacement(message, metadata) |
| .getBytes())); |
| Transport.send(msg); |
| return true; |
| } catch (Exception e) { |
| LOG.severe(e.getMessage()); |
| return false; |
| } |
| } |
| |
| @Override |
| public void validate() throws CrawlerActionException { |
| super.validate(); |
| try { |
| Validate.notNull(mailHost, "Must specify mailHost"); |
| Validate.notNull(subject, "Must specify subject"); |
| Validate.notNull(message, "Must specify message"); |
| Validate.notNull(recipients, "Must specify recipients"); |
| Validate.notNull(sender, "Must specify sender"); |
| } catch (Exception e) { |
| throw new CrawlerActionException(e); |
| } |
| } |
| |
| @Required |
| public void setMailHost(String smtpHost) { |
| this.mailHost = smtpHost; |
| } |
| |
| @Required |
| public void setSubject(String subject) { |
| this.subject = subject; |
| } |
| |
| @Required |
| public void setMessage(String message) { |
| this.message = message; |
| } |
| |
| public void setRecipients(String recipients) { |
| if (recipients != null) { |
| this.recipients = Lists.newArrayList(recipients.split(",")); |
| } |
| } |
| |
| public void setRecipients(List<String> recipients) { |
| this.recipients = recipients; |
| } |
| |
| @Required |
| public void setSender(String sender) { |
| this.sender = sender; |
| } |
| |
| public void setIgnoreInvalidAddresses(Boolean ignoreInvalidAddresses) { |
| this.ignoreInvalidAddresses = ignoreInvalidAddresses; |
| } |
| |
| public static void main(String[] args) throws Exception { |
| if (args.length != 5) { |
| System.out.println("Usage: java " + EmailNotification.class.getName() |
| + " <mailhost> <sender> <recipients> <subject> <message>"); |
| System.exit(-1); |
| } |
| EmailNotification notification = new EmailNotification(); |
| notification.setMailHost(args[0]); |
| notification.setSender(args[1]); |
| notification.setRecipients(args[2]); |
| notification.setSubject(args[3]); |
| notification.setMessage(args[4]); |
| notification.performAction(new File(""), new Metadata()); |
| } |
| } |