blob: 46539abcb312981ce96194ca8e8db1d57565fb8b [file] [log] [blame]
/**
* 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());
}
}