git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@707368 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -48,6 +48,7 @@ Conor MacNeill | |||||
| Craeg Strong | Craeg Strong | ||||
| Craig Cottingham | Craig Cottingham | ||||
| Craig R. McClanahan | Craig R. McClanahan | ||||
| Craig Richardson | |||||
| Craig Ryan | Craig Ryan | ||||
| Craig Sandvik | Craig Sandvik | ||||
| Curtis White | Curtis White | ||||
| @@ -482,6 +482,10 @@ Other changes: | |||||
| <cvschangelog>. | <cvschangelog>. | ||||
| Bugzilla Report 27419. | Bugzilla Report 27419. | ||||
| * MailLogger and <mail> can now optionally enable support for | |||||
| STARTTLS. | |||||
| Bugzilla Report 46063. | |||||
| Changes from Ant 1.7.0 TO Ant 1.7.1 | Changes from Ant 1.7.0 TO Ant 1.7.1 | ||||
| ============================================= | ============================================= | ||||
| @@ -219,6 +219,10 @@ | |||||
| <first>Craig</first> | <first>Craig</first> | ||||
| <last>Ryan</last> | <last>Ryan</last> | ||||
| </name> | </name> | ||||
| <name> | |||||
| <first>Craig</first> | |||||
| <last>Richardson</last> | |||||
| </name> | |||||
| <name> | <name> | ||||
| <first>Craig</first> | <first>Craig</first> | ||||
| <last>Sandvik</last> | <last>Sandvik</last> | ||||
| @@ -179,6 +179,14 @@ | |||||
| fail if neither is reachable. <em>Since Ant 1.8.0</em>.</td> | fail if neither is reachable. <em>Since Ant 1.8.0</em>.</td> | ||||
| <td align="center" valign="top">No, default is false</td> | <td align="center" valign="top">No, default is false</td> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <td valign="top">enableStartTLS</td> | |||||
| <td valign="top">"true", "on" or "yes" accepted here<br></br> | |||||
| whether the STARTTLS command used to switch to an encrypted | |||||
| connection for authentication should be supported. Requires | |||||
| JavaMail. <em>Since Ant 1.8.0</em></td> | |||||
| <td valign="center">No</td> | |||||
| </tr> | |||||
| </table> | </table> | ||||
| <h3>Note regarding the attributes containing email addresses</h3> | <h3>Note regarding the attributes containing email addresses</h3> | ||||
| @@ -245,6 +245,12 @@ control for turning off success or failure messages individually.</p> | |||||
| <td width="63%">Character set of the message. <em>Since Ant 1.8.0</em></td> | <td width="63%">Character set of the message. <em>Since Ant 1.8.0</em></td> | ||||
| <td width="63%">No</td> | <td width="63%">No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <td width="337">MailLogger.starttls.enable</td> | |||||
| <td width="63%">on or true if STARTTLS should be supported | |||||
| (requires JavaMail). <em>Since Ant 1.8.0</em></td> | |||||
| <td width="63%">No, default is false</td> | |||||
| </tr> | |||||
| <tr> | <tr> | ||||
| <td width="337">MailLogger.properties.file </td> | <td width="337">MailLogger.properties.file </td> | ||||
| <td width="63%">Filename of properties file that will override other values.</td> | <td width="63%">Filename of properties file that will override other values.</td> | ||||
| @@ -73,6 +73,8 @@ import org.apache.tools.mail.MailMessage; | |||||
| * mail body for a successful build, default is to send the logfile</li> | * mail body for a successful build, default is to send the logfile</li> | ||||
| * <li> MailLogger.mimeType [default: text/plain] - MIME-Type of email</li> | * <li> MailLogger.mimeType [default: text/plain] - MIME-Type of email</li> | ||||
| * <li> MailLogger.charset [no default] - character set of email</li> | * <li> MailLogger.charset [no default] - character set of email</li> | ||||
| * <li> Maillogger.starttls.enable [default: false] - on or true if | |||||
| * STARTTLS should be supported (requires JavaMail)</li> | |||||
| * <li> MailLogger.properties.file [no default] - Filename of | * <li> MailLogger.properties.file [no default] - Filename of | ||||
| * properties file that will override other values.</li> | * properties file that will override other values.</li> | ||||
| * </ul> | * </ul> | ||||
| @@ -142,6 +144,8 @@ public class MailLogger extends DefaultLogger { | |||||
| .password(getValue(properties, "password", "")) | .password(getValue(properties, "password", "")) | ||||
| .ssl(Project.toBoolean(getValue(properties, | .ssl(Project.toBoolean(getValue(properties, | ||||
| "ssl", "off"))) | "ssl", "off"))) | ||||
| .starttls(Project.toBoolean(getValue(properties, | |||||
| "starttls.enable", "off"))) | |||||
| .from(getValue(properties, "from", null)) | .from(getValue(properties, "from", null)) | ||||
| .replytoList(getValue(properties, "replyto", "")) | .replytoList(getValue(properties, "replyto", "")) | ||||
| .toList(getValue(properties, prefix + ".to", null)) | .toList(getValue(properties, prefix + ".to", null)) | ||||
| @@ -153,7 +157,7 @@ public class MailLogger extends DefaultLogger { | |||||
| (success) ? "Build Success" : "Build Failure")); | (success) ? "Build Success" : "Build Failure")); | ||||
| if (values.user().equals("") | if (values.user().equals("") | ||||
| && values.password().equals("") | && values.password().equals("") | ||||
| && !values.ssl()) { | |||||
| && !values.ssl() && !values.starttls()) { | |||||
| sendMail(values, buffer.substring(0)); | sendMail(values, buffer.substring(0)); | ||||
| } else { | } else { | ||||
| sendMimeMail( | sendMimeMail( | ||||
| @@ -262,6 +266,14 @@ public class MailLogger extends DefaultLogger { | |||||
| this.body = body; | this.body = body; | ||||
| return this; | return this; | ||||
| } | } | ||||
| private boolean starttls; | |||||
| public boolean starttls() { | |||||
| return starttls; | |||||
| } | |||||
| public Values starttls(boolean starttls) { | |||||
| this.starttls = starttls; | |||||
| return this; | |||||
| } | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -365,6 +377,7 @@ public class MailLogger extends DefaultLogger { | |||||
| mailer.setUser(values.user()); | mailer.setUser(values.user()); | ||||
| mailer.setPassword(values.password()); | mailer.setPassword(values.password()); | ||||
| mailer.setSSL(values.ssl()); | mailer.setSSL(values.ssl()); | ||||
| mailer.setEnableStartTLS(values.ssl()); | |||||
| Message mymessage = | Message mymessage = | ||||
| new Message(values.body().length() > 0 ? values.body() : message); | new Message(values.body().length() > 0 ? values.body() : message); | ||||
| mymessage.setProject(project); | mymessage.setProject(project); | ||||
| @@ -102,6 +102,8 @@ public class EmailTask extends Task { | |||||
| private String password = null; | private String password = null; | ||||
| /** indicate if the user wishes SSL-TLS */ | /** indicate if the user wishes SSL-TLS */ | ||||
| private boolean ssl = false; | private boolean ssl = false; | ||||
| /** indicate if the user wishes support for STARTTLS */ | |||||
| private boolean starttls = false; | |||||
| /** ignore invalid recipients? */ | /** ignore invalid recipients? */ | ||||
| private boolean ignoreInvalidRecipients = false; | private boolean ignoreInvalidRecipients = false; | ||||
| @@ -133,6 +135,16 @@ public class EmailTask extends Task { | |||||
| this.ssl = ssl; | this.ssl = ssl; | ||||
| } | } | ||||
| /** | |||||
| * Set whether to allow authentication to switch to a TLS | |||||
| * connection via STARTTLS. | |||||
| * @param b boolean; if true STARTTLS will be supported. | |||||
| * @since Ant 1.8.0 | |||||
| */ | |||||
| public void setEnableStartTLS(boolean b) { | |||||
| this.starttls = b; | |||||
| } | |||||
| /** | /** | ||||
| * Set the preferred encoding method. | * Set the preferred encoding method. | ||||
| * | * | ||||
| @@ -454,9 +466,10 @@ public class EmailTask extends Task { | |||||
| throw new BuildException("SMTP auth only possible with MIME mail"); | throw new BuildException("SMTP auth only possible with MIME mail"); | ||||
| } | } | ||||
| // SSL only allowed with MIME mail | // SSL only allowed with MIME mail | ||||
| if (!autoFound && (ssl) | |||||
| if (!autoFound && (ssl || starttls) | |||||
| && (encoding.equals(UU) || encoding.equals(PLAIN))) { | && (encoding.equals(UU) || encoding.equals(PLAIN))) { | ||||
| throw new BuildException("SSL only possible with MIME mail"); | |||||
| throw new BuildException("SSL and STARTTLS only possible with" | |||||
| + " MIME mail"); | |||||
| } | } | ||||
| // try UU format | // try UU format | ||||
| if (encoding.equals(UU) | if (encoding.equals(UU) | ||||
| @@ -537,6 +550,7 @@ public class EmailTask extends Task { | |||||
| mailer.setUser(user); | mailer.setUser(user); | ||||
| mailer.setPassword(password); | mailer.setPassword(password); | ||||
| mailer.setSSL(ssl); | mailer.setSSL(ssl); | ||||
| mailer.setEnableStartTLS(starttls); | |||||
| mailer.setMessage(message); | mailer.setMessage(message); | ||||
| mailer.setFrom(from); | mailer.setFrom(from); | ||||
| mailer.setReplyToList(replyToList); | mailer.setReplyToList(replyToList); | ||||
| @@ -49,6 +49,7 @@ public abstract class Mailer { | |||||
| protected Vector headers = null; | protected Vector headers = null; | ||||
| // CheckStyle:VisibilityModifier ON | // CheckStyle:VisibilityModifier ON | ||||
| private boolean ignoreInvalidRecipients = false; | private boolean ignoreInvalidRecipients = false; | ||||
| private boolean starttls = false; | |||||
| /** | /** | ||||
| * Set the mail server. | * Set the mail server. | ||||
| @@ -98,6 +99,20 @@ public abstract class Mailer { | |||||
| this.SSL = ssl; | this.SSL = ssl; | ||||
| } | } | ||||
| /** | |||||
| * Set whether to allow authentication to switch to a TLS | |||||
| * connection via STARTTLS. | |||||
| * @param b boolean; if true STARTTLS will be supported. | |||||
| * @since Ant 1.8.0 | |||||
| */ | |||||
| public void setEnableStartTLS(boolean b) { | |||||
| this.starttls = b; | |||||
| } | |||||
| protected boolean isStartTLSEnabled() { | |||||
| return starttls; | |||||
| } | |||||
| /** | /** | ||||
| * Set the message. | * Set the message. | ||||
| * | * | ||||
| @@ -161,6 +161,9 @@ public class MimeMailer extends Mailer { | |||||
| props.put("mail.smtp.auth", "true"); | props.put("mail.smtp.auth", "true"); | ||||
| auth = new SimpleAuthenticator(user, password); | auth = new SimpleAuthenticator(user, password); | ||||
| } | } | ||||
| if (isStartTLSEnabled()) { | |||||
| props.put("mail.smtp.starttls.enable", "true"); | |||||
| } | |||||
| sesh = Session.getInstance(props, auth); | sesh = Session.getInstance(props, auth); | ||||
| //create the message | //create the message | ||||