diff --git a/WHATSNEW b/WHATSNEW index 045628d35..21b5b1db0 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -96,6 +96,8 @@ Other changes: * new task to change file attributes on Windows systems. +* MailLogger now sets the Date header correctly. + Changes from Ant 1.5.1Beta1 to 1.5.1 ==================================== diff --git a/src/main/org/apache/tools/ant/listener/MailLogger.java b/src/main/org/apache/tools/ant/listener/MailLogger.java index 84c630710..6a2919651 100644 --- a/src/main/org/apache/tools/ant/listener/MailLogger.java +++ b/src/main/org/apache/tools/ant/listener/MailLogger.java @@ -64,6 +64,7 @@ import java.util.StringTokenizer; import org.apache.tools.ant.BuildEvent; import org.apache.tools.ant.DefaultLogger; import org.apache.tools.ant.Project; +import org.apache.tools.ant.util.DateUtils; import org.apache.tools.ant.util.StringUtils; import org.apache.tools.mail.MailMessage; @@ -218,6 +219,7 @@ public class MailLogger extends DefaultLogger { private void sendMail(String mailhost, int port, String from, String toList, String subject, String message) throws IOException { MailMessage mailMessage = new MailMessage(mailhost, port); + mailMessage.setHeader("Date", DateUtils.getDateForHeader()); mailMessage.from(from); diff --git a/src/main/org/apache/tools/ant/taskdefs/email/Mailer.java b/src/main/org/apache/tools/ant/taskdefs/email/Mailer.java index d11734313..657be9cdf 100644 --- a/src/main/org/apache/tools/ant/taskdefs/email/Mailer.java +++ b/src/main/org/apache/tools/ant/taskdefs/email/Mailer.java @@ -53,14 +53,10 @@ */ package org.apache.tools.ant.taskdefs.email; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Locale; -import java.util.TimeZone; import java.util.Vector; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; +import org.apache.tools.ant.util.DateUtils; /** * Base class for the various emailing implementations. @@ -81,9 +77,6 @@ abstract class Mailer { protected Task task; protected boolean includeFileNames = false; - private static DateFormat df = - new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss ", Locale.US); - /** * Sets the mail server * @@ -209,27 +202,7 @@ abstract class Mailer { * @since Ant 1.5 */ protected final String getDate() { - Calendar cal = Calendar.getInstance(); - TimeZone tz = cal.getTimeZone(); - int offset = tz.getOffset(cal.get(Calendar.ERA), - cal.get(Calendar.YEAR), - cal.get(Calendar.MONTH), - cal.get(Calendar.DAY_OF_MONTH), - cal.get(Calendar.DAY_OF_WEEK), - cal.get(Calendar.MILLISECOND)); - StringBuffer tzMarker = new StringBuffer(offset < 0 ? "-" : "+"); - offset = Math.abs(offset); - int hours = offset / (60 * 60 * 1000); - int minutes = offset / (60 * 1000) - 60 * hours; - if (hours < 10) { - tzMarker.append("0"); - } - tzMarker.append(hours); - if (minutes < 10) { - tzMarker.append("0"); - } - tzMarker.append(minutes); - return df.format(cal.getTime()) + tzMarker.toString(); + return DateUtils.getDateForHeader(); } } diff --git a/src/main/org/apache/tools/ant/util/DateUtils.java b/src/main/org/apache/tools/ant/util/DateUtils.java index 128b9502f..c22574a9d 100644 --- a/src/main/org/apache/tools/ant/util/DateUtils.java +++ b/src/main/org/apache/tools/ant/util/DateUtils.java @@ -59,6 +59,7 @@ import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; +import java.util.Locale; import java.util.TimeZone; /** @@ -94,6 +95,12 @@ public final class DateUtils { public static final String ISO8601_TIME_PATTERN = "HH:mm:ss"; + /** + * Format used for SMTP (and probably other) Date headers. + */ + public static final DateFormat DATE_HEADER_FORMAT + = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss ", Locale.US); + // code from Magesh moved from DefaultLogger and slightly modified private static final MessageFormat MINUTE_SECONDS @@ -219,4 +226,34 @@ public final class DateUtils { } return (((((dayOfTheYear + epact) * 6) + 11) % 177) / 22) & 7; } + + /** + * Returns the current Date in a format suitable for a SMTP date + * header. + * + * @since Ant 1.5.2 + */ + public static String getDateForHeader() { + Calendar cal = Calendar.getInstance(); + TimeZone tz = cal.getTimeZone(); + int offset = tz.getOffset(cal.get(Calendar.ERA), + cal.get(Calendar.YEAR), + cal.get(Calendar.MONTH), + cal.get(Calendar.DAY_OF_MONTH), + cal.get(Calendar.DAY_OF_WEEK), + cal.get(Calendar.MILLISECOND)); + StringBuffer tzMarker = new StringBuffer(offset < 0 ? "-" : "+"); + offset = Math.abs(offset); + int hours = offset / (60 * 60 * 1000); + int minutes = offset / (60 * 1000) - 60 * hours; + if (hours < 10) { + tzMarker.append("0"); + } + tzMarker.append(hours); + if (minutes < 10) { + tzMarker.append("0"); + } + tzMarker.append(minutes); + return DATE_HEADER_FORMAT.format(cal.getTime()) + tzMarker.toString(); + } }