imap: Enabled APPEND support in imap_perform()
authorJiri Hruska <jirka@fud.cz>
Fri, 1 Mar 2013 19:49:14 +0000 (20:49 +0100)
committerSteve Holme <steve_holme@hotmail.com>
Sat, 2 Mar 2013 20:17:45 +0000 (20:17 +0000)
Added logic in imap_perform() to perform an APPEND rather than SELECT
and FETCH if an upload has been specified.

lib/imap.c

index c1eef85..fafbdee 100644 (file)
@@ -1721,8 +1721,8 @@ static CURLcode imap_done(struct connectdata *conn, CURLcode status,
  *
  * imap_perform()
  *
- * This is the actual DO function for IMAP. Fetch a message according to the
- * options previously setup.
+ * This is the actual DO function for IMAP. Fetch or append a message
+ * according to the options previously setup.
  */
 static CURLcode imap_perform(struct connectdata *conn, bool *connected,
                              bool *dophase_done)
@@ -1743,10 +1743,14 @@ static CURLcode imap_perform(struct connectdata *conn, bool *connected,
   *dophase_done = FALSE; /* not done yet */
 
   /* Start the first command in the DO phase */
-  if(imap->mailbox && imapc->mailbox &&
-     !strcmp(imap->mailbox, imapc->mailbox) &&
-     (!imap->uidvalidity || !imapc->mailbox_uidvalidity ||
-      !strcmp(imap->uidvalidity, imapc->mailbox_uidvalidity))) {
+  if(conn->data->set.upload)
+    /* APPEND can be executed directly */
+    result = imap_append(conn);
+    /* FETCH needs a selected mailbox */
+  else if(imap->mailbox && imapc->mailbox &&
+          !strcmp(imap->mailbox, imapc->mailbox) &&
+          (!imap->uidvalidity || !imapc->mailbox_uidvalidity ||
+           !strcmp(imap->uidvalidity, imapc->mailbox_uidvalidity))) {
     /* This mailbox (with the same UIDVALIDITY if set) is already selected on
        this connection so go straight to the next fetch operation */
     result = imap_fetch(conn);