diff --git a/src/java/davmail/exchange/ExchangeSession.java b/src/java/davmail/exchange/ExchangeSession.java index 75b3f936..7744b150 100644 --- a/src/java/davmail/exchange/ExchangeSession.java +++ b/src/java/davmail/exchange/ExchangeSession.java @@ -544,7 +544,8 @@ public class ExchangeSession { } else if ("x0E070003".equals(localName)) { message.draft = "9".equals(prop.getPropertyAsString()); } else if ("x10810003".equals(localName)) { - message.answered = prop.getPropertyAsString().length() > 0; + message.answered = "102".equals(prop.getPropertyAsString()) || "103".equals(prop.getPropertyAsString()); + message.forwarded = "104".equals(prop.getPropertyAsString()); } else if ("isdeleted".equals(localName)) { message.deleted = "1".equals(prop.getPropertyAsString()); } else if ("message-id".equals(prop.getLocalName())) { @@ -583,6 +584,14 @@ public class ExchangeSession { patchMethod.addPropertyToSet("x10900003", entry.getValue(), "f", "http://schemas.microsoft.com/mapi/proptag/"); } else if ("answered".equals(entry.getKey())) { patchMethod.addPropertyToSet("x10810003", entry.getValue(), "f", "http://schemas.microsoft.com/mapi/proptag/"); + if ("102".equals(entry.getValue())) { + patchMethod.addPropertyToSet("x10800003", "261", "f", "http://schemas.microsoft.com/mapi/proptag/"); + } + } else if ("forwarded".equals(entry.getKey())) { + patchMethod.addPropertyToSet("x10810003", entry.getValue(), "f", "http://schemas.microsoft.com/mapi/proptag/"); + if ("104".equals(entry.getValue())) { + patchMethod.addPropertyToSet("x10800003", "262", "f", "http://schemas.microsoft.com/mapi/proptag/"); + } } else if ("bcc".equals(entry.getKey())) { patchMethod.addPropertyToSet("bcc", entry.getValue(), "b", "urn:schemas:mailheader:"); } else if ("draft".equals(entry.getKey())) { @@ -949,6 +958,7 @@ public class ExchangeSession { public boolean flagged; public boolean draft; public boolean answered; + public boolean forwarded; public long getUidAsLong() { byte[] decodedValue = Base64.decode(uid.getBytes()); @@ -982,6 +992,9 @@ public class ExchangeSession { if (answered) { buffer.append("\\Answered "); } + if (forwarded) { + buffer.append("$Forwarded "); + } return buffer.toString().trim(); } diff --git a/src/java/davmail/imap/ImapConnection.java b/src/java/davmail/imap/ImapConnection.java index ebcc4784..c05c243e 100644 --- a/src/java/davmail/imap/ImapConnection.java +++ b/src/java/davmail/imap/ImapConnection.java @@ -155,8 +155,8 @@ public class ImapConnection extends AbstractConnection { } else { sendClient("* OK [UIDNEXT " + (messages.get(messages.size() - 1).getUidAsLong() + 1) + "]"); } - sendClient("* FLAGS (\\Answered \\Deleted \\Draft \\Flagged \\Seen $Forwarded Forwarded Junk)"); - sendClient("* OK [PERMANENTFLAGS (\\Answered \\Deleted \\Draft \\Flagged \\Seen $Forwarded Forwarded Junk \\*)]"); + sendClient("* FLAGS (\\Answered \\Deleted \\Draft \\Flagged \\Seen $Forwarded Junk)"); + sendClient("* OK [PERMANENTFLAGS (\\Answered \\Deleted \\Draft \\Flagged \\Seen $Forwarded Junk \\*)]"); //sendClient("* [UNSEEN 1] first unseen message in inbox"); sendClient(commandId + " OK [READ-WRITE] " + command + " completed"); } else { @@ -296,7 +296,9 @@ public class ImapConnection extends AbstractConnection { } else if ("\\Flagged".equals(flag)) { properties.put("flagged", "2"); } else if ("\\Answered".equals(flag)) { - properties.put("answered", "103"); + properties.put("answered", "102"); + } else if ("$Forwarded".equals(flag)) { + properties.put("forwarded", "104"); } else if ("\\Draft".equals(flag)) { properties.put("draft", "9"); } else if ("Junk".equals(flag)) { @@ -420,8 +422,11 @@ public class ImapConnection extends AbstractConnection { properties.put("flagged", "2"); message.flagged = true; } else if ("\\Answered".equals(flag)) { - properties.put("answered", "103"); + properties.put("answered", "102"); message.answered = true; + } else if ("$Forwarded".equals(flag)) { + properties.put("forwarded", "104"); + message.forwarded = true; } else if ("Junk".equals(flag)) { properties.put("junk", "1"); message.junk = true;