diff --git a/src/java/davmail/imap/ImapConnection.java b/src/java/davmail/imap/ImapConnection.java index 4c5f5add..460bf166 100644 --- a/src/java/davmail/imap/ImapConnection.java +++ b/src/java/davmail/imap/ImapConnection.java @@ -905,7 +905,8 @@ public class ImapConnection extends AbstractConnection { while (iterator.hasNext()) { ExchangeSession.Message message = iterator.next(); if ((conditions.flagged == null || message.flagged == conditions.flagged) - && (conditions.answered == null || message.answered == conditions.answered)) { + && (conditions.answered == null || message.answered == conditions.answered) + && (conditions.draft == null || message.draft == conditions.draft)) { uidList.add(message.getImapUid()); } } @@ -1169,6 +1170,7 @@ public class ImapConnection extends AbstractConnection { static final class SearchConditions { Boolean flagged; Boolean answered; + Boolean draft; String indexRange; String uidRange; } @@ -1215,6 +1217,10 @@ public class ImapConnection extends AbstractConnection { return session.isTrue("read"); } else if ("UNSEEN".equals(token) || "NEW".equals(token)) { return session.isFalse("read"); + } else if ("DRAFT".equals(token)) { + conditions.draft = Boolean.TRUE; + } else if ("UNDRAFT".equals(token)) { + conditions.draft = Boolean.FALSE; } else if ("DELETED".equals(token)) { // conditions.deleted = Boolean.TRUE; return session.isEqualTo("deleted", "1"); diff --git a/src/test/davmail/imap/TestImap.java b/src/test/davmail/imap/TestImap.java index 252462f5..2af6cd31 100644 --- a/src/test/davmail/imap/TestImap.java +++ b/src/test/davmail/imap/TestImap.java @@ -316,6 +316,14 @@ public class TestImap extends AbstractImapTestCase { assertEquals(". OK SEARCH completed", readFullAnswer(".")); } + public void testSearchUndraft() throws IOException { + testSelectInbox(); + writeLine(". UID SEARCH UNDRAFT"); + assertEquals(". OK SEARCH completed", readFullAnswer(".")); + writeLine(". UID SEARCH DRAFT"); + assertEquals(". OK SEARCH completed", readFullAnswer(".")); + } + public void testBrokenPipe() throws IOException, InterruptedException { testSelectInbox(); writeLine(". UID FETCH 1:* (RFC822.SIZE BODY.TEXT)");