ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From adammurd...@apache.org
Subject cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/net MimeMail.java
Date Tue, 05 Feb 2002 09:32:48 GMT
adammurdoch    02/02/05 01:32:48

  Modified:    .        build.xml
               docs/manual install.html optionaltasklist.html
               docs/manual/CoreTasks mail.html
               docs/manual/OptionalTasks mimemail.html
               src/main/org/apache/tools/ant/taskdefs SendEmail.java
                        defaults.properties
               src/main/org/apache/tools/ant/taskdefs/optional/net
                        MimeMail.java
  Added:       src/main/org/apache/tools/ant/taskdefs/email
                        EmailAddress.java EmailTask.java Mailer.java
                        Message.java MimeMailer.java PlainMailer.java
                        UUMailer.java
  Log:
  * Added new combined email task, which replaces the old <mail> and
   <mimemail> tasks.
  
  * Deprecated <mimemail> task, and old SendEmail and MimeMail classes.
  
  Submitted by Rob Oxspring <roxspring@yahoo.com>.
  
  Revision  Changes    Path
  1.235     +6 -1      jakarta-ant/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/build.xml,v
  retrieving revision 1.234
  retrieving revision 1.235
  diff -u -r1.234 -r1.235
  --- build.xml	4 Feb 2002 10:35:30 -0000	1.234
  +++ build.xml	5 Feb 2002 09:32:47 -0000	1.235
  @@ -189,6 +189,9 @@
       <available property="bcel.present"
                  classname="org.apache.bcel.Constants"
                  classpathref="classpath" />
  +    <available property="sunuue.present"
  +               classname="sun.misc.UUEncoder"
  +               classpathref="classpath" />
   
       <condition property="javamail.complete">
         <and>
  @@ -269,6 +272,9 @@
         <exclude name="${ant.package}/listener/Log4jListener.java"
                  unless="log4j.present" />
   
  +      <exclude name="${ant.package}/taskdefs/email/UUMailer.java" unless="sunuue.present" />
  +      <exclude name="${ant.package}/taskdefs/email/MimeMailer.java" unless="javamail.complete" />
  +
         <exclude name="${optional.package}/IContract.java" unless="icontract.present" />
         <exclude name="${optional.package}/Script.java" unless="bsf.present" />
         <exclude name="${optional.package}/StyleBook.java" unless="stylebook.present" />
  @@ -286,7 +292,6 @@
         <exclude name="${optional.package}/ejb/IPlanet*.java" unless="ejbjar.support" />
         <exclude name="${optional.package}/Javah.java" unless="jdk1.2+" />
         <exclude name="${optional.package}/junit/*" unless="junit.present" />
  -      <exclude name="${optional.package}/net/MimeMail.java" unless="javamail.complete" />
         <exclude name="${optional.package}/net/FTP.java" unless="netcomp.present" />
         <exclude name="${optional.package}/net/TelnetTask.java" unless="netcomp.present" />
         <exclude name="${optional.package}/scm/AntStarTeam*.java" unless="starteam.present" />
  
  
  
  1.24      +2 -2      jakarta-ant/docs/manual/install.html
  
  Index: install.html
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/docs/manual/install.html,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- install.html	10 Jan 2002 08:48:28 -0000	1.23
  +++ install.html	5 Feb 2002 09:32:47 -0000	1.24
  @@ -342,13 +342,13 @@
     </tr>
     <tr>
       <td>mail.jar</td>
  -    <td>MimeMail task</td>
  +    <td>Mail task with Mime encoding, and the MimeMail task</td>
       <td><a href="http://java.sun.com/products/javamail/"
           target="_top">http://java.sun.com/products/javamail/</a></td>
     </tr>  
     <tr>
       <td>activation.jar</td>
  -    <td>MimeMail task</td>
  +    <td>Mail task with Mime encoding, and the MimeMail task</td>
       <td><a href="http://java.sun.com/products/javabeans/glasgow/jaf.html"
           target="_top">http://java.sun.com/products/javabeans/glasgow/jaf.html</a></td>
     </tr>  
  
  
  
  1.24      +1 -1      jakarta-ant/docs/manual/optionaltasklist.html
  
  Index: optionaltasklist.html
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/docs/manual/optionaltasklist.html,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- optionaltasklist.html	31 Jan 2002 19:47:40 -0000	1.23
  +++ optionaltasklist.html	5 Feb 2002 09:32:47 -0000	1.24
  @@ -31,7 +31,7 @@
   <a href="OptionalTasks/junitreport.html">JUnitReport</a><br>
   <a href="OptionalTasks/mmetrics.html">Metamata Metrics</a><br>
   <a href="OptionalTasks/maudit.html">Metamata Audit</a><br>
  -<a href="OptionalTasks/mimemail.html">MimeMail</a><br>
  +<a href="OptionalTasks/mimemail.html"><i>MimeMail</i></a><br>
   <a href="OptionalTasks/mparse.html">MParse</a><br>
   <a href="OptionalTasks/native2ascii.html">Native2Ascii</a><br>
   <a href="OptionalTasks/netrexxc.html">NetRexxC</a><br>
  
  
  
  1.10      +127 -25   jakarta-ant/docs/manual/CoreTasks/mail.html
  
  Index: mail.html
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/docs/manual/CoreTasks/mail.html,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- mail.html	3 Feb 2002 22:00:42 -0000	1.9
  +++ mail.html	5 Feb 2002 09:32:47 -0000	1.10
  @@ -9,9 +9,10 @@
   
   <h2><a name="mail">Mail</a></h2>
   <h3>Description</h3>
  -<p>A task to send SMTP email. Text and text files to include in the message
  -body may be specified. To send binary attachments the optional
  -<a href="../OptionalTasks/mimemail.html">MimeMail</a> task should be used instead</p>
  +<p>A task to send SMTP email. This task can send mail using either plain
  +text, uu encoding or Mime format mail depending on what is available.
  +Attachments may be sent using nested
  +<a href="../CoreTypes/fileset.html">fileset</a> elements.</p>
   
   <h3>Parameters</h3>
   <table border="1" cellpadding="2" cellspacing="0">
  @@ -23,45 +24,75 @@
     <tr>
       <td valign="top">from</td>
       <td valign="top">Email address of sender.</td>
  -    <td align="center" valign="top">Yes</td>
  +    <td align="center" valign="top">Either a <code>from</code> attribute, or a <code>&lt;from&gt;</code>
  +    element.</td>
     </tr>
     <tr>
       <td valign="top">tolist</td>
       <td valign="top">Comma-separated list of recipients.</td>
  -    <td align="center" valign="top">Yes</td>
  +    <td align="center" valign="middle" rowspan="3">At least one of these, or the
  +       equivalent elements.</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">cclist</td>
  +    <td valign="top">Comma-separated list of recipients to carbon copy</td>
  +    </tr>
  +  <tr>
  +    <td valign="top">bcclist</td>
  +    <td valign="top">Comma-separated list of recipients to carbon copy</td>
     </tr>
     <tr>
       <td valign="top">message</td>
       <td valign="top">Message to send in the body of the email.</td>
  -    <td align="center" valign="middle" rowspan="2">One of the two</td>
  +    <td align="center" valign="middle" rowspan="2">One of these or a
  +    <code>&lt;message&gt;</code> element.</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">messagefile</td>
  +    <td valign="top">File to send as the body of the email.</td>
  +  </tr>
  +      <td valign="top">messagemimetype</td>
  +    <td valign="top">The content type of the message.  The default is
  +    <code>text/plain</code>.</td>
  +    <td align="center" valign="top">No</td>
     </tr>
     <tr>
       <td valign="top">files</td>
  -    <td valign="top">Filename(s) of text to send in the body of the email. 
  -    Multiple files are comma-separated.</td>
  +    <td valign="top">Files to send as attachments to the email.  Separate multiple
  +    file names using a comma.  You can also use <code>&lt;fileset&gt;</code>
  +    elements to specify files.</td>
  +    <td align="center" valign="top">No</td>
     </tr>
     <tr>
       <td valign="top">failonerror</td>
  -    <td valign="top">flag to indicate whether to halt the build on 
  -    any error.</td>
  -    <td align="center" valign="top">No, default is <I>true</I></td>
  -  </tr>  
  +    <td valign="top">flag to indicate whether to halt the build on
  +    any error.  The default value is <code>true</code>.</td>
  +    <td align="center" valign="top">No.</td>
  +  </tr>
     <tr>
       <td valign="top">includefilenames</td>
       <td valign="top">Include filename(s) before file contents.
  -    Valid only when the files attribute is specified.</td>
  -    <td align="center" valign="top">No, default is <I>false</I></td>
  +    Valid only when the <code>plain</code> encoding is used.  The default
  +    value is <code>false</code>.</td>
  +    <td align="center" valign="top">No</td>
     </tr>
  -  
     <tr>
       <td valign="top">mailhost</td>
  -    <td valign="top">Host name of the mail server.</td>
  -    <td align="center" valign="top">No, default is &quot;localhost&quot;</td>
  +    <td valign="top">Host name of the SMTP server.  The default value is
  +    <code>localhost</code>.</td>
  +    <td align="center" valign="top">No</td>
     </tr>
     <tr>
       <td valign="top">mailport</td>
  -    <td valign="top">Port of the mail server.</td>
  -    <td align="center" valign="top">No, default to SMTP default (25)</td>
  +    <td valign="top">TCP port of the SMTP server.  The default value is 25.</td>
  +    <td align="center" valign="top">No</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">encoding</td>
  +    <td valign="top">Specifies the encoding to use for the content of the email.
  +    Values are <code>mime</code>, <code>uu</code>, <code>plain</code>, or
  +      <code>auto</code>.  The default value is <code>auto</code>.</td>
  +    <td align="center" valign="top">No</td>
     </tr>
     <tr>
       <td valign="top">subject</td>
  @@ -69,13 +100,84 @@
       <td align="center" valign="top">No</td>
     </tr>
   </table>
  +
  +<h3>Parameters specified as nested elements</h3>
  +
  +<h4>to / cc / bcc / from</h4>
  +<p>Adds an email address element.  It takes the following attributes:</p>
  +
  +<table width="60%" border="1" cellpadding="2" cellspacing="0">
  +  <tr>
  +    <td valign="top"><b>Attribute</b></td>
  +    <td valign="top"><b>Description</b></td>
  +    <td align="center" valign="top"><b>Required</b></td>
  +  </tr>
  +  <tr>
  +    <td valign="top">name</td>
  +    <td valign="top">The display name for the address.</td>
  +    <td align="center" valign="top">No</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">address</td>
  +    <td valign="top">The email address.</td>
  +    <td align="center" valign="top">Yes</td>
  +  </tr>
  +</table>
  +
  +<h4>message</h4>
  +
  +<p>Specifies the message to include in the email body.  It takes the following
  +attributes:</p>
  +
  +<table width="60%" border="1" cellpadding="2" cellspacing="0">
  +  <tr>
  +    <td valign="top"><b>Attribute</b></td>
  +    <td valign="top"><b>Description</b></td>
  +    <td align="center" valign="top"><b>Required</b></td>
  +  </tr>
  +  <tr>
  +    <td valign="top">src</td>
  +    <td valign="top">The file to use as the message.</td>
  +    <td align="center" valign="top">No</td>
  +  </tr>
  +  <tr>
  +    <td valign="top">mimetype</td>
  +    <td valign="top">The content type to use for the message.</td>
  +    <td align="center" valign="top">No</td>
  +  </tr>
  +</table>
  +
  +<p>If the <code>src</code> attribute is not specified, then text can be added
  +inside the <code>&lt;message&gt;</code> element.</p>
  +
   <h3>Examples</h3>
  -<pre>
  -  &lt;mail from=&quot;me&quot; tolist=&quot;you&quot; subject=&quot;Results of nightly build&quot;
  -        files=&quot;build.log&quot;/&gt;</pre>
  -<p>Sends an eMail from <i>me</i> to <i>you</i> with a subject of 
  -<i>Results of nightly build</i> and includes the contents of <i>build.log</i>
  -in the body of the message.</p>
  +
  +<blockquote><pre>
  +&lt;mail from=&quot;me&quot;
  +      tolist=&quot;you&quot;
  +      subject=&quot;Results of nightly build&quot;
  +      files=&quot;build.log&quot; /&gt;
  +</pre></blockquote>
  +
  +<p>Sends an email from <i>me</i> to <i>you</i> with a subject of
  +<i>Results of nightly build</i> and includes the contents of the file
  +<i>build.log</i> in the body of the message.</p>
  +
  +<blockquote><pre>
  +&lt;mail mailhost=&quot;smtp.myisp.com&quot; mailport=&quot;1025&quot; subject=&quot;Test build&quot;&gt;
  +  &lt;from name=&quot;me@myisp.com&quot;&gt;
  +  &lt;to name=&quot;all@xyz.com&quot;&gt;
  +  &lt;message&gt;A new nightly build has completed&lt;/message&gt;
  +  &lt;fileset dir=&quot;dist&quot;&gt;
  +    &lt;includes name=&quot;**/*.zip&quot;/&gt;
  +  &lt;/fileset&gt;
  +&lt;/mail&gt;
  +</pre></blockquote>
  +
  +<p>Sends an eMail from <i>me@myisp.com</i> to <i>all@xyz.com</i> with a subject of
  +<i>Test Build</i> and attaches any zip files from the dist directory.&nbsp; The
  +task will attempt to use JavaMail and fall back to UU encoding or no encoding in
  +that order depending on what support classes are available.</p>
   <hr>
   <p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
   Reserved.</p>
  
  
  
  1.7       +8 -5      jakarta-ant/docs/manual/OptionalTasks/mimemail.html
  
  Index: mimemail.html
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/docs/manual/OptionalTasks/mimemail.html,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- mimemail.html	3 Feb 2002 22:09:09 -0000	1.6
  +++ mimemail.html	5 Feb 2002 09:32:47 -0000	1.7
  @@ -8,10 +8,13 @@
   <body>
   
   <h2><a name="mimemail">MimeMail</a></h2>
  +
  +<h3><i>Deprecated</i></h3>
  +<p><i>This task has been deprecated.  Use the <a href="../CoreTasks/mail.html">mail</a> task instead.</i></p>
  +
   <h3>Description</h3>
  -<p>Sends SMTP mail with MIME attachments.&nbsp;&nbsp; If&nbsp; no attachments
  -are needed, use the built-in <a href="../CoreTasks/mail.html">Mail</a>
  -task.&nbsp; <a href="http://java.sun.com/products/javamail/index.html">JavaMail</a>
  +<p>Sends SMTP mail with MIME attachments.
  +<a href="http://java.sun.com/products/javamail/index.html">JavaMail</a>
   and <a href="http://java.sun.com/products/javabeans/glasgow/jaf.html">Java
   Activation Framework</a> are required for this task.</p>
   <p>Multiple files can be attached using <a href="../CoreTypes/fileset.html">FileSets.</a></p>
  @@ -79,7 +82,7 @@
   </table>
   <h3>Examples</h3>
   <p><b>Send a single HTML file as the body of a message</b></p>
  -<pre>    &lt;mimemail messageMimeType=&quot;text/html&quot; messageFile=&quot;overview-summary.html&quot; 
  +<pre>    &lt;mimemail messageMimeType=&quot;text/html&quot; messageFile=&quot;overview-summary.html&quot;
           tolist=&quot;you&quot; subject=&quot;JUnit Test Results: ${TODAY}&quot; from=&quot;me&quot;/&gt;</pre>
   <p><b>Sends all files in a directory as attachments</b></p>
   <pre>    &lt;mimemail message=&quot;See attached files&quot; tolist=&quot;you&quot; subject=&quot;Attachments&quot; from=&quot;me&quot;&gt;
  @@ -88,7 +91,7 @@
           &lt;/fileset&gt;
       &lt;/mimemail&gt;
   </pre>
  -<hr><p align="center">Copyright &copy; 2001 Apache Software Foundation. All rights
  +<hr><p align="center">Copyright &copy; 2001-2002 Apache Software Foundation. All rights
   Reserved.</p>
   
   </body>
  
  
  
  1.10      +8 -205    jakarta-ant/src/main/org/apache/tools/ant/taskdefs/SendEmail.java
  
  Index: SendEmail.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/SendEmail.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SendEmail.java	10 Jan 2002 13:59:32 -0000	1.9
  +++ SendEmail.java	5 Feb 2002 09:32:47 -0000	1.10
  @@ -51,23 +51,10 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    */
  - 
  -package org.apache.tools.ant.taskdefs;
   
  -import java.io.PrintStream;
  -import java.io.File;
  -import java.io.BufferedInputStream;
  -import java.io.FileInputStream;
  -import java.io.IOException;
  -import java.util.Vector;
  -import java.util.StringTokenizer;
  -import java.util.Enumeration;
  -import org.apache.tools.mail.ErrorInQuitException;
  -import org.apache.tools.mail.MailMessage;
  +package org.apache.tools.ant.taskdefs;
   
  -import org.apache.tools.ant.Task;
  -import org.apache.tools.ant.Project;
  -import org.apache.tools.ant.BuildException;
  +import org.apache.tools.ant.taskdefs.email.EmailTask;
   
   /**
    * A task to send SMTP email.
  @@ -119,200 +106,16 @@
    * @author glenn_twiggs@bmc.com
    * @author <a href="mailto:umagesh@rediffmail.com">Magesh Umasankar</a>
    */
  -public class SendEmail extends Task {
  -    private String from;
  -    private String mailhost = "localhost";
  -    private int mailport = MailMessage.DEFAULT_PORT;
  -    private String message;
  -    private String toList;
  -    private String subject;
  -    private Vector files = new Vector();
  -    private boolean includefilenames;
  -    /**
  -     * failure flag
  -     */
  -    private boolean failOnError = true;
  -    
  -  
  -    /** 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;
  -    }
  -
  +public class SendEmail extends EmailTask
  +{
       /**
        * Sets the mailport parameter of this build task.
        * @param value mail port name.
  -     */
  -    public void setMailport(Integer value){
  -        this.mailport = value.intValue();
  -    }
  -
  -    /**
  -     * 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()));
  -        }
  -    }
  -
  -    /**
  -     * Sets Includefilenames attribute
  -     *
  -     * @param includefilenames Set to true if file names are to be included.
  -     * @since 1.5
  -     */
  -    public void setIncludefilenames(boolean includefilenames) {
  -        this.includefilenames = includefilenames;
  -    }
  -
  -    /**
  -     * Sets the FailOnError attribute of the MimeMail object
        *
  -     * @param failOnError The new FailOnError value
  -     * @since 1.5
  +     * @deprecated Use {@link #setMailport(int)} instead.
        */
  -    public void setFailOnError(boolean failOnError) {
  -        this.failOnError = failOnError;
  +    public void setMailport( Integer value )
  +    {
  +        setMailport( value.intValue() );
       }
  -    
  -    /**
  -     * Executes this build task.
  -     *
  -     * @throws BuildException if there is an error during task execution.
  -     */
  -    public void execute() throws BuildException {
  -        try {
  -            MailMessage mailMessage = new MailMessage(mailhost);
  -            mailMessage.setPort(mailport);
  -
  -            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];
  -                        if (includefilenames) {
  -                            String filename = file.getName();
  -                            int filenamelength = filename.length();
  -                            out.println(filename);
  -                            for (int star=0; star < filenamelength; star++) {
  -                                out.print('=');
  -                            }
  -                            out.println();
  -                        }
  -                        BufferedInputStream in = null;
  -                        try {
  -                            in = new BufferedInputStream(
  -                                new FileInputStream(file), bufsize);
  -                            while ((length = in.read(buf, 0, bufsize)) != -1) {
  -                                out.write(buf, 0, length);
  -                            }
  -                            if (includefilenames) {
  -                                out.println();
  -                            }
  -                        } finally {
  -                            if (in != null) {
  -                                try {
  -                                    in.close();
  -                                } catch (IOException ioe) {}
  -                            }
  -                        }
  -
  -                    } 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) {
  -            String err="IO error sending mail: "+ioe.toString();
  -            if (!failOnError || ioe instanceof ErrorInQuitException) {
  -                log(err, Project.MSG_ERR);
  -            } else {
  -                throw new BuildException(err,ioe,location);
  -            }
  -        }
  -    }
  -
   }
  
  
  
  1.108     +1 -1      jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties
  
  Index: defaults.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties,v
  retrieving revision 1.107
  retrieving revision 1.108
  diff -u -r1.107 -r1.108
  --- defaults.properties	31 Jan 2002 19:47:40 -0000	1.107
  +++ defaults.properties	5 Feb 2002 09:32:47 -0000	1.108
  @@ -38,7 +38,7 @@
   execon=org.apache.tools.ant.taskdefs.ExecuteOn
   antcall=org.apache.tools.ant.taskdefs.CallTarget
   sql=org.apache.tools.ant.taskdefs.SQLExec
  -mail=org.apache.tools.ant.taskdefs.SendEmail
  +mail=org.apache.tools.ant.taskdefs.email.EmailTask
   fail=org.apache.tools.ant.taskdefs.Exit
   war=org.apache.tools.ant.taskdefs.War
   uptodate=org.apache.tools.ant.taskdefs.UpToDate
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/email/EmailAddress.java
  
  Index: EmailAddress.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 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", "Ant", 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.email;
  
  /**
   * Holds an email address.
   *
   * @author roxspring@yahoo.com Rob Oxspring
   * @since 1.5
   */
  public class EmailAddress
  {
      private String name;
      private String address;
  
      /** Creates an empty email address
       */
      public EmailAddress()
      {
      }
  
      /** Creates a new email address based on the given string
       * @param address the email address
       */
      public EmailAddress( String address )
      {
          this.address = address;
      }
  
      /** sets the personal / display name of the address
       * @param name the display name
       */
      public void setName( String name )
      {
          this.name = name;
      }
  
      /** sets the email address
       * @param address the actual email address
       */
      public void setAddress( String address )
      {
          this.address = address;
      }
  
      /** Constructs a string "name &lt;address&gt;" or "address"
       * @return a string representation of the address
       */
      public String toString()
      {
          if( name == null )
          {
              return address;
          }
          else
          {
              return name + " <" + address + ">";
          }
      }
  
      /** returns the address
       * @return the address part
       */
      public String getAddress()
      {
          return address;
      }
  
      /** returns the display name
       * @return the display name part
       */
      public String getName()
      {
          return name;
      }
  }
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java
  
  Index: EmailTask.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2002 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", "Ant", 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.email;
  
  // Ant imports
  
  import java.io.File;
  import java.util.Enumeration;
  import java.util.StringTokenizer;
  import java.util.Vector;
  import org.apache.tools.ant.BuildException;
  import org.apache.tools.ant.DirectoryScanner;
  import org.apache.tools.ant.Project;
  import org.apache.tools.ant.Task;
  import org.apache.tools.ant.types.EnumeratedAttribute;
  import org.apache.tools.ant.types.FileSet;
  
  /**
   * A task to send SMTP email. This is a refactoring of the SendMail and MimeMail
   * tasks such that both are within a single task. The functionality of SendMail can
   * be found in {@link org.apache.tools.ant.taskdefs.email.PlainMailer PlainMailer},
   * MimeMail in {@link org.apache.tools.ant.taskdefs.email.MimeMailer MimeMailer},
   * and a new intermediate UU format.
   * {@link org.apache.tools.ant.taskdefs.email.UUMailer UUMailer}.
   *
   * @author Magesh Umasankar
   * @author glenn_twiggs@bmc.com
   * @author steve_l@iseran.com steve loughran
   * @author erik@hatcher.net Erik Hatcher
   * @author paulo.gaspar@krankikom.de Paulo Gaspar
   * @author roxspring@yahoo.com Rob Oxspring
   * @created 10 Dec 2001
   * @since 1.5
   */
  public class EmailTask
      extends Task
  {
      /** Constant to show that the best available mailer should be used.
       */
      public final static String AUTO = "auto";
      /** Constant to allow the Mime mailer to be requested
       */
      public final static String MIME = "mime";
      /** Constant to allow the UU mailer to be requested
       */
      public final static String UU = "uu";
      /** Constant to allow the plaintext mailer to be requested
       */
      public final static String PLAIN = "plain";
  
      /** Enumerates the encoding constants
       */
      public static class Encoding extends EnumeratedAttribute
      {
          /** finds the valid encoding values
           * @return a list of valid entries
           */
          public String[] getValues()
          {
              return new String[]
              {AUTO, MIME, UU, PLAIN};
          }
      }
  
      private String encoding = AUTO;
      /**
       * host running SMTP
       */
      private String host = "localhost";
      private int port = 25;
      /**
       * subject field
       */
      private String subject = null;
      /**
       * any text
       */
      private Message message = null;
      /** failure flag */
      private boolean failOnError = true;
      private boolean includeFileNames = false;
      private boolean simpleMessage = false;
      private String messageMimeType = null;
  
      /**
       * sender
       */
      private EmailAddress from = null;
      /**
       * TO recipients
       */
      private Vector toList = new Vector();
      /**
       * CC (Carbon Copy) recipients
       */
      private Vector ccList = new Vector();
      /**
       * BCC (Blind Carbon Copy) recipients
       */
      private Vector bccList = new Vector();
  
      /**
       * file list
       */
      private Vector files = new Vector();
      private Vector filesets = new Vector();
  
      /** Allows the build writer to choose the preferred encoding method
       * @param encoding The encoding (one of AUTO,MIME,UU,PLAIN)
       */
      public void setEncoding( Encoding encoding )
      {
          this.encoding = encoding.getValue();
      }
  
      /** Sets the mail server port
       * @see setPort(int)
       * @param port The port to use
       */
      public void setMailport( int port )
      {
          this.port = port;
      }
  
      /** Sets the host
       * @see setHost()
       * @param host The host to connect to
       */
      public void setMailhost( String host )
      {
          this.host = host;
      }
  
      /** Sets the subject line of the email
       *
       * @param subject Subject of this email.
       */
      public void setSubject( String subject )
      {
          this.subject = subject;
      }
  
      /** Shorthand method to set the message
       * @param message Message body of this email.
       */
      public void setMessage( String message )
      {
          if( this.message != null )
          {
              throw new BuildException( "Only one message can be sent in an email" );
          }
  
          this.message = new Message( message );
      }
  
      /** Shorthand method to set the message from a file
       * @param file The file from which to take the message
       */
      public void setMessageFile( File file )
      {
          if( this.message != null )
          {
              throw new BuildException( "Only one message can be sent in an email" );
          }
  
          this.message = new Message( file );
      }
  
      /** Shorthand method to set type of the text message, text/plain by default but text/html
       * or text/xml is quite feasible.
       *
       * @param type The new MessageMimeType value
       */
      public void setMessageMimeType( String type )
      {
          this.messageMimeType = type;
      }
  
      /** Add a message elemnt
       * @param message The message object
       * @throws BuildException if a message has already been added
       */
      public void addMessage( Message message )
          throws BuildException
      {
          if( this.message != null )
          {
              throw new BuildException( "Only one message can be sent in an email" );
          }
  
          this.message = message;
      }
  
      /** Adds a from address element
       * @param address The address to send from
       */
      public void addFrom( EmailAddress address )
      {
          if( this.from != null )
          {
              throw new BuildException( "Emails can only be from one address" );
          }
  
          this.from = address;
      }
  
      /** Shorthand to set the from address element
       *
       * @param address The address to send mail from
       */
      public void setFrom( String address )
      {
          if( this.from != null )
          {
              throw new BuildException( "Emails can only be from one address" );
          }
  
          this.from = new EmailAddress( address );
      }
  
      /** Adds a to address element
       * @param address An email address
       */
      public void addTo( EmailAddress address )
      {
          toList.addElement( address );
      }
  
      /** Adds "to" address elements
       *
       *
       * @param list Comma separated list of addresses
       */
      public void setToList( String list )
      {
          StringTokenizer tokens = new StringTokenizer( list, "," );
  
          while( tokens.hasMoreTokens() )
          {
              toList.addElement( new EmailAddress( tokens.nextToken() ) );
          }
      }
  
      /** Adds "cc" address element
       * @param address The email address
       */
      public void addCc( EmailAddress address )
      {
          ccList.addElement( address );
      }
  
      /** Adds "cc" address elements
       *
       *
       * @param list Comma separated list of addresses
       */
      public void setCcList( String list )
      {
          StringTokenizer tokens = new StringTokenizer( list, "," );
  
          while( tokens.hasMoreTokens() )
          {
              ccList.addElement( new EmailAddress( tokens.nextToken() ) );
          }
      }
  
      /** Adds "bcc" address elements
       * @param address The email address
       */
      public void addBcc( EmailAddress address )
      {
          bccList.addElement( address );
      }
  
      /** Adds "bcc" address elements
       *
       *
       * @param list comma separated list of addresses
       */
      public void setBccList( String list )
      {
          StringTokenizer tokens = new StringTokenizer( list, "," );
  
          while( tokens.hasMoreTokens() )
          {
              bccList.addElement( new EmailAddress( tokens.nextToken() ) );
          }
      }
  
      /** Indicates whether BuildExceptions should be passed back to the core
       *
       * @param failOnError The new FailOnError value
       */
      public void setFailOnError( boolean failOnError )
      {
          this.failOnError = failOnError;
      }
  
      /** Adds a list of files to be attached
       *
       * @param filenames Comma separated list of files
       */
      public void setFiles( String filenames )
      {
          StringTokenizer t = new StringTokenizer( filenames, ", " );
  
          while( t.hasMoreTokens() )
          {
              files.addElement( project.resolveFile( t.nextToken() ) );
          }
      }
  
      /** Adds a set of files (nested fileset attribute).
       * @param fs The fileset
       */
      public void addFileset( FileSet fs )
      {
          filesets.addElement( fs );
      }
  
      /** Sets Includefilenames attribute
       *
       * @param includeFileNames Whether to include filenames in the text of the message
       */
      public void setIncludefilenames( boolean includeFileNames )
      {
          this.includeFileNames = includeFileNames;
      }
  
      /** Identifies whether file names should be included
       * @return Identifies whether file names should be included
       */
      public boolean getIncludeFileNames()
      {
          return includeFileNames;
      }
  
      /** Sends an email
       */
      public void execute()
      {
          try
          {
              Mailer mailer = null;
  
              // prepare for the auto select mechanism
              boolean autoFound = false;
  
              // try MIME format
              if( encoding.equals( MIME ) || ( encoding.equals( AUTO ) && !autoFound ) )
              {
                  try
                  {
                      mailer = (Mailer)getClass().forName( "org.apache.tools.ant.taskdefs.email.MimeMailer" ).newInstance();
                      autoFound = true;
                      log( "Using MIME mail", Project.MSG_VERBOSE );
                  }
                  catch( Throwable e )
                  {
                      log( "Failed to initialise MIME mail", Project.MSG_WARN );
                  }
              }
  
              // try UU format
              if( encoding.equals( UU ) || ( encoding.equals( AUTO ) && !autoFound ) )
              {
                  try
                  {
                      mailer = (Mailer)getClass().forName( "org.apache.tools.ant.taskdefs.email.UUMailer" ).newInstance();
                      autoFound = true;
                      log( "Using UU mail", Project.MSG_VERBOSE );
                  }
                  catch( Throwable e )
                  {
                      log( "Failed to initialise UU mail", Project.MSG_WARN );
                  }
              }
  
              // try plain format
              if( encoding.equals( PLAIN ) || ( encoding.equals( AUTO ) && !autoFound ) )
              {
                  mailer = new PlainMailer();
                  autoFound = true;
                  log( "Using plain mail", Project.MSG_VERBOSE );
              }
  
              // a valid mailer must be present by now
              if( mailer == null )
              {
                  throw new BuildException( "Failed to initialise encoding: " + encoding );
              }
  
              // a valid message is required
              if( message == null )
              {
                  throw new BuildException( "A message is required" );
              }
  
              // an address to send from is required
              if( from == null || from.getAddress() == null )
              {
                  throw new BuildException( "A from element is required" );
              }
  
              // at least one address to send to/cc/bcc is required
              if( toList.isEmpty() && ccList.isEmpty() && bccList.isEmpty() )
              {
                  throw new BuildException( "At least one of to,cc or bcc must be supplied" );
              }
  
              // set the mimetype if not done already (and required)
              if( messageMimeType != null )
              {
                  if( message.isMimeTypeSpecified() )
                  {
                      throw new BuildException( "The mime type can only be specified in one location" );
                  }
                  else
                  {
                      message.setMimeType( messageMimeType );
                  }
              }
  
              // identify which files should be attached
              Enumeration e = filesets.elements();
              while( e.hasMoreElements() )
              {
                  FileSet fs = (FileSet)e.nextElement();
  
                  DirectoryScanner ds = fs.getDirectoryScanner( project );
                  String[] includedFiles = ds.getIncludedFiles();
                  File baseDir = ds.getBasedir();
  
                  for( int j = 0; j < includedFiles.length; ++j )
                  {
                      File file = new File( baseDir, includedFiles[ j ] );
                      files.addElement( file );
                  }
              }
  
              // let the user know what's going to happen
              log( "Sending email: " + subject, Project.MSG_INFO );
              log( "From " + from, Project.MSG_VERBOSE );
              log( "To " + toList, Project.MSG_VERBOSE );
              log( "Cc " + ccList, Project.MSG_VERBOSE );
              log( "Bcc " + bccList, Project.MSG_VERBOSE );
  
              // pass the params to the mailer
              mailer.setHost( host );
              mailer.setPort( port );
              mailer.setMessage( message );
              mailer.setFrom( from );
              mailer.setToList( toList );
              mailer.setCcList( ccList );
              mailer.setBccList( bccList );
              mailer.setFiles( files );
              mailer.setSubject( subject );
              mailer.setTask( this );
              mailer.setIncludeFileNames( includeFileNames );
  
              // send the email
              mailer.send();
  
              // let the user know what happened
              int count = files.size();
              log( "Sent email with " + count + " attachment" + ( count == 1?"":"s" ), Project.MSG_INFO );
          }
          catch( BuildException e )
          {
              log( "Failed to send email", Project.MSG_WARN );
              if( failOnError )
              {
                  throw e;
              }
          }
      }
  }
  
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/email/Mailer.java
  
  Index: Mailer.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 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", "Ant", 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.email;
  
  import java.util.Vector;
  import org.apache.tools.ant.BuildException;
  import org.apache.tools.ant.Task;
  
  /**
   * Base class for the various emailing implementations.
   *
   * @author roxspring@yahoo.com Rob Oxspring
   * @since 1.5
   */
  public abstract class Mailer
  {
      protected String host = null;
      protected int port = -1;
      protected Message message;
      protected EmailAddress from;
      protected Vector toList = null;
      protected Vector ccList = null;
      protected Vector bccList = null;
      protected Vector files = null;
      protected String subject = null;
      protected Task task;
      protected boolean includeFileNames = false;
  
      /** sets the mail server
       * @param host
       */
      public void setHost( String host )
      {
          this.host = host;
      }
  
      /** sets the smtp port
       * @param port
       */
      public void setPort( int port )
      {
          this.port = port;
      }
  
      /** sets the message
       * @param m
       */
      public void setMessage( Message m )
      {
          this.message = m;
      }
  
      /** sets the address to send from
       * @param from
       */
      public void setFrom( EmailAddress from )
      {
          this.from = from;
      }
  
      /** set the to addresses
       * @param list
       */
      public void setToList( Vector list )
      {
          this.toList = list;
      }
  
      /** sets the cc addresses
       * @param list
       */
      public void setCcList( Vector list )
      {
          this.ccList = list;
      }
  
      /** sets the bcc addresses
       * @param list
       */
      public void setBccList( Vector list )
      {
          this.bccList = list;
      }
  
      /** sets the files to attach
       * @param files
       */
      public void setFiles( Vector files )
      {
          this.files = files;
      }
  
      /** sets the subject
       * @param subject
       */
      public void setSubject( String subject )
      {
          this.subject = subject;
      }
  
      /** sets the owning task
       * @param task
       */
      public void setTask( Task task )
      {
          this.task = task;
      }
  
      /** indicates whether filenames should be listed in the body
       * @param b
       */
      public void setIncludeFileNames( boolean b )
      {
          this.includeFileNames = b;
      }
  
      /** This method should send the email
       * @throws BuildException
       */
      public abstract void send()
          throws BuildException;
  }
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/email/Message.java
  
  Index: Message.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 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", "Ant", 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.email;
  
  import java.io.BufferedReader;
  import java.io.File;
  import java.io.FileReader;
  import java.io.IOException;
  import java.io.PrintStream;
  
  /**
   * Class representing an email message.
   *
   * @author roxspring@yahoo.com Rob Oxspring
   * @since 1.5
   */
  public class Message
  {
      private File messageSource = null;
      private StringBuffer buffer = new StringBuffer();
      private String mimeType = "text/plain";
      private boolean specified = false;
  
      /** creates a new empty message
       */
      public Message()
      {
      }
  
      /** Creates a new message based on the given string
       * @param text the message
       */
      public Message( String text )
      {
          addText( text );
      }
  
      /** Creates a new message using the contents of the given file.
       * @param file the source of the message
       */
      public Message( File file )
      {
          messageSource = file;
      }
  
      /** Adds a textual part of the message
       * @param text some text to add
       */
      public void addText( String text )
      {
          buffer.append( text );
      }
  
      /** Sets the source file of the message
       * @param src the source of the message
       */
      public void setSrc( File src )
      {
          this.messageSource = src;
      }
  
      /** Sets the content type for the message
       * @param mimeType a mime type e.g. "text/plain"
       */
      public void setMimeType( String mimeType )
      {
          this.mimeType = mimeType;
          specified = true;
      }
  
      /** Returns the content type
       * @return the mime type
       */
      public String getMimeType()
      {
          return mimeType;
      }
  
      /** prints the message onto an output stream
       * @param out The print stream to write to
       * @throws IOException if an error occurs
       */
      public void print( PrintStream out )
          throws IOException
      {
          if( messageSource != null )
          {
              // Read message from a file
              FileReader freader = new FileReader( messageSource );
              try
              {
                  BufferedReader in = new BufferedReader( freader );
                  String line = null;
  
                  while( ( line = in.readLine() ) != null )
                  {
                      out.println( line );
                  }
              }
              finally {
                  freader.close();
              }
          }
          else
          {
              out.println( buffer );
          }
      }
  
      /** returns true iff the mimeType has been set.
       * @return false if the default value is in use
       */
      public boolean isMimeTypeSpecified()
      {
          return specified;
      }
  }
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java
  
  Index: MimeMailer.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 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", "Ant", 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.email;
  
  import java.io.ByteArrayOutputStream;
  import java.io.File;
  import java.io.IOException;
  import java.io.PrintStream;
  import java.io.UnsupportedEncodingException;
  import java.util.Enumeration;
  import java.util.Properties;
  import java.util.Vector;
  import javax.activation.DataHandler;
  import javax.activation.FileDataSource;
  import javax.mail.Message;
  import javax.mail.MessagingException;
  import javax.mail.Session;
  import javax.mail.Transport;
  import javax.mail.internet.AddressException;
  import javax.mail.internet.InternetAddress;
  import javax.mail.internet.MimeBodyPart;
  import javax.mail.internet.MimeMessage;
  import javax.mail.internet.MimeMultipart;
  import org.apache.tools.ant.BuildException;
  
  /**
   * Uses the JavaMail classes to send Mime format email.
   *
   * @author roxspring@yahoo.com Rob Oxspring
   * @since 1.5
   */
  public class MimeMailer
      extends Mailer
  {
      /** Sends the email
       */
      public void send()
      {
          try
          {
              Properties props = new Properties();
              props.put( "mail.smtp.host", host );
              props.put( "mail.smtp.port", String.valueOf( port ) );
  
              //Aside, the JDK is clearly unaware of the scottish 'session', which
              //involves excessive quantities of alcohol :-)
              Session sesh = Session.getDefaultInstance( props, null );
  
              //create the message
              MimeMessage msg = new MimeMessage( sesh );
              MimeMultipart attachments = new MimeMultipart();
  
              //set the sender
              if( from.getName() == null )
              {
                  msg.setFrom( new InternetAddress( from.getAddress() ) );
              }
              else
              {
                  msg.setFrom( new InternetAddress( from.getAddress(), from.getName() ) );
              }
  
              msg.setRecipients( Message.RecipientType.TO, internetAddresses( toList ) );
              msg.setRecipients( Message.RecipientType.CC, internetAddresses( ccList ) );
              msg.setRecipients( Message.RecipientType.BCC, internetAddresses( bccList ) );
  
              if( subject != null )
              {
                  msg.setSubject( subject );
              }
  
              ByteArrayOutputStream baos = new ByteArrayOutputStream();
              PrintStream out = new PrintStream( baos );
              message.print( out );
              out.close();
  
              MimeBodyPart textbody = new MimeBodyPart();
              textbody.setContent( baos.toString(), message.getMimeType() );
              attachments.addBodyPart( textbody );
  
              Enumeration e = files.elements();
              while( e.hasMoreElements() )
              {
                  File file = (File)e.nextElement();
  
                  MimeBodyPart body;
                  body = new MimeBodyPart();
                  if( !file.exists() || !file.canRead() )
                  {
                      throw new BuildException( "File \"" + file.getAbsolutePath()
                                                + "\" does not exist or is not readable." );
                  }
                  FileDataSource fileData = new FileDataSource( file );
                  DataHandler fileDataHandler = new DataHandler( fileData );
                  body.setDataHandler( fileDataHandler );
                  body.setFileName( file.getName() );
                  attachments.addBodyPart( body );
              }
  
              msg.setContent( attachments );
              Transport.send( msg );
          }
          catch( MessagingException e )
          {
              throw new BuildException( "Problem while sending mime mail:", e );
          }
          catch( IOException e )
          {
              throw new BuildException( "Problem while sending mime mail:", e );
          }
      }
  
      private static InternetAddress[] internetAddresses( Vector list )
          throws AddressException, UnsupportedEncodingException
      {
          InternetAddress addrs[] = new InternetAddress[ list.size() ];
          for( int i = 0; i < list.size(); ++i )
          {
              EmailAddress addr = (EmailAddress)list.elementAt( i );
  
              if( addr.getName() == null )
              {
                  addrs[ i ] = new InternetAddress( addr.getAddress() );
              }
              else
              {
                  addrs[ i ] = new InternetAddress( addr.getAddress(), addr.getName() );
              }
          }
  
          return addrs;
      }
  }
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/email/PlainMailer.java
  
  Index: PlainMailer.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 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", "Ant", 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.email;
  
  import java.io.BufferedInputStream;
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.IOException;
  import java.io.PrintStream;
  import java.util.Enumeration;
  import org.apache.tools.ant.BuildException;
  import org.apache.tools.mail.MailMessage;
  
  /**
   * Class responsible for sending email through raw protocol methods.
   *
   * @author roxspring@yahoo.com Rob Oxspring
   * @since 1.5
   */
  public class PlainMailer
      extends Mailer
  {
      /** Sends the email using the apache {@link org.apache.tools.mail.MailMessage MailMessage} class.
       */
      public void send()
      {
          try
          {
              MailMessage mailMessage = new MailMessage( host );
              mailMessage.setPort( port );
  
              mailMessage.from( from.toString() );
  
              Enumeration e;
  
              e = toList.elements();
              while( e.hasMoreElements() )
              {
                  mailMessage.to( e.nextElement().toString() );
              }
  
              e = ccList.elements();
              while( e.hasMoreElements() )
              {
                  mailMessage.cc( e.nextElement().toString() );
              }
  
              e = bccList.elements();
              while( e.hasMoreElements() )
              {
                  mailMessage.bcc( e.nextElement().toString() );
              }
  
              if( subject != null )
              {
                  mailMessage.setSubject( subject );
              }
  
              mailMessage.setHeader( "Content-Type", message.getMimeType() );
  
              PrintStream out = mailMessage.getPrintStream();
  
              message.print( out );
  
              e = files.elements();
              while( e.hasMoreElements() )
              {
                  File file = (File)e.nextElement();
                  attach( file, out );
              }
  
              mailMessage.sendAndClose();
          }
          catch( IOException ioe )
          {
              throw new BuildException( "IO error sending mail", ioe );
          }
  
      }
  
      /** Attaches a file to this email
       * @param file The file to attache
       * @param out The message stream to add to
       * @throws IOException if errors occur
       */
      protected void attach( File file, PrintStream out )
          throws IOException
      {
          if( !file.exists() || !file.canRead() )
          {
              throw new BuildException( "File \"" + file.getName()
                                        + "\" does not exist or is not readable." );
          }
  
          if( includeFileNames )
          {
              out.println();
              String filename = file.getName();
              int filenamelength = filename.length();
              out.println( filename );
              for( int star = 0; star < filenamelength; star++ )
              {
                  out.print( '=' );
              }
              out.println();
          }
  
          int length;
          byte[] buf = new byte[ 1024 ];
          FileInputStream finstr = new FileInputStream( file );
          try
          {
              BufferedInputStream in = new BufferedInputStream( finstr, buf.length );
              while( ( length = in.read( buf ) ) != -1 )
              {
                  out.write( buf, 0, length );
              }
          }
          finally
          {
              finstr.close();
          }
      }
  }
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/email/UUMailer.java
  
  Index: UUMailer.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 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", "Ant", 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.email;
  
  import java.io.BufferedInputStream;
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.IOException;
  import java.io.PrintStream;
  import org.apache.tools.ant.BuildException;
  import sun.misc.UUEncoder;
  
  /**
   * An emailer that uuencodes attachments.
   *
   * @author roxspring@yahoo.com Rob Oxspring
   * @since 1.5
   */
  class UUMailer
      extends PlainMailer
  {
      protected void attach( File file, PrintStream out )
          throws IOException
      {
          if( !file.exists() || !file.canRead() )
          {
              throw new BuildException( "File \"" + file.getName()
                                        + "\" does not exist or is not readable." );
          }
  
          FileInputStream finstr = new FileInputStream( file );
          try
          {
              BufferedInputStream in = new BufferedInputStream( finstr );
              UUEncoder encoder = new UUEncoder( file.getName() );
              encoder.encode( in, out );
  
          }
          finally
          {
              finstr.close();
          }
      }
  }
  
  
  1.5       +12 -360   jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/net/MimeMail.java
  
  Index: MimeMail.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/net/MimeMail.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- MimeMail.java	14 Jan 2002 00:59:41 -0000	1.4
  +++ MimeMail.java	5 Feb 2002 09:32:48 -0000	1.5
  @@ -1,7 +1,7 @@
   /*
    * The Apache Software License, Version 1.1
    *
  - * Copyright (c) 2001 The Apache Software Foundation.  All rights
  + * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
    * reserved.
    *
    * Redistribution and use in source and binary forms, with or without
  @@ -51,46 +51,10 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    */
  -
   package org.apache.tools.ant.taskdefs.optional.net;
   
  -
  -// Standard SDK imports
  -import java.util.Properties;
  -import java.util.Vector;
  -import java.io.File;
  -import java.io.FileInputStream;
  -import java.io.IOException;
  -
  -//imported for the mail api
  -
  -import javax.mail.Session;
  -import javax.mail.Message;
  -
  -
  -
  -import javax.mail.MessagingException;
  -import javax.mail.Transport;
  -import javax.mail.internet.InternetAddress;
  -import javax.mail.internet.MimeMessage;
  -import javax.mail.internet.MimeBodyPart;
  -import javax.mail.internet.MimeMultipart;
  -import javax.mail.internet.AddressException;
  -
  -//imported for data source and handler
  -import javax.activation.DataHandler;
  -import javax.activation.FileDataSource;
  -
  -// Ant imports
  -import org.apache.tools.ant.Task;
   import org.apache.tools.ant.BuildException;
  -
  -import org.apache.tools.ant.DirectoryScanner;
  -import org.apache.tools.ant.Project;
  -
  -import org.apache.tools.ant.types.FileSet;
  -
  -
  +import org.apache.tools.ant.taskdefs.email.EmailTask;
   
   /**
    * A task to send SMTP email. This version has near identical syntax to
  @@ -98,337 +62,25 @@
    * activation.jar to compile and execute, which puts it clearly into the
    * very optional category.
    *
  + * @deprecated Use {@link EmailTask} instead.
  + *
    * @author glenn_twiggs@bmc.com
    * @author steve_l@iseran.com steve loughran
    * @author ehatcher@apache.org Erik Hatcher
    * @author paulo.gaspar@krankikom.de Paulo Gaspar
    * @created 01 May 2001
    */
  -public class MimeMail extends Task {
  -    /**
  -     * failure flag
  -     */
  -    private boolean failOnError = true;
  -
  -    /**
  -     * sender
  -     */
  -    private String from = null;
  -
  -    /**
  -     * host running SMTP
  -     */
  -    private String mailhost = "localhost";
  -
  -    /**
  -     * any text
  -     */
  -    private String message = null;
  -
  -
  -    /**
  -     *  message file (mutually exclusive from message)
  -     */
  -    private File messageFile = null;
  -
  -    /**
  -     * TO recipients
  -     */
  -    private String toList = null;
  -
  -    /**
  -     * CC (Carbon Copy) recipients
  -     */
  -    protected String   ccList  = null;
  -
  -    /**
  -     * BCC (Blind Carbon Copy) recipients
  -     */
  -    protected String   bccList  = null;
  -
  -    /**
  -     * subject field
  -     */
  -    private String subject = null;
  -
  -    /**
  -     * file list
  -     */
  -    private Vector filesets = new Vector();
  -
  -    /**
  -     * type of the text message, plaintext by default but text/html or
  -     * text/xml is quite feasible
  -     */
  -    private String messageMimeType = "text/plain";
  -
  -    /**
  -     * Creates new instance
  -     */
  -    public MimeMail() {
  -    }
  -
  -
  -    /**
  -     * Sets the FailOnError attribute of the MimeMail object
  -     *
  -     * @param failOnError The new FailOnError value
  -     */
  -    public void setFailOnError(boolean failOnError) {
  -        this.failOnError = failOnError;
  -    }
  -
  -    /**
  -     * Adds a set of files (nested fileset attribute).
  -     */
  -    public void addFileset(FileSet set) {
  -        filesets.addElement(set);
  -    }
  -
  -    /**
  -     * 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 toList parameter of this build task.
  -     *
  -     * @param toList Comma-separated list of email recipient addreses.
  -     */
  -    public void setCcList(String ccList) {
  -        this.ccList = ccList;
  -    }
  -
  -    /**
  -     * Sets the toList parameter of this build task.
  -     *
  -     * @param toList Comma-separated list of email recipient addreses.
  -     */
  -    public void setBccList(String bccList) {
  -        this.bccList = bccList;
  -    }
  -
  -
  -    /**
  -     * 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;
  -    }
  -
  -    public void setMessageFile(File messageFile) {
  -        this.messageFile = messageFile;
  -    }
  -
  -
  +public class MimeMail extends EmailTask
  +{
       /**
  -     * set type of the text message, plaintext by default but text/html
  -     * or text/xml is quite feasible
  +     * Executes this build task.
        *
  -     * @param type The new MessageMimeType value
  -     */
  -    public void setMessageMimeType(String type) {
  -        this.messageMimeType = type;
  -    }
  -
  -    /**
  -     * Sets the subject parameter of this build task.
  -     *
  -     * @param subject Subject of this email.
  -     */
  -    public void setSubject(String subject) {
  -        this.subject = subject;
  -    }
  -
  -
  -    /**
  -     * verify parameters
  -     *
  -     * @throws BuildException if something is invalid
  -     */
  -    public void validate() {
  -        if (from == null) {
  -            throw new BuildException("Attribute \"from\" is required.");
  -        }
  -
  -        if ((toList == null) && (ccList == null) && (bccList == null)) {
  -            throw new BuildException("Attribute \"toList\", \"ccList\" or \"bccList\" is required.");
  -        }
  -
  -        if (message == null && filesets.isEmpty() && messageFile == null) {
  -            throw new BuildException("FileSet, \"message\", or \"messageFile\" is required.");
  -        }
  -
  -        if (message != null && messageFile != null) {
  -            throw new BuildException("Only one of \"message\" or \"messageFile\" may be specified.");
  -        }
  -    }
  -
  -
  -    /**
  -     * Executes this build task. throws org.apache.tools.ant.BuildException
  -     * if there is an error during task execution.
  -     *
  -     * @exception BuildException Description of Exception
  +     * @exception BuildException On error.
        */
       public void execute()
  -        throws BuildException {
  -        try {
  -            validate();
  -            doMail();
  -        }
  -        catch (Exception e) {
  -            if (failOnError) {
  -                throw new BuildException(e);
  -            }
  -            else {
  -                String text = e.toString();
  -                log(text, Project.MSG_ERR);
  -            }
  -        }
  -    }
  -
  -
  -    // helper method to add recipients
  -    private static void addRecipients( MimeMessage msg,
  -                                       Message.RecipientType recipType,
  -                                       String addrUserName,
  -                                       String addrList
  -                                     ) throws MessagingException, BuildException {
  -        if ((null == addrList) || (addrList.trim().length() <= 0)) {
  -            return;
  -        }
  -
  -        try {
  -            InternetAddress[] addrArray = InternetAddress.parse(addrList);
  -
  -            if ((null == addrArray) || (0 == addrArray.length)) {
  -                throw new BuildException("Empty " + addrUserName + " recipients list was specified");
  -            }
  -
  -            msg.setRecipients(recipType, addrArray);
  -        }
  -        catch(AddressException ae) {
  -            throw new BuildException("Invalid " + addrUserName + " recipient list");
  -        }
  -    }
  -
  -    /**
  -     * here is where the mail is sent
  -     *
  -     * @exception MessagingException Description of Exception
  -     * @exception AddressException Description of Exception
  -     * @exception BuildException Description of Exception
  -     */
  -    public void doMail()
  -        throws MessagingException, AddressException, BuildException {
  -        Properties props = new Properties();
  -        props.put("mail.smtp.host", mailhost);
  -
  -        //Aside, the JDK is clearly unaware of the scottish 'session', which
  -        //involves excessive quantities of alcohol :-)
  -        Session sesh = Session.getDefaultInstance(props, null);
  -
  -        //create the message
  -        MimeMessage msg = new MimeMessage(sesh);
  -
  -        //set the sender
  -        log("message sender: " + from, Project.MSG_VERBOSE);
  -        msg.setFrom(new InternetAddress(from));
  -
  -        // add recipient lists
  -        addRecipients(msg, Message.RecipientType.TO,  "To",  toList);
  -        addRecipients(msg, Message.RecipientType.CC,  "Cc",  ccList);
  -        addRecipients(msg, Message.RecipientType.BCC, "Bcc", bccList);
  -
  -        if (subject != null) {
  -            log("subject: " + subject, Project.MSG_VERBOSE);
  -            msg.setSubject(subject);
  -        }
  -
  -        //now the complex bit; adding multiple mime objects. And guessing
  -        //the file type
  -        MimeMultipart attachments = new MimeMultipart();
  -
  -        //first a message
  -        if (messageFile != null) {
  -            int size = (int)messageFile.length();
  -            byte data[] = new byte[size];
  -
  -            try {
  -                FileInputStream inStream = new FileInputStream(messageFile);
  -                inStream.read(data);
  -                inStream.close();
  -                message = new String(data);
  -            } catch (IOException e) {
  -                throw new BuildException(e);
  -            }
  -        }
  -
  -        if (message != null) {
  -            MimeBodyPart textbody = new MimeBodyPart();
  -            textbody.setContent(message, messageMimeType);
  -            attachments.addBodyPart(textbody);
  -        }
  -
  -        for (int i = 0; i < filesets.size(); i++)
  -        {
  -            FileSet fs = (FileSet) filesets.elementAt(i);
  -            if (fs != null)
  -            {
  -                DirectoryScanner ds = fs.getDirectoryScanner(project);
  -                String[] dsfiles = ds.getIncludedFiles();
  -                File baseDir = ds.getBasedir();
  -
  -                for (int j = 0; j < dsfiles.length; j++)
  -                {
  -                    File file = new File(baseDir, dsfiles[j]);
  -                    MimeBodyPart body;
  -                    body = new MimeBodyPart();
  -                    if (!file.exists() || !file.canRead()) {
  -                        throw new BuildException("File \"" + file.getAbsolutePath()
  -                                 + "\" does not exist or is not readable.");
  -                    }
  -                    log("Attaching " + file.toString()+" - " +file.length()+" bytes",
  -                        Project.MSG_VERBOSE);
  -                    FileDataSource fileData = new FileDataSource(file);
  -                    DataHandler fileDataHandler = new DataHandler(fileData);
  -                    body.setDataHandler(fileDataHandler);
  -                    body.setFileName(file.getName());
  -                    attachments.addBodyPart(body);
  -                } // for j
  -            } // if (fs != null)
  -        } // for i
  -
  -        msg.setContent(attachments);
  -        log("sending email ");
  -        Transport.send(msg);
  +        throws BuildException
  +    {
  +        log( "DEPRECATED - The " + getTaskName() + " task is deprecated.  Use the mail task instead." );
  +        super.execute();
       }
   }
  -
  
  
  

--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


Mime
View raw message