You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by an...@apache.org on 2003/05/27 17:25:49 UTC
cvs commit: ant/src/main/org/apache/tools/ant/taskdefs/email EmailTask.java Mailer.java MimeMailer.java
antoine 2003/05/27 08:25:49
Modified: . WHATSNEW
src/main/org/apache/tools/ant/listener MailLogger.java
src/main/org/apache/tools/ant/taskdefs/email EmailTask.java
Mailer.java MimeMailer.java
Added: src/etc/testcases/taskdefs mail.xml
src/testcases/org/apache/tools/ant/taskdefs
EmailTaskTest.java
Log:
Implementation of SMTP-Auth for MimeMail, available through <mail/>
and MailLogger.
PR: 5969
Revision Changes Path
1.429 +6 -0 ant/WHATSNEW
Index: WHATSNEW
===================================================================
RCS file: /home/cvs/ant/WHATSNEW,v
retrieving revision 1.428
retrieving revision 1.429
diff -u -r1.428 -r1.429
--- WHATSNEW 27 May 2003 08:49:41 -0000 1.428
+++ WHATSNEW 27 May 2003 15:25:47 -0000 1.429
@@ -301,6 +301,12 @@
* <mail> has a new attribute encoding. Bugzilla Report 15434.
+* <mail> has new attributes user and password for SMTP auth.
+maillogger can also use this.
+The implementation only with JavaMail (encoding="MIME").
+Implementation with plain mail remains to do.
+Bugzilla Report 5969.
+
* <zipfileset> can now be defined in the main body of a project
and referred to with refid="xyz". Bugzilla Report 17007.
1.1 ant/src/etc/testcases/taskdefs/mail.xml
Index: mail.xml
===================================================================
<?xml version="1.0"?>
<project name="mail-test" basedir="." default="test1">
<target name="test1">
<!-- this test is supposed to bring a build exception because user and password is not allowed with plain encoding -->
<mail host="localhost" port="25" from="joe@abc.com" to="laura@xyz.com" subject="hello" encoding="plain" user="joe" password="secret">
<message>
Hi Laura, how are you doing ?
</message>
</mail>
</target>
</project>
1.1 ant/src/testcases/org/apache/tools/ant/taskdefs/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
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.taskdefs;
import java.io.File;
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 <a href="mailto:levylambert@tiscali-dsl.de">Antoine Levy-Lambert</a>
*/
public class EmailTaskTest extends BuildFileTest {
public EmailTaskTest(String name) {
super(name);
}
public void setUp() {
configureProject("src/etc/testcases/taskdefs/mail.xml");
}
public void test1() {
expectBuildException("test1", "SMTP auth only possible with MIME mail");
}
}
1.17 +59 -7 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.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- MailLogger.java 15 May 2003 11:30:26 -0000 1.16
+++ MailLogger.java 27 May 2003 15:25:48 -0000 1.17
@@ -57,13 +57,14 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Properties;
-import java.util.StringTokenizer;
+import java.util.*;
+
import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.DefaultLogger;
import org.apache.tools.ant.Project;
+import org.apache.tools.ant.taskdefs.email.MimeMailer;
+import org.apache.tools.ant.taskdefs.email.EmailAddress;
+import org.apache.tools.ant.taskdefs.email.Message;
import org.apache.tools.ant.util.DateUtils;
import org.apache.tools.ant.util.StringUtils;
import org.apache.tools.mail.MailMessage;
@@ -96,6 +97,8 @@
*
* @author Erik Hatcher
* <a href="mailto:ehatcher@apache.org">ehatcher@apache.org</a>
+ * @author <a href="mailto:levylambert@tiscali-dsl.de">Antoine Levy-Lambert</a>
+ *
*/
public class MailLogger extends DefaultLogger {
/** Buffer in which the message is constructed prior to sending */
@@ -152,13 +155,19 @@
String mailhost = getValue(properties, "mailhost", "localhost");
int port = Integer.parseInt(getValue(properties,"port",String.valueOf(MailMessage.DEFAULT_PORT)));
+ String user = getValue(properties, "user", null);
+ String password = getValue(properties, "password", null);
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");
-
- sendMail(mailhost, port, from, replytoList, toList, subject, buffer.substring(0));
+ if (user==null && password==null) {
+ 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));
+ }
} catch (Exception e) {
System.out.println("MailLogger failed to send e-mail!");
e.printStackTrace(System.err);
@@ -207,7 +216,6 @@
/**
* Send the mail
- *
* @param mailhost mail server
* @param port mail server port number
* @param from from address
@@ -240,6 +248,50 @@
ps.println(message);
mailMessage.sendAndClose();
+ }
+ /**
+ * Send the mail (MimeMail)
+ * @param project current ant project
+ * @param host mail server
+ * @param port mail server port number
+ * @param user user name for SMTP auth
+ * @param password password for SMTP auth
+ * @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 {
+ // convert the replyTo string into a vector of emailaddresses
+ Vector replyToList = vectorizeEmailAddresses(replyToString);
+ MimeMailer mailer=new MimeMailer();
+ mailer.setHost(host);
+ mailer.setPort(port);
+ mailer.setUser(user);
+ mailer.setPassword(password);
+ Message mymessage = new Message(message);
+ mymessage.setProject(project);
+ mailer.setMessage(mymessage);
+ mailer.setFrom(new EmailAddress(from));
+ mailer.setReplyToList(replyToList);
+ Vector toList = vectorizeEmailAddresses(toString);
+ mailer.setToList(toList);
+ mailer.setCcList(new Vector());
+ mailer.setBccList(new Vector());
+ mailer.setFiles(new Vector());
+ mailer.setSubject(subject);
+ mailer.send();
+ }
+ private Vector vectorizeEmailAddresses(String listString) {
+ Vector emailList = new Vector();
+ StringTokenizer tokens = new StringTokenizer(listString, ",");
+ while (tokens.hasMoreTokens()) {
+ emailList.addElement(new EmailAddress(tokens.nextToken()));
+ }
+ return emailList;
}
}
1.19 +27 -1 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.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- EmailTask.java 15 May 2003 11:30:26 -0000 1.18
+++ EmailTask.java 27 May 2003 15:25:48 -0000 1.19
@@ -142,7 +142,28 @@
private boolean debugonly=false;
/** a location where to print the email message */
private File debugoutput;
+ /** User for SMTP auth */
+ private String user=null;
+ /** Password for SMTP auth */
+ private String password=null;
+ /**
+ * sets the user for SMTP auth; this requires JavaMail
+ * @param user
+ * @since ant 1.6
+ */
+ public void setUser(String user) {
+ this.user = user;
+ }
+
+ /**
+ * sets the password for SMTP auth; this requires JavaMail
+ * @param password
+ * @since ant 1.6
+ */
+ public void setPassword(String password) {
+ this.password = password;
+ }
/**
* Allows the build writer to choose the preferred encoding method
@@ -431,7 +452,6 @@
// prepare for the auto select mechanism
boolean autoFound = false;
-
// try MIME format
if (encoding.equals(MIME)
|| (encoding.equals(AUTO) && !autoFound)) {
@@ -445,6 +465,10 @@
log("Failed to initialise MIME mail: "+e.getMessage(),Project.MSG_WARN);
}
}
+ // SMTP auth only allowed with MIME mail
+ if (autoFound==false && ((user !=null) || (password != null)) && (encoding.equals(UU) || encoding.equals(PLAIN))) {
+ throw new BuildException("SMTP auth only possible with MIME mail");
+ }
// try UU format
if (encoding.equals(UU)
@@ -538,6 +562,8 @@
// pass the params to the mailer
mailer.setHost(host);
mailer.setPort(port);
+ mailer.setUser(user);
+ mailer.setPassword(password);
mailer.setMessage(message);
mailer.setFrom(from);
mailer.setReplyToList(replyToList);
1.10 +19 -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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Mailer.java 15 May 2003 12:22:47 -0000 1.9
+++ Mailer.java 27 May 2003 15:25:48 -0000 1.10
@@ -67,6 +67,8 @@
abstract class Mailer {
protected String host = null;
protected int port = -1;
+ protected String user = null;
+ protected String password = null;
protected Message message;
protected EmailAddress from;
protected Vector replyToList = null;
@@ -97,6 +99,23 @@
this.port = port;
}
+ /**
+ * Sets the user for smtp auth
+ *
+ * @param user
+ */
+ public void setUser(String user) {
+ this.user = user;
+ }
+
+ /**
+ * Sets the password for smtp auth
+ *
+ * @param password
+ */
+ public void setPassword(String password) {
+ this.password = password;
+ }
/**
* Sets the message
1.11 +27 -6 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.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- MimeMailer.java 15 May 2003 11:30:26 -0000 1.10
+++ MimeMailer.java 27 May 2003 15:25:48 -0000 1.11
@@ -70,10 +70,8 @@
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
+import javax.mail.*;
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;
@@ -89,7 +87,7 @@
* @author <a href="mailto:ishu@akm.ru">Aleksandr Ishutin</a>
* @since Ant 1.5
*/
-class MimeMailer extends Mailer {
+public class MimeMailer extends Mailer {
// Default character set
private static final String defaultCharset = System.getProperty("file.encoding");
@@ -157,7 +155,16 @@
// Aside, the JDK is clearly unaware of the scottish
// 'session', which //involves excessive quantities of
// alcohol :-)
- Session sesh = Session.getDefaultInstance(props, null);
+ Session sesh;
+ Authenticator auth;
+ if (user==null && password == null) {
+ sesh = Session.getDefaultInstance(props, null);
+ }
+ else {
+ props.put("mail.smtp.auth", "true");
+ auth = new SimpleAuthenticator(user,password);
+ sesh = Session.getInstance(props,auth);
+ }
//create the message
MimeMessage msg = new MimeMessage(sesh);
@@ -260,6 +267,7 @@
}
return addrs;
+
}
private String parseCharSetFromMimeType(String type){
@@ -271,5 +279,18 @@
token.nextToken();// Skip 'charset='
return token.nextToken();
}
-}
+ static class SimpleAuthenticator extends Authenticator {
+ private String user=null;
+ private String password=null;
+ public SimpleAuthenticator(String user, String password) {
+ this.user=user;
+ this.password=password;
+ }
+ public PasswordAuthentication getPasswordAuthentication() {
+
+ return new PasswordAuthentication(user, password);
+
+ }
+
+ }}
Re: cvs commit: ant/src/main/org/apache/tools/ant/taskdefs/email EmailTask.java Mailer.java MimeMailer.java
Posted by Antoine Levy-Lambert <le...@tiscali-dsl.de>.
Sorry for the trouble Stefan.
Antoine
----- Original Message -----
From: "Stefan Bodewig" <bo...@apache.org>
To: <de...@ant.apache.org>
Sent: Wednesday, May 28, 2003 7:58 AM
Subject: Re: cvs commit: ant/src/main/org/apache/tools/ant/taskdefs/email
EmailTask.java Mailer.java MimeMailer.java
> On 27 May 2003, <an...@apache.org> wrote:
>
> > Log: Implementation of SMTP-Auth for MimeMail, available through
> > <mail/> and MailLogger.
>
> The way you've done it causes a compile time dependency on JavaMail
> and JAF in MailLogger.
>
> While I'm not sure whether this causes a problem for MailLogger (it is
> a backwards compatibility problem if it also means a dependency at
> runtime), it breaks bootstrapping Ant. I'll take care of the later.
>
> Stefan
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
> For additional commands, e-mail: dev-help@ant.apache.org
>
>
Re: cvs commit: ant/src/main/org/apache/tools/ant/taskdefs/email EmailTask.java Mailer.java MimeMailer.java
Posted by Stefan Bodewig <bo...@apache.org>.
On 27 May 2003, <an...@apache.org> wrote:
> Log: Implementation of SMTP-Auth for MimeMail, available through
> <mail/> and MailLogger.
The way you've done it causes a compile time dependency on JavaMail
and JAF in MailLogger.
While I'm not sure whether this causes a problem for MailLogger (it is
a backwards compatibility problem if it also means a dependency at
runtime), it breaks bootstrapping Ant. I'll take care of the later.
Stefan