Return-Path: Mailing-List: contact dev-help@ant.apache.org; run by ezmlm Delivered-To: mailing list dev@ant.apache.org Received: (qmail 68400 invoked by uid 500); 28 May 2003 20:58:05 -0000 Received: (qmail 68368 invoked from network); 28 May 2003 20:58:04 -0000 Received: from icarus.apache.org (208.185.179.13) by daedalus.apache.org with SMTP; 28 May 2003 20:58:04 -0000 Received: (qmail 8176 invoked by uid 1652); 28 May 2003 20:58:04 -0000 Date: 28 May 2003 20:58:04 -0000 Message-ID: <20030528205804.8175.qmail@icarus.apache.org> From: antoine@apache.org To: ant-cvs@apache.org Subject: cvs commit: ant WHATSNEW X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N antoine 2003/05/28 13:58:04 Modified: src/main/org/apache/tools/ant/listener MailLogger.java src/main/org/apache/tools/ant/taskdefs/email Mailer.java MimeMailer.java EmailTask.java docs/manual listeners.html docs/manual/CoreTasks mail.html . WHATSNEW Added: src/etc/testcases/taskdefs/email mail.xml src/testcases/org/apache/tools/ant/taskdefs/email EmailTaskTest.java Removed: src/etc/testcases/taskdefs mail.xml src/testcases/org/apache/tools/ant/taskdefs EmailTaskTest.java Log: Support for SMTP over TLS/SSL in the mail task PR: 19180 Revision Changes Path 1.19 +9 -5 ant/src/main/org/apache/tools/ant/listener/MailLogger.java Index: MailLogger.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/listener/MailLogger.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- MailLogger.java 28 May 2003 08:02:40 -0000 1.18 +++ MailLogger.java 28 May 2003 20:58:02 -0000 1.19 @@ -157,16 +157,18 @@ int port = Integer.parseInt(getValue(properties,"port",String.valueOf(MailMessage.DEFAULT_PORT))); String user = getValue(properties, "user", ""); String password = getValue(properties, "password", ""); + boolean ssl = Project.toBoolean(getValue(properties, + "ssl", "off")); String from = getValue(properties, "from", null); String replytoList = getValue(properties,"replyto",""); String toList = getValue(properties, prefix + ".to", null); String subject = getValue(properties, prefix + ".subject", (success) ? "Build Success" : "Build Failure"); - if (user.equals("") && password.equals("")) { + if (user.equals("") && password.equals("") && !ssl) { sendMail(mailhost, port, from, replytoList, toList, subject, buffer.substring(0)); } else { - sendMimeMail(event.getProject(), mailhost, port, user, password, from, replytoList, toList, subject, buffer.substring(0)); + sendMimeMail(event.getProject(), mailhost, port, user, password, ssl, from, replytoList, toList, subject, buffer.substring(0)); } } catch (Exception e) { System.out.println("MailLogger failed to send e-mail!"); @@ -256,15 +258,16 @@ * @param port mail server port number * @param user user name for SMTP auth * @param password password for SMTP auth + * @param ssl if true send message over SSL * @param from from address * @param replyToString comma-separated replyto list * @param toString comma-separated recipient list * @param subject mail subject * @param message mail body - * @exception IOException thrown if sending message fails */ - private void sendMimeMail(Project project, String host, int port, String user, String password, String from, String replyToString, String toString, - String subject, String message) throws IOException { + private void sendMimeMail(Project project, String host, int port, String user, String password, boolean ssl, + String from, String replyToString, String toString, + String subject, String message) { // convert the replyTo string into a vector of emailaddresses Mailer mailer = null; try { @@ -280,6 +283,7 @@ mailer.setPort(port); mailer.setUser(user); mailer.setPassword(password); + mailer.setSSL(ssl); Message mymessage = new Message(message); mymessage.setProject(project); mailer.setMessage(mymessage); 1.12 +13 -0 ant/src/main/org/apache/tools/ant/taskdefs/email/Mailer.java Index: Mailer.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/email/Mailer.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- Mailer.java 28 May 2003 08:02:41 -0000 1.11 +++ Mailer.java 28 May 2003 20:58:03 -0000 1.12 @@ -69,6 +69,7 @@ protected int port = -1; protected String user = null; protected String password = null; + protected boolean SSL = false; protected Message message; protected EmailAddress from; protected Vector replyToList = null; @@ -103,6 +104,7 @@ * Sets the user for smtp auth * * @param user + * @since ant 1.6 */ public void setUser(String user) { this.user = user; @@ -112,9 +114,20 @@ * Sets the password for smtp auth * * @param password + * @since ant 1.6 */ public void setPassword(String password) { this.password = password; + } + + /** + * Sets whether the user wants to send the mail through SSL + * + * @param SSL + * @since ant 1.6 + */ + public void setSSL(boolean SSL) { + this.SSL = SSL; } /** 1.12 +14 -1 ant/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java Index: MimeMailer.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- MimeMailer.java 27 May 2003 15:25:48 -0000 1.11 +++ MimeMailer.java 28 May 2003 20:58:03 -0000 1.12 @@ -66,6 +66,7 @@ import java.util.Properties; import java.util.StringTokenizer; import java.util.Vector; +import java.security.Security; import javax.activation.DataHandler; import javax.activation.FileDataSource; @@ -157,6 +158,19 @@ // alcohol :-) Session sesh; Authenticator auth; + if (SSL) { + try { + java.security.Provider p=(java.security.Provider)Class.forName( "com.sun.net.ssl.internal.ssl.Provider").newInstance(); + Security.addProvider(p); + } + catch (Exception e) { + throw new BuildException("could not instantiate ssl security provider, check that you have JSSE in your classpath"); + } + final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; + // SMTP provider + props.put( "mail.smtp.socketFactory.class", SSL_FACTORY); + props.put( "mail.smtp.socketFactory.fallback", "false"); + } if (user==null && password == null) { sesh = Session.getDefaultInstance(props, null); } @@ -165,7 +179,6 @@ auth = new SimpleAuthenticator(user,password); sesh = Session.getInstance(props,auth); } - //create the message MimeMessage msg = new MimeMessage(sesh); MimeMultipart attachments = new MimeMultipart(); 1.20 +18 -2 ant/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java Index: EmailTask.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- EmailTask.java 27 May 2003 15:25:48 -0000 1.19 +++ EmailTask.java 28 May 2003 20:58:03 -0000 1.20 @@ -108,7 +108,6 @@ } } - private String encoding = AUTO; /** host running SMTP */ private String host = "localhost"; @@ -146,6 +145,8 @@ private String user=null; /** Password for SMTP auth */ private String password=null; + /** indicate if the user wishes SSL-TLS */ + private boolean SSL = false; /** * sets the user for SMTP auth; this requires JavaMail @@ -166,6 +167,15 @@ } /** + * tells if the user needs to send his data over SSL + * @param SSL + * @since ant 1.6 + */ + public void setSSL(boolean SSL) { + this.SSL = SSL; + } + + /** * Allows the build writer to choose the preferred encoding method * * @param encoding The encoding (one of AUTO,MIME,UU,PLAIN) @@ -466,9 +476,14 @@ } } // SMTP auth only allowed with MIME mail - if (autoFound==false && ((user !=null) || (password != null)) && (encoding.equals(UU) || encoding.equals(PLAIN))) { + if (autoFound==false && ((user !=null) || (password != null) ) && (encoding.equals(UU) || encoding.equals(PLAIN))) { throw new BuildException("SMTP auth only possible with MIME mail"); } + // SSL only allowed with MIME mail + if (autoFound==false && (SSL) && (encoding.equals(UU) || encoding.equals(PLAIN))) { + throw new BuildException("SSL only possible with MIME mail"); + } + // try UU format if (encoding.equals(UU) @@ -564,6 +579,7 @@ mailer.setPort(port); mailer.setUser(user); mailer.setPassword(password); + mailer.setSSL(SSL); mailer.setMessage(message); mailer.setFrom(from); mailer.setReplyToList(replyToList); 1.1 ant/src/etc/testcases/taskdefs/email/mail.xml Index: mail.xml =================================================================== Hi Laura, how are you doing ? Hi Laura, how are you doing ? 1.1 ant/src/testcases/org/apache/tools/ant/taskdefs/email/EmailTaskTest.java Index: EmailTaskTest.java =================================================================== /* * The Apache Software License, Version 1.1 * * Copyright (c) 2003 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 "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 * . */ package org.apache.tools.ant.taskdefs.email; import org.apache.tools.ant.BuildFileTest; /** * TODO : develop these testcases - the email task needs to have attributes allowing * to simulate sending mail and to catch the output in text files or streams * @author Antoine Levy-Lambert */ public class EmailTaskTest extends BuildFileTest { public EmailTaskTest(String name) { super(name); } public void setUp() { configureProject("src/etc/testcases/taskdefs/email/mail.xml"); } public void test1() { expectBuildException("test1", "SMTP auth only possible with MIME mail"); } public void test2() { expectBuildException("test2", "SSL only possible with MIME mail"); } } 1.14 +7 -0 ant/docs/manual/listeners.html Index: listeners.html =================================================================== RCS file: /home/cvs/ant/docs/manual/listeners.html,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- listeners.html 27 May 2003 15:33:25 -0000 1.13 +++ listeners.html 28 May 2003 20:58:03 -0000 1.14 @@ -138,6 +138,13 @@ the email message will be then sent using Mime and requires JavaMail + MailLogger.ssl + on or true if ssl is needed
+ This feature requires JavaMail + + no + + MailLogger.from Mail "from" address Yes, if mail needs to be sent 1.20 +7 -1 ant/docs/manual/CoreTasks/mail.html Index: mail.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTasks/mail.html,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- mail.html 27 May 2003 15:33:25 -0000 1.19 +++ mail.html 28 May 2003 20:58:03 -0000 1.20 @@ -13,7 +13,7 @@ This task can send mail using either plain text, UU encoding, or MIME format mail, depending on what is available.

-If you need SMTP auth, you have to use MIME (and therefore to install JavaMail).

+SMTP auth and SSL/TLS require JavaMail and are only available in MIME format.

Attachments may be sent using nested fileset elements.

Note: This task may depend on external libraries @@ -112,6 +112,12 @@ password for SMTP auth Yes, if SMTP auth is required on your SMTP server
the email message will be then sent using Mime and requires JavaMail + + + ssl + "true", "on" or "yes" accepted here
+ indicates whether you need TLS/SSL + No encoding 1.431 +3 -0 ant/WHATSNEW Index: WHATSNEW =================================================================== RCS file: /home/cvs/ant/WHATSNEW,v retrieving revision 1.430 retrieving revision 1.431 diff -u -r1.430 -r1.431 --- WHATSNEW 28 May 2003 13:12:02 -0000 1.430 +++ WHATSNEW 28 May 2003 20:58:03 -0000 1.431 @@ -307,6 +307,9 @@ Implementation with plain mail remains to do. Bugzilla Report 5969. +* and mailloger support SMTP over TLS/SSL +Bugzilla Report 19180. + * can now be defined in the main body of a project and referred to with refid="xyz". Bugzilla Report 17007.