|
|
@@ -0,0 +1,245 @@ |
|
|
|
/* |
|
|
|
* The Apache Software License, Version 1.1 |
|
|
|
* |
|
|
|
* Copyright (c) 2000 The Apache Software Foundation. All rights |
|
|
|
* reserved. |
|
|
|
* |
|
|
|
* Redistribution and use in source and binary forms, with or without |
|
|
|
* modification, are permitted provided that the following conditions |
|
|
|
* are met: |
|
|
|
* |
|
|
|
* 1. Redistributions of source code must retain the above copyright |
|
|
|
* notice, this list of conditions and the following disclaimer. |
|
|
|
* |
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright |
|
|
|
* notice, this list of conditions and the following disclaimer in |
|
|
|
* the documentation and/or other materials provided with the |
|
|
|
* distribution. |
|
|
|
* |
|
|
|
* 3. The end-user documentation included with the redistribution, if |
|
|
|
* any, must include the following acknowlegement: |
|
|
|
* "This product includes software developed by the |
|
|
|
* Apache Software Foundation (http://www.apache.org/)." |
|
|
|
* Alternately, this acknowlegement may appear in the software itself, |
|
|
|
* if and wherever such third-party acknowlegements normally appear. |
|
|
|
* |
|
|
|
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software |
|
|
|
* Foundation" must not be used to endorse or promote products derived |
|
|
|
* from this software without prior written permission. For written |
|
|
|
* permission, please contact apache@apache.org. |
|
|
|
* |
|
|
|
* 5. Products derived from this software may not be called "Apache" |
|
|
|
* nor may "Apache" appear in their names without prior written |
|
|
|
* permission of the Apache Group. |
|
|
|
* |
|
|
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED |
|
|
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
|
|
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
|
|
|
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR |
|
|
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
|
|
|
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
|
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
|
|
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
|
|
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|
|
|
* SUCH DAMAGE. |
|
|
|
* ==================================================================== |
|
|
|
* |
|
|
|
* This software consists of voluntary contributions made by many |
|
|
|
* individuals on behalf of the Apache Software Foundation. For more |
|
|
|
* information on the Apache Software Foundation, please see |
|
|
|
* <http://www.apache.org/>. |
|
|
|
*/ |
|
|
|
|
|
|
|
package org.apache.tools.ant.taskdefs; |
|
|
|
|
|
|
|
import java.io.*; |
|
|
|
import java.util.*; |
|
|
|
import org.apache.tools.mail.MailMessage; |
|
|
|
import org.apache.tools.ant.Project; |
|
|
|
import org.apache.tools.ant.Task; |
|
|
|
import org.apache.tools.ant.BuildException; |
|
|
|
|
|
|
|
/** |
|
|
|
* A task to send SMTP email. |
|
|
|
* <p> |
|
|
|
* <table border="1" cellpadding="3" cellspacing="0"> |
|
|
|
* <tr bgcolor="#CCCCFF"> |
|
|
|
* <th>Attribute</th> |
|
|
|
* <th>Description</th> |
|
|
|
* <th>Required</th> |
|
|
|
* </tr> |
|
|
|
* <tr> |
|
|
|
* <td>from</td> |
|
|
|
* <td>Email address of sender.</td> |
|
|
|
* <td>Yes</td> |
|
|
|
* </tr> |
|
|
|
* <tr> |
|
|
|
* <td>mailhost</td> |
|
|
|
* <td>Host name of the mail server.</td> |
|
|
|
* <td>No, default to "localhost"</td> |
|
|
|
* </tr> |
|
|
|
* <tr> |
|
|
|
* <td>toList</td> |
|
|
|
* <td>Comma-separated list of recipients.</td> |
|
|
|
* <td>Yes</td> |
|
|
|
* </tr> |
|
|
|
* <tr> |
|
|
|
* <td>subject</td> |
|
|
|
* <td>Email subject line.</td> |
|
|
|
* <td>No</td> |
|
|
|
* </tr> |
|
|
|
* <tr> |
|
|
|
* <td>files</td> |
|
|
|
* <td>Filename(s) of text to send in the body of the email. Multiple files are |
|
|
|
* comma-separated.</td> |
|
|
|
* <td rowspan="2">One of these two attributes</td> |
|
|
|
* </tr> |
|
|
|
* <tr> |
|
|
|
* <td>message</td> |
|
|
|
* <td>Message to send inthe body of the email.</td> |
|
|
|
* </tr> |
|
|
|
* </table> |
|
|
|
* <p> |
|
|
|
* |
|
|
|
* @author glenn_twiggs@bmc.com |
|
|
|
*/ |
|
|
|
public class SendEmail extends Task { |
|
|
|
private String from; |
|
|
|
private String mailhost = "localhost"; |
|
|
|
private String message; |
|
|
|
private String toList; |
|
|
|
private String subject; |
|
|
|
private Vector files = new Vector(); |
|
|
|
|
|
|
|
/** Creates new SendEmail */ |
|
|
|
public SendEmail() { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Sets the toList parameter of this build task. |
|
|
|
* |
|
|
|
* @param toList Comma-separated list of email recipient addreses. |
|
|
|
*/ |
|
|
|
public void setToList(String toList) { |
|
|
|
this.toList = toList; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Sets the from parameter of this build task. |
|
|
|
* |
|
|
|
* @param from Email address of sender. |
|
|
|
*/ |
|
|
|
public void setFrom(String from) { |
|
|
|
this.from = from; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Sets the mailhost parameter of this build task. |
|
|
|
* |
|
|
|
* @param mailhost Mail host name. |
|
|
|
*/ |
|
|
|
public void setMailhost(String mailhost) { |
|
|
|
this.mailhost = mailhost; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Sets the message parameter of this build task. |
|
|
|
* |
|
|
|
* @param message Message body of this email. |
|
|
|
*/ |
|
|
|
public void setMessage(String message) { |
|
|
|
this.message = message; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Sets the subject parameter of this build task. |
|
|
|
* |
|
|
|
* @param subject Subject of this email. |
|
|
|
*/ |
|
|
|
public void setSubject(String subject) { |
|
|
|
this.subject = subject; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Sets the file parameter of this build task. |
|
|
|
* |
|
|
|
* @param filenames Filenames to include as the message body of this email. |
|
|
|
*/ |
|
|
|
public void setFiles(String filenames) { |
|
|
|
StringTokenizer t = new StringTokenizer(filenames, ", "); |
|
|
|
|
|
|
|
while (t.hasMoreTokens()) { |
|
|
|
files.addElement(project.resolveFile(t.nextToken())); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Executes this build task. |
|
|
|
* |
|
|
|
* throws org.apache.tools.ant.BuildException if there is an error during task |
|
|
|
* execution. |
|
|
|
*/ |
|
|
|
public void execute() { |
|
|
|
try { |
|
|
|
MailMessage mailMessage = new MailMessage(mailhost); |
|
|
|
|
|
|
|
if (from != null) { |
|
|
|
mailMessage.from(from); |
|
|
|
} else { |
|
|
|
throw new BuildException("Attribute \"from\" is required."); |
|
|
|
} |
|
|
|
|
|
|
|
if (toList != null) { |
|
|
|
StringTokenizer t = new StringTokenizer(toList, ", ", false); |
|
|
|
|
|
|
|
while (t.hasMoreTokens()) { |
|
|
|
mailMessage.to(t.nextToken()); |
|
|
|
} |
|
|
|
} else { |
|
|
|
throw new BuildException("Attribute \"toList\" is required."); |
|
|
|
} |
|
|
|
|
|
|
|
if (subject != null) { |
|
|
|
mailMessage.setSubject(subject); |
|
|
|
} |
|
|
|
|
|
|
|
if (!files.isEmpty()) { |
|
|
|
PrintStream out = mailMessage.getPrintStream(); |
|
|
|
|
|
|
|
for (Enumeration e = files.elements(); e.hasMoreElements(); ) { |
|
|
|
File file = (File)e.nextElement(); |
|
|
|
|
|
|
|
if (file.exists() && file.canRead()) { |
|
|
|
int bufsize = 1024; |
|
|
|
int length; |
|
|
|
byte[] buf = new byte[bufsize]; |
|
|
|
|
|
|
|
BufferedInputStream in = new BufferedInputStream( |
|
|
|
new FileInputStream(file), bufsize); |
|
|
|
|
|
|
|
while ((length = in.read(buf, 0, bufsize)) != -1) { |
|
|
|
out.write(buf, 0, length); |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
throw new BuildException("File \"" + file.getName() |
|
|
|
+ "\" does not exist or is not readable."); |
|
|
|
} |
|
|
|
} |
|
|
|
} else if (message != null) { |
|
|
|
PrintStream out = mailMessage.getPrintStream(); |
|
|
|
out.print(message); |
|
|
|
} else { |
|
|
|
throw new BuildException("Attribute \"file\" or \"message\" is required."); |
|
|
|
} |
|
|
|
|
|
|
|
log("Sending email"); |
|
|
|
mailMessage.sendAndClose(); |
|
|
|
} catch (IOException ioe) { |
|
|
|
throw new BuildException("IO error sending mail: " + ioe.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |