Chilkat version 9.3.0, being released this week, includes new IMAP functionality to fetch emails without downloading attachments, and then subsequently fetch attachments one at a time separately.

There is a new boolean property named “AutoDownloadAttachments”, which has  a default value of True (YES).  If set to False (NO), then all Fetch* methods will not download attachments.

Note:  “related” items are downloaded.  These are images, style sheets, etc. that are embedded within the
HTML body of an email, and are not considered attachments.

Also:  All signed and/or encrypted emails must be downloaded in full.

When an email is downloaded without attachments, the attachment information is included in header fields.  The header fields have names beginning with “ckx-imap-“.  The attachment information can be obtained via the following methods:

imap.GetMailNumAttach
imap.GetMailAttachFilename
imap.GetMailAttachSize

Individual attachments can be downloaded via the newly added FetchAttachment* methods:

  1. FetchAttachment:  Downloads an attachment and saves to a file.
  2. FetchAttachmentBytes:  Downloads an attachment to an in-memory byte array.
  3. FetchAttachmentString: Downloads an attachment to a string variable.

Here are the FetchAttachment* method signatures in Objective-C:

// method: FetchAttachment
– (BOOL)FetchAttachment: (CkoEmail *)email
attachIndex: (NSNumber *)attachIndex
saveToPath: (NSString *)saveToPath;

// method: FetchAttachmentBytes
– (NSData *)FetchAttachmentBytes: (CkoEmail *)email
attachIndex: (NSNumber *)attachIndex;

// method: FetchAttachmentString
– (NSString *)FetchAttachmentString: (CkoEmail *)email
attachIndex: (NSNumber *)attachIndex
charset: (NSString *)charset;