diff --git a/src/java/davmail/exchange/ExchangeSession.java b/src/java/davmail/exchange/ExchangeSession.java index 51a9852c..af169674 100644 --- a/src/java/davmail/exchange/ExchangeSession.java +++ b/src/java/davmail/exchange/ExchangeSession.java @@ -34,7 +34,7 @@ import java.util.*; public class ExchangeSession { protected static final Logger LOGGER = Logger.getLogger("davmail.exchange.ExchangeSession"); - protected static final SimpleTimeZone GMT_TIMEZONE = new SimpleTimeZone(0, "GMT"); + public static final SimpleTimeZone GMT_TIMEZONE = new SimpleTimeZone(0, "GMT"); /** * exchange message properties needed to rebuild mime message @@ -116,6 +116,7 @@ public class ExchangeSession { // SimpleDateFormat are not thread safe, need to create one instance for // each session dateFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + dateFormatter.setTimeZone(GMT_TIMEZONE); dateParser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); dateParser.setTimeZone(GMT_TIMEZONE); @@ -597,6 +598,8 @@ public class ExchangeSession { patchMethod.addPropertyToSet("x0E070003", entry.getValue(), "f", "http://schemas.microsoft.com/mapi/proptag/"); } else if ("deleted".equals(entry.getKey())) { patchMethod.addPropertyToSet("isdeleted", entry.getValue(), "d", "DAV:"); + } else if ("datereceived".equals(entry.getKey())) { + patchMethod.addPropertyToSet("datereceived", entry.getValue(), "e", "urn:schemas:httpmail:"); } } } diff --git a/src/java/davmail/imap/ImapConnection.java b/src/java/davmail/imap/ImapConnection.java index 0a65a8ea..e2c8912a 100644 --- a/src/java/davmail/imap/ImapConnection.java +++ b/src/java/davmail/imap/ImapConnection.java @@ -16,6 +16,7 @@ import java.net.Socket; import java.net.SocketTimeoutException; import java.net.SocketException; import java.util.*; +import java.text.SimpleDateFormat; /** * Dav Gateway smtp connection implementation. @@ -305,10 +306,15 @@ public class ImapConnection extends AbstractConnection { properties.put("junk", "1"); } } - // skip optional date - // TODO : replace datereceived + // handle optional date String dateOrSize = tokens.nextToken(); if (tokens.hasMoreTokens()) { + SimpleDateFormat dateParser = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss Z", Locale.ENGLISH); + Date dateReceived = dateParser.parse(dateOrSize); + SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + dateFormatter.setTimeZone(ExchangeSession.GMT_TIMEZONE); + + properties.put("datereceived", dateFormatter.format(dateReceived)); dateOrSize = tokens.nextToken(); } int size = Integer.parseInt(dateOrSize);